From 32652a74989a121b10b604b20adc3676caf72245 Mon Sep 17 00:00:00 2001 From: Julien Doutre <36448022+juliendoutre@users.noreply.github.com> Date: Fri, 19 Apr 2024 16:21:40 +0200 Subject: [PATCH 01/32] Detect Slack workflows webhook (#2569) --- pkg/detectors/slackwebhook/slackwebhook.go | 107 +++++++++++---------- 1 file changed, 56 insertions(+), 51 deletions(-) diff --git a/pkg/detectors/slackwebhook/slackwebhook.go b/pkg/detectors/slackwebhook/slackwebhook.go index d8747a860..b038bcb13 100644 --- a/pkg/detectors/slackwebhook/slackwebhook.go +++ b/pkg/detectors/slackwebhook/slackwebhook.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "fmt" - regexp "github.com/wasilibs/go-re2" "io" "net/http" "strings" @@ -12,6 +11,7 @@ import ( "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" + regexp "github.com/wasilibs/go-re2" ) type Scanner struct { @@ -24,7 +24,10 @@ var _ detectors.Detector = (*Scanner)(nil) var ( defaultClient = common.SaneHttpClient() // Make sure that your group is surrounded in boundary characters such as below to reduce false positives. - keyPat = regexp.MustCompile(`(https://hooks\.slack\.com/services/T[A-Z0-9]+/B[A-Z0-9]+/[A-Za-z0-9]{23,25})`) + keyPats = map[string]*regexp.Regexp{ + "Slack Service Web Hook": regexp.MustCompile(`(https://hooks\.slack\.com/services/T[A-Z0-9]+/B[A-Z0-9]+/[A-Za-z0-9]{23,25})`), + "Slack Workflow Web Hook ": regexp.MustCompile(`(https://hooks\.slack\.com/workflows/T[A-Z0-9]+/A[A-Z0-9]+/[0-9]{17,19}/[A-Za-z0-9]{23,25})`), + } ) // Keywords are used for efficiently pre-filtering chunks. @@ -37,67 +40,69 @@ func (s Scanner) Keywords() []string { func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) { dataStr := string(data) - matches := keyPat.FindAllStringSubmatch(dataStr, -1) + for _, keyPat := range keyPats { + matches := keyPat.FindAllStringSubmatch(dataStr, -1) - for _, match := range matches { - if len(match) != 2 { - continue - } - resMatch := strings.TrimSpace(match[1]) - - s1 := detectors.Result{ - DetectorType: detectorspb.DetectorType_SlackWebhook, - Raw: []byte(resMatch), - } - s1.ExtraData = map[string]string{ - "rotation_guide": "https://howtorotate.com/docs/tutorials/slack-webhook/", - } - - if verify { - - client := s.client - if client == nil { - client = defaultClient - } - - // We don't want to actually send anything to webhooks we find. To verify them without spamming them, we - // send an intentionally malformed message and look for a particular expected error message. - payload := strings.NewReader(`intentionally malformed JSON from TruffleHog scan`) - req, err := http.NewRequestWithContext(ctx, "POST", resMatch, payload) - if err != nil { + for _, match := range matches { + if len(match) != 2 { continue } - req.Header.Add("Content-Type", "application/json") - res, err := client.Do(req) - if err == nil { - defer res.Body.Close() - bodyBytes, err := io.ReadAll(res.Body) + resMatch := strings.TrimSpace(match[1]) + + s1 := detectors.Result{ + DetectorType: detectorspb.DetectorType_SlackWebhook, + Raw: []byte(resMatch), + } + s1.ExtraData = map[string]string{ + "rotation_guide": "https://howtorotate.com/docs/tutorials/slack-webhook/", + } + + if verify { + + client := s.client + if client == nil { + client = defaultClient + } + + // We don't want to actually send anything to webhooks we find. To verify them without spamming them, we + // send an intentionally malformed message and look for a particular expected error message. + payload := strings.NewReader(`intentionally malformed JSON from TruffleHog scan`) + req, err := http.NewRequestWithContext(ctx, "POST", resMatch, payload) if err != nil { continue } + req.Header.Add("Content-Type", "application/json") + res, err := client.Do(req) + if err == nil { + defer res.Body.Close() + bodyBytes, err := io.ReadAll(res.Body) + if err != nil { + continue + } - defer res.Body.Close() + defer res.Body.Close() - switch { - case res.StatusCode >= http.StatusOK && res.StatusCode < http.StatusMultipleChoices: - // Hopefully this never happens - it means we actually sent something to a channel somewhere. But - // we at least know the secret is verified. - s1.Verified = true - case res.StatusCode == http.StatusBadRequest && bytes.Equal(bodyBytes, []byte("invalid_payload")): - s1.Verified = true - case res.StatusCode == http.StatusNotFound: - // Not a real webhook or the owning app's OAuth token has been revoked or the app has been deleted - // You might want to handle this case or log it. - default: - err = fmt.Errorf("unexpected HTTP response status %d: %s", res.StatusCode, bodyBytes) + switch { + case res.StatusCode >= http.StatusOK && res.StatusCode < http.StatusMultipleChoices: + // Hopefully this never happens - it means we actually sent something to a channel somewhere. But + // we at least know the secret is verified. + s1.Verified = true + case res.StatusCode == http.StatusBadRequest && bytes.Equal(bodyBytes, []byte("invalid_payload")): + s1.Verified = true + case res.StatusCode == http.StatusNotFound: + // Not a real webhook or the owning app's OAuth token has been revoked or the app has been deleted + // You might want to handle this case or log it. + default: + err = fmt.Errorf("unexpected HTTP response status %d: %s", res.StatusCode, bodyBytes) + s1.SetVerificationError(err, resMatch) + } + } else { s1.SetVerificationError(err, resMatch) } - } else { - s1.SetVerificationError(err, resMatch) } - } - results = append(results, s1) + results = append(results, s1) + } } return results, nil From 336f0e209cf71fdc85fd7479293af3489a9e632d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 20 Apr 2024 10:05:58 -0700 Subject: [PATCH 02/32] fix(deps): update module github.com/aws/aws-sdk-go to v1.51.25 (#2723) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 08a15309b..5ae359502 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/TheZeroSlave/zapsentry v1.23.0 github.com/adrg/strutil v0.3.1 github.com/alecthomas/kingpin/v2 v2.4.0 - github.com/aws/aws-sdk-go v1.51.24 + github.com/aws/aws-sdk-go v1.51.25 github.com/aymanbagabas/go-osc52 v1.2.2 github.com/bill-rich/go-syslog v0.0.0-20220413021637-49edb52a574c github.com/bitfinexcom/bitfinex-api-go v0.0.0-20210608095005-9e0b26f200fb diff --git a/go.sum b/go.sum index 98e46588e..a5a5078f8 100644 --- a/go.sum +++ b/go.sum @@ -142,6 +142,8 @@ github.com/aws/aws-sdk-go v1.51.23 h1:/3TEdsEE/aHmdKGw2NrOp7Sdea76zfffGkTTSXTsDx github.com/aws/aws-sdk-go v1.51.23/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go v1.51.24 h1:nwL5MaommPkwb7Ixk24eWkdx5HY4of1gD10kFFVAl6A= github.com/aws/aws-sdk-go v1.51.24/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.51.25 h1:DjTT8mtmsachhV6yrXR8+yhnG6120dazr720nopRsls= +github.com/aws/aws-sdk-go v1.51.25/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw= github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/aymanbagabas/go-osc52 v1.2.2 h1:NT7wkhEhPTcKnBCdPi9djmyy9L3JOL4+3SsfJyqptCo= From dae5881751a75b08833b63a869bb88621da5cfd6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 20 Apr 2024 10:06:48 -0700 Subject: [PATCH 03/32] fix(deps): update module github.com/microsoft/go-mssqldb to v1.7.1 (#2720) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 5ae359502..19b2830cd 100644 --- a/go.mod +++ b/go.mod @@ -61,7 +61,7 @@ require ( github.com/marusama/semaphore/v2 v2.5.0 github.com/mattn/go-isatty v0.0.20 github.com/mholt/archiver/v4 v4.0.0-alpha.8 - github.com/microsoft/go-mssqldb v1.7.0 + github.com/microsoft/go-mssqldb v1.7.1 github.com/mitchellh/go-ps v1.0.0 github.com/muesli/reflow v0.3.0 github.com/patrickmn/go-cache v2.1.0+incompatible diff --git a/go.sum b/go.sum index a5a5078f8..c3d844f60 100644 --- a/go.sum +++ b/go.sum @@ -576,6 +576,8 @@ github.com/microcosm-cc/bluemonday v1.0.25 h1:4NEwSfiJ+Wva0VxN5B8OwMicaJvD8r9tlJ github.com/microcosm-cc/bluemonday v1.0.25/go.mod h1:ZIOjCQp1OrzBBPIJmfX4qDYFuhU02nx4bn030ixfHLE= github.com/microsoft/go-mssqldb v1.7.0 h1:sgMPW0HA6Ihd37Yx0MzHyKD726C2kY/8KJsQtXHNaAs= github.com/microsoft/go-mssqldb v1.7.0/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA= +github.com/microsoft/go-mssqldb v1.7.1 h1:KU/g8aWeM3Hx7IMOFpiwYiUkU+9zeISb4+tx3ScVfsM= +github.com/microsoft/go-mssqldb v1.7.1/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= From 6fd73056863fdd17717a4ab4aa90076e3d22accb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Apr 2024 08:36:43 -0700 Subject: [PATCH 04/32] fix(deps): update module google.golang.org/api to v0.175.0 (#2724) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 6 +++--- go.sum | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 19b2830cd..214cc957b 100644 --- a/go.mod +++ b/go.mod @@ -90,7 +90,7 @@ require ( golang.org/x/oauth2 v0.19.0 golang.org/x/sync v0.7.0 golang.org/x/text v0.14.0 - google.golang.org/api v0.174.0 + google.golang.org/api v0.175.0 google.golang.org/protobuf v1.33.0 gopkg.in/h2non/gock.v1 v1.1.2 pgregory.net/rapid v1.1.0 @@ -99,8 +99,8 @@ require ( require ( cloud.google.com/go v0.112.1 // indirect - cloud.google.com/go/auth v0.2.0 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.0 // indirect + cloud.google.com/go/auth v0.2.2 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.1 // indirect cloud.google.com/go/compute v1.24.0 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/iam v1.1.7 // indirect diff --git a/go.sum b/go.sum index c3d844f60..cbf09e328 100644 --- a/go.sum +++ b/go.sum @@ -11,8 +11,12 @@ cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= cloud.google.com/go/auth v0.2.0 h1:y6oTcpMSbOcXbwYgUUrvI+mrQ2xbrcdpPgtVbCGTLTk= cloud.google.com/go/auth v0.2.0/go.mod h1:+yb+oy3/P0geX6DLKlqiGHARGR6EX2GRtYCzWOCQSbU= +cloud.google.com/go/auth v0.2.2 h1:gmxNJs4YZYcw6YvKRtVBaF2fyUE6UrWPyzU8jHvYfmI= +cloud.google.com/go/auth v0.2.2/go.mod h1:2bDNJWtWziDT3Pu1URxHHbkHE/BbOCuyUiKIGcNvafo= cloud.google.com/go/auth/oauth2adapt v0.2.0 h1:FR8zevgQwu+8CqiOT5r6xCmJa3pJC/wdXEEPF1OkNhA= cloud.google.com/go/auth/oauth2adapt v0.2.0/go.mod h1:AfqujpDAlTfLfeCIl/HJZZlIxD8+nJoZ5e0x1IxGq5k= +cloud.google.com/go/auth/oauth2adapt v0.2.1 h1:VSPmMmUlT8CkIZ2PzD9AlLN+R3+D1clXMWHHa6vG/Ag= +cloud.google.com/go/auth/oauth2adapt v0.2.1/go.mod h1:tOdK/k+D2e4GEwfBRA48dKNQiDsqIXxLh7VU319eV0g= 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/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= @@ -1091,6 +1095,8 @@ google.golang.org/api v0.173.0 h1:fz6B7GWYWLS/HfruiTsRYVKQQApJ6vasTYWAK6+Qo8g= google.golang.org/api v0.173.0/go.mod h1:ins7pTzjeBPQ3SdC/plzki6d/dQWwAWy8qVZ4Vgkzl8= google.golang.org/api v0.174.0 h1:zB1BWl7ocxfTea2aQ9mgdzXjnfPySllpPOskdnO+q34= google.golang.org/api v0.174.0/go.mod h1:aC7tB6j0HR1Nl0ni5ghpx6iLasmAX78Zkh/wgxAAjLg= +google.golang.org/api v0.175.0 h1:9bMDh10V9cBuU8N45Wlc3cKkItfqMRV0Fi8UscLEtbY= +google.golang.org/api v0.175.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8= 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= From 3fa86a1008d96e377f7f7f944b357b66be620c6f Mon Sep 17 00:00:00 2001 From: Ankush Goel Date: Sun, 21 Apr 2024 22:36:51 +0530 Subject: [PATCH 05/32] added onfleet api key detector (#2375) * added onfleet detector * use organization get endpoint --------- Co-authored-by: Ahrav Dutta --- pkg/detectors/onfleet/onfleet.go | 105 ++++++++++++ pkg/detectors/onfleet/onfleet_test.go | 221 ++++++++++++++++++++++++++ pkg/engine/defaults.go | 2 + pkg/pb/detectorspb/detectors.pb.go | 17 +- proto/detectors.proto | 1 + 5 files changed, 339 insertions(+), 7 deletions(-) create mode 100644 pkg/detectors/onfleet/onfleet.go create mode 100644 pkg/detectors/onfleet/onfleet_test.go diff --git a/pkg/detectors/onfleet/onfleet.go b/pkg/detectors/onfleet/onfleet.go new file mode 100644 index 000000000..cb1060b0d --- /dev/null +++ b/pkg/detectors/onfleet/onfleet.go @@ -0,0 +1,105 @@ +package onfleet + +import ( + "context" + b64 "encoding/base64" + "fmt" + "io" + "net/http" + + regexp "github.com/wasilibs/go-re2" + + "github.com/trufflesecurity/trufflehog/v3/pkg/common" + "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" + "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" +) + +type Scanner struct { + client *http.Client +} + +// Ensure the Scanner satisfies the interface at compile time. +var _ detectors.Detector = (*Scanner)(nil) + +var ( + defaultClient = common.SaneHttpClient() + // Make sure that your group is surrounded in boundary characters such as below to reduce false positives. + keyPat = regexp.MustCompile(detectors.PrefixRegex([]string{"onfleet"}) + `\b([a-z0-9]{32})\b`) +) + +// Keywords are used for efficiently pre-filtering chunks. +// Use identifiers in the secret preferably, or the provider name. +func (s Scanner) Keywords() []string { + return []string{"onfleet"} +} + +// FromData will find and optionally verify Onfleet secrets in a given set of bytes. +func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) { + dataStr := string(data) + + uniqueMatches := make(map[string]struct{}) + for _, match := range keyPat.FindAllStringSubmatch(dataStr, -1) { + uniqueMatches[match[1]] = struct{}{} + } + + for match := range uniqueMatches { + s1 := detectors.Result{ + DetectorType: detectorspb.DetectorType_Onfleet, + Raw: []byte(match), + } + + if verify { + client := s.client + if client == nil { + client = defaultClient + } + + isVerified, extraData, verificationErr := verifyMatch(ctx, client, match) + s1.Verified = isVerified + s1.ExtraData = extraData + s1.SetVerificationError(verificationErr, match) + } + + // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. + if !s1.Verified && detectors.IsKnownFalsePositive(match, detectors.DefaultFalsePositives, true) { + continue + } + + results = append(results, s1) + } + + return +} + +func verifyMatch(ctx context.Context, client *http.Client, token string) (bool, map[string]string, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, "https://onfleet.com/api/v2/organization", nil) + if err != nil { + return false, nil, nil + } + data := fmt.Sprintf("%s:", token) + encoded := b64.StdEncoding.EncodeToString([]byte(data)) + req.Header.Add("Authorization", fmt.Sprintf("Basic %s", encoded)) + res, err := client.Do(req) + if err != nil { + return false, nil, err + } + defer func() { + _, _ = io.Copy(io.Discard, res.Body) + _ = res.Body.Close() + }() + + if res.StatusCode >= 200 && res.StatusCode < 300 { + // If the endpoint returns useful information, we can return it as a map. + return true, nil, nil + } else if res.StatusCode == 401 { + // The secret is determinately not verified (nothing to do) + return false, nil, nil + } else { + err = fmt.Errorf("unexpected HTTP response status %d", res.StatusCode) + return false, nil, err + } +} + +func (s Scanner) Type() detectorspb.DetectorType { + return detectorspb.DetectorType_Onfleet +} diff --git a/pkg/detectors/onfleet/onfleet_test.go b/pkg/detectors/onfleet/onfleet_test.go new file mode 100644 index 000000000..bbae2a885 --- /dev/null +++ b/pkg/detectors/onfleet/onfleet_test.go @@ -0,0 +1,221 @@ +//go:build detectors +// +build detectors + +package onfleet + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + + "github.com/trufflesecurity/trufflehog/v3/pkg/common" + "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" + "github.com/trufflesecurity/trufflehog/v3/pkg/engine/ahocorasick" + "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" +) + +func TestOnfleet_Pattern(t *testing.T) { + d := Scanner{} + ahoCorasickCore := ahocorasick.NewAhoCorasickCore([]detectors.Detector{d}) + tests := []struct { + name string + input string + want []string + }{ + { + name: "typical pattern", + input: "onfleet_token = 'fhyki1ktfg7upk93qmzm424mn8p3tbm1'", + want: []string{"fhyki1ktfg7upk93qmzm424mn8p3tbm1"}, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + chunkSpecificDetectors := make(map[ahocorasick.DetectorKey]detectors.Detector, 2) + ahoCorasickCore.PopulateMatchingDetectors(test.input, chunkSpecificDetectors) + if len(chunkSpecificDetectors) == 0 { + t.Errorf("keywords '%v' not matched by: %s", d.Keywords(), test.input) + return + } + + results, err := d.FromData(context.Background(), false, []byte(test.input)) + if err != nil { + t.Errorf("error = %v", err) + return + } + + if len(results) != len(test.want) { + if len(results) == 0 { + t.Errorf("did not receive result") + } else { + t.Errorf("expected %d results, only received %d", len(test.want), len(results)) + } + return + } + + actual := make(map[string]struct{}, len(results)) + for _, r := range results { + if len(r.RawV2) > 0 { + actual[string(r.RawV2)] = struct{}{} + } else { + actual[string(r.Raw)] = struct{}{} + } + } + expected := make(map[string]struct{}, len(test.want)) + for _, v := range test.want { + expected[v] = struct{}{} + } + + if diff := cmp.Diff(expected, actual); diff != "" { + t.Errorf("%s diff: (-want +got)\n%s", test.name, diff) + } + }) + } +} + +func TestOnfleet_FromChunk(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + defer cancel() + testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors5") + if err != nil { + t.Fatalf("could not get test secrets from GCP: %s", err) + } + secret := testSecrets.MustGetField("ONFLEET") + inactiveSecret := testSecrets.MustGetField("ONFLEET_INACTIVE") + + type args struct { + ctx context.Context + data []byte + verify bool + } + tests := []struct { + name string + s Scanner + args args + want []detectors.Result + wantErr bool + wantVerificationErr bool + }{ + { + name: "found, verified", + s: Scanner{}, + args: args{ + ctx: context.Background(), + data: []byte(fmt.Sprintf("You can find a onfleet secret %s within", secret)), + verify: true, + }, + want: []detectors.Result{ + { + DetectorType: detectorspb.DetectorType_Onfleet, + Verified: true, + }, + }, + wantErr: false, + wantVerificationErr: false, + }, + { + name: "found, unverified", + s: Scanner{}, + args: args{ + ctx: context.Background(), + data: []byte(fmt.Sprintf("You can find a onfleet secret %s within but not valid", inactiveSecret)), // the secret would satisfy the regex but not pass validation + verify: true, + }, + want: []detectors.Result{ + { + DetectorType: detectorspb.DetectorType_Onfleet, + Verified: false, + }, + }, + wantErr: false, + wantVerificationErr: false, + }, + { + name: "not found", + s: Scanner{}, + args: args{ + ctx: context.Background(), + data: []byte("You cannot find the secret within"), + verify: true, + }, + want: nil, + wantErr: false, + wantVerificationErr: false, + }, + { + name: "found, would be verified if not for timeout", + s: Scanner{client: common.SaneHttpClientTimeOut(1 * time.Microsecond)}, + args: args{ + ctx: context.Background(), + data: []byte(fmt.Sprintf("You can find a onfleet secret %s within", secret)), + verify: true, + }, + want: []detectors.Result{ + { + DetectorType: detectorspb.DetectorType_Onfleet, + Verified: false, + }, + }, + wantErr: false, + wantVerificationErr: true, + }, + { + name: "found, verified but unexpected api surface", + s: Scanner{client: common.ConstantResponseHttpClient(404, "")}, + args: args{ + ctx: context.Background(), + data: []byte(fmt.Sprintf("You can find a onfleet secret %s within", secret)), + verify: true, + }, + want: []detectors.Result{ + { + DetectorType: detectorspb.DetectorType_Onfleet, + Verified: false, + }, + }, + wantErr: false, + wantVerificationErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := tt.s.FromData(tt.args.ctx, tt.args.verify, tt.args.data) + if (err != nil) != tt.wantErr { + t.Errorf("Onfleet.FromData() error = %v, wantErr %v", err, tt.wantErr) + return + } + for i := range got { + if len(got[i].Raw) == 0 { + t.Fatalf("no raw secret present: \n %+v", got[i]) + } + if (got[i].VerificationError() != nil) != tt.wantVerificationErr { + t.Fatalf("wantVerificationError = %v, verification error = %v", tt.wantVerificationErr, got[i].VerificationError()) + } + } + ignoreOpts := cmpopts.IgnoreFields(detectors.Result{}, "Raw", "verificationError") + if diff := cmp.Diff(got, tt.want, ignoreOpts); diff != "" { + t.Errorf("Onfleet.FromData() %s diff: (-got +want)\n%s", tt.name, diff) + } + }) + } +} + +func BenchmarkFromData(benchmark *testing.B) { + ctx := context.Background() + s := Scanner{} + for name, data := range detectors.MustGetBenchmarkData() { + benchmark.Run(name, func(b *testing.B) { + b.ResetTimer() + for n := 0; n < b.N; n++ { + _, err := s.FromData(ctx, false, data) + if err != nil { + b.Fatal(err) + } + } + }) + } +} diff --git a/pkg/engine/defaults.go b/pkg/engine/defaults.go index ce79dbb29..0b3ba3980 100644 --- a/pkg/engine/defaults.go +++ b/pkg/engine/defaults.go @@ -469,6 +469,7 @@ import ( "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/onelogin" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/onepagecrm" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/onesignal" + "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/onfleet" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/onwaterio" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/oopspam" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors/openai" @@ -1601,6 +1602,7 @@ func DefaultDetectors() []detectors.Detector { &jupiterone.Scanner{}, gcpapplicationdefaultcredentials.Scanner{}, wiz.Scanner{}, + onfleet.Scanner{}, } } diff --git a/pkg/pb/detectorspb/detectors.pb.go b/pkg/pb/detectorspb/detectors.pb.go index 818031e81..8b091b588 100644 --- a/pkg/pb/detectorspb/detectors.pb.go +++ b/pkg/pb/detectorspb/detectors.pb.go @@ -1084,6 +1084,7 @@ const ( DetectorType_GCPApplicationDefaultCredentials DetectorType = 983 DetectorType_Wiz DetectorType = 984 DetectorType_Pagarme DetectorType = 985 + DetectorType_Onfleet DetectorType = 986 ) // Enum value maps for DetectorType. @@ -2071,6 +2072,7 @@ var ( 983: "GCPApplicationDefaultCredentials", 984: "Wiz", 985: "Pagarme", + 986: "Onfleet", } DetectorType_value = map[string]int32{ "Alibaba": 0, @@ -3055,6 +3057,7 @@ var ( "GCPApplicationDefaultCredentials": 983, "Wiz": 984, "Pagarme": 985, + "Onfleet": 986, } ) @@ -3435,7 +3438,7 @@ var file_detectors_proto_rawDesc = []byte{ 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x41, 0x53, 0x45, 0x36, 0x34, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x54, 0x46, 0x31, 0x36, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x53, 0x43, 0x41, 0x50, 0x45, 0x44, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x04, 0x2a, - 0xe9, 0x7d, 0x0a, 0x0c, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, + 0xf7, 0x7d, 0x0a, 0x0c, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x6c, 0x69, 0x62, 0x61, 0x62, 0x61, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x4d, 0x51, 0x50, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x57, 0x53, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, @@ -4441,12 +4444,12 @@ var file_detectors_proto_rawDesc = []byte{ 0x47, 0x43, 0x50, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x10, 0xd7, 0x07, 0x12, 0x08, 0x0a, 0x03, 0x57, 0x69, 0x7a, 0x10, 0xd8, 0x07, 0x12, 0x0c, 0x0a, - 0x07, 0x50, 0x61, 0x67, 0x61, 0x72, 0x6d, 0x65, 0x10, 0xd9, 0x07, 0x42, 0x3d, 0x5a, 0x3b, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x72, 0x75, 0x66, 0x66, 0x6c, - 0x65, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x66, 0x66, 0x6c, - 0x65, 0x68, 0x6f, 0x67, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x64, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x07, 0x50, 0x61, 0x67, 0x61, 0x72, 0x6d, 0x65, 0x10, 0xd9, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x4f, + 0x6e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x10, 0xda, 0x07, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x72, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x73, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x68, + 0x6f, 0x67, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x64, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/detectors.proto b/proto/detectors.proto index da04117aa..d44f6c736 100644 --- a/proto/detectors.proto +++ b/proto/detectors.proto @@ -995,6 +995,7 @@ enum DetectorType { GCPApplicationDefaultCredentials = 983; Wiz = 984; Pagarme = 985; + Onfleet = 986; } message Result { From be7e7957502b69a8d6b6959ee1e8324dddb5969f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 09:07:12 -0700 Subject: [PATCH 06/32] fix(deps): update module google.golang.org/api to v0.176.0 (#2726) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 214cc957b..4423994c8 100644 --- a/go.mod +++ b/go.mod @@ -90,7 +90,7 @@ require ( golang.org/x/oauth2 v0.19.0 golang.org/x/sync v0.7.0 golang.org/x/text v0.14.0 - google.golang.org/api v0.175.0 + google.golang.org/api v0.176.0 google.golang.org/protobuf v1.33.0 gopkg.in/h2non/gock.v1 v1.1.2 pgregory.net/rapid v1.1.0 diff --git a/go.sum b/go.sum index cbf09e328..0ed180555 100644 --- a/go.sum +++ b/go.sum @@ -1097,6 +1097,8 @@ google.golang.org/api v0.174.0 h1:zB1BWl7ocxfTea2aQ9mgdzXjnfPySllpPOskdnO+q34= google.golang.org/api v0.174.0/go.mod h1:aC7tB6j0HR1Nl0ni5ghpx6iLasmAX78Zkh/wgxAAjLg= google.golang.org/api v0.175.0 h1:9bMDh10V9cBuU8N45Wlc3cKkItfqMRV0Fi8UscLEtbY= google.golang.org/api v0.175.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8= +google.golang.org/api v0.176.0 h1:dHj1/yv5Dm/eQTXiP9hNCRT3xzJHWXeNdRq29XbMxoE= +google.golang.org/api v0.176.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8= 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= From e6280662cc70f8643a0b6012cc9fc7aac1372c84 Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Fri, 12 Apr 2024 20:31:07 -0700 Subject: [PATCH 07/32] Remove specialized handler and archive struct and restructure handlers pkg. --- pkg/handlers/archive.go | 554 ------------------ pkg/handlers/arhandler.go | 18 + pkg/handlers/defaulthandler.go | 226 +++++++ pkg/handlers/defaulthandler_test.go | 111 ++++ pkg/handlers/handlers.go | 149 +++-- .../{archive_test.go => handlers_test.go} | 206 +------ pkg/handlers/rpmhandler.go | 18 + 7 files changed, 469 insertions(+), 813 deletions(-) delete mode 100644 pkg/handlers/archive.go create mode 100644 pkg/handlers/arhandler.go create mode 100644 pkg/handlers/defaulthandler.go create mode 100644 pkg/handlers/defaulthandler_test.go rename pkg/handlers/{archive_test.go => handlers_test.go} (59%) create mode 100644 pkg/handlers/rpmhandler.go diff --git a/pkg/handlers/archive.go b/pkg/handlers/archive.go deleted file mode 100644 index d42b44b90..000000000 --- a/pkg/handlers/archive.go +++ /dev/null @@ -1,554 +0,0 @@ -package handlers - -import ( - "bufio" - "bytes" - "context" - "errors" - "fmt" - "io" - "os" - "os/exec" - "path/filepath" - "strings" - "time" - - "github.com/gabriel-vasile/mimetype" - "github.com/h2non/filetype" - "github.com/mholt/archiver/v4" - - "github.com/trufflesecurity/trufflehog/v3/pkg/common" - logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" - "github.com/trufflesecurity/trufflehog/v3/pkg/sources" -) - -type ctxKey int - -const ( - depthKey ctxKey = iota - - errMaxArchiveDepthReached = "max archive depth reached" -) - -var ( - maxDepth = 5 - maxSize = 250 * 1024 * 1024 // 20MB - maxTimeout = time.Duration(30) * time.Second - - defaultBufferSize = 512 -) - -// Ensure the Archive satisfies the interfaces at compile time. -var _ SpecializedHandler = (*Archive)(nil) - -// Archive is a handler for extracting and decompressing archives. -type Archive struct { - size int - currentDepth int - skipBinaries bool - skipArchives bool -} - -// New creates a new Archive handler with the provided options. -func (a *Archive) New(opts ...Option) { - for _, opt := range opts { - opt(a) - } -} - -// SetArchiveMaxSize sets the maximum size of the archive. -func SetArchiveMaxSize(size int) { - maxSize = size -} - -// SetArchiveMaxDepth sets the maximum depth of the archive. -func SetArchiveMaxDepth(depth int) { - maxDepth = depth -} - -// SetArchiveMaxTimeout sets the maximum timeout for the archive handler. -func SetArchiveMaxTimeout(timeout time.Duration) { - maxTimeout = timeout -} - -// FromFile extracts the files from an archive. -func (a *Archive) FromFile(originalCtx logContext.Context, data io.Reader) chan []byte { - if a.skipArchives { - return nil - } - - archiveChan := make(chan []byte, defaultBufferSize) - go func() { - ctx, cancel := logContext.WithTimeout(originalCtx, maxTimeout) - logger := logContext.AddLogger(ctx).Logger() - defer cancel() - defer close(archiveChan) - err := a.openArchive(ctx, 0, data, archiveChan) - if err != nil { - if errors.Is(err, archiver.ErrNoMatch) { - return - } - logger.Error(err, "error unarchiving chunk.") - } - }() - return archiveChan -} - -// openArchive takes a reader and extracts the contents up to the maximum depth. -func (a *Archive) openArchive(ctx logContext.Context, depth int, reader io.Reader, archiveChan chan []byte) error { - if common.IsDone(ctx) { - return ctx.Err() - } - - if depth >= maxDepth { - return fmt.Errorf(errMaxArchiveDepthReached) - } - - format, arReader, err := archiver.Identify("", reader) - if errors.Is(err, archiver.ErrNoMatch) && depth > 0 { - return a.handleNonArchiveContent(ctx, arReader, archiveChan) - } - - if err != nil { - return err - } - - switch archive := format.(type) { - case archiver.Decompressor: - // Decompress tha archive and feed the decompressed data back into the archive handler to extract any nested archives. - compReader, err := archive.OpenReader(arReader) - if err != nil { - return err - } - - defer compReader.Close() - - return a.openArchive(ctx, depth+1, compReader, archiveChan) - case archiver.Extractor: - return archive.Extract(logContext.WithValue(ctx, depthKey, depth+1), arReader, nil, a.extractorHandler(archiveChan)) - default: - return fmt.Errorf("unknown archive type: %s", format.Name()) - } -} - -const mimeTypeBufferSize = 512 - -func (a *Archive) handleNonArchiveContent(ctx logContext.Context, reader io.Reader, archiveChan chan []byte) error { - bufReader := bufio.NewReaderSize(reader, mimeTypeBufferSize) - // A buffer of 512 bytes is used since many file formats store their magic numbers within the first 512 bytes. - // If fewer bytes are read, MIME type detection may still succeed. - buffer, err := bufReader.Peek(mimeTypeBufferSize) - if err != nil && !errors.Is(err, io.EOF) { - return fmt.Errorf("unable to read file for MIME type detection: %w", err) - } - - mime := mimetype.Detect(buffer) - mimeT := mimeType(mime.String()) - - if common.SkipFile(mime.Extension()) { - ctx.Logger().V(5).Info("skipping file", "ext", mimeT) - return nil - } - - if a.skipBinaries { - if common.IsBinary(mime.Extension()) || mimeT == machOType || mimeT == octetStream { - ctx.Logger().V(5).Info("skipping binary file", "ext", mimeT) - return nil - } - } - - chunkReader := sources.NewChunkReader() - chunkResChan := chunkReader(ctx, bufReader) - for data := range chunkResChan { - if err := data.Error(); err != nil { - ctx.Logger().Error(err, "error reading chunk") - continue - } - if err := common.CancellableWrite(ctx, archiveChan, data.Bytes()); err != nil { - return err - } - } - return nil -} - -// IsFiletype returns true if the provided reader is an archive. -func (a *Archive) IsFiletype(_ logContext.Context, reader io.Reader) (io.Reader, bool) { - format, readerB, err := archiver.Identify("", reader) - if err != nil { - return readerB, false - } - switch format.(type) { - case archiver.Extractor: - return readerB, true - case archiver.Decompressor: - return readerB, true - default: - return readerB, false - } -} - -// extractorHandler is applied to each file in an archiver.Extractor file. -func (a *Archive) extractorHandler(archiveChan chan []byte) func(context.Context, archiver.File) error { - return func(ctx context.Context, f archiver.File) error { - lCtx := logContext.AddLogger(ctx) - lCtx.Logger().V(5).Info("Handling extracted file.", "filename", f.Name()) - - if common.IsDone(ctx) { - return ctx.Err() - } - - depth := 0 - if ctxDepth, ok := ctx.Value(depthKey).(int); ok { - depth = ctxDepth - } - - fReader, err := f.Open() - if err != nil { - return err - } - defer fReader.Close() - - if common.SkipFile(f.Name()) { - lCtx.Logger().V(5).Info("skipping file", "filename", f.Name()) - return nil - } - - if a.skipBinaries && common.IsBinary(f.Name()) { - lCtx.Logger().V(5).Info("skipping binary file", "filename", f.Name()) - return nil - } - - return a.openArchive(lCtx, depth, fReader, archiveChan) - } -} - -// ReadToMax reads up to the max size. -func (a *Archive) ReadToMax(ctx logContext.Context, reader io.Reader) (data []byte, err error) { - // Archiver v4 is in alpha and using an experimental version of - // rardecode. There is a bug somewhere with rar decoder format 29 - // that can lead to a panic. An issue is open in rardecode repo - // https://github.com/nwaples/rardecode/issues/30. - defer func() { - if r := recover(); r != nil { - // Return an error from ReadToMax. - if e, ok := r.(error); ok { - err = e - } else { - err = fmt.Errorf("panic occurred: %v", r) - } - ctx.Logger().Error(err, "Panic occurred when reading archive") - } - }() - - if common.IsDone(ctx) { - return nil, ctx.Err() - } - - var fileContent bytes.Buffer - // Create a limited reader to ensure we don't read more than the max size. - lr := io.LimitReader(reader, int64(maxSize)) - - // Using io.CopyBuffer for performance advantages. Though buf is mandatory - // for the method, due to the internal implementation of io.CopyBuffer, when - // *bytes.Buffer implements io.WriterTo or io.ReaderFrom, the provided buf - // is simply ignored. Thus, we can pass nil for the buf parameter. - _, err = io.CopyBuffer(&fileContent, lr, nil) - if err != nil && !errors.Is(err, io.EOF) { - return nil, err - } - - if fileContent.Len() == maxSize { - ctx.Logger().V(2).Info("Max archive size reached.") - } - - return fileContent.Bytes(), nil -} - -type mimeType string - -const ( - arMimeType mimeType = "application/x-unix-archive" - rpmMimeType mimeType = "application/x-rpm" - machOType mimeType = "application/x-mach-binary" - octetStream mimeType = "application/octet-stream" -) - -// mimeTools maps MIME types to the necessary command-line tools to handle them. -// This centralizes the tool requirements for different file types. -var mimeTools = map[mimeType][]string{ - arMimeType: {"ar"}, - rpmMimeType: {"rpm2cpio", "cpio"}, -} - -// extractToolCache stores the availability of extraction tools, eliminating the need for repeated filesystem lookups. -var extractToolCache map[string]bool - -func init() { - // Preload the extractToolCache with the availability status of each required tool. - extractToolCache = make(map[string]bool) - for _, tools := range mimeTools { - for _, tool := range tools { - _, err := exec.LookPath(tool) - extractToolCache[tool] = err == nil - } - } -} - -func ensureToolsForMimeType(mimeType mimeType) error { - tools, exists := mimeTools[mimeType] - if !exists { - return fmt.Errorf("unsupported mime type: %s", mimeType) - } - - for _, tool := range tools { - if installed := extractToolCache[tool]; !installed { - return fmt.Errorf("required tool %s is not installed", tool) - } - } - return nil -} - -// HandleSpecialized takes a file path and an io.Reader representing the input file, -// and processes it based on its extension, such as handling Debian (.deb) and RPM (.rpm) packages. -// It returns an io.Reader that can be used to read the processed content of the file, -// and an error if any issues occurred during processing. -// If the file is specialized, the returned boolean is true with no error. -// The caller is responsible for closing the returned reader. -func (a *Archive) HandleSpecialized(ctx logContext.Context, reader io.Reader) (io.Reader, bool, error) { - mimeType, reader, err := determineMimeType(reader) - if err != nil { - return nil, false, err - } - - switch mimeType { - case arMimeType: // includes .deb files - if err := ensureToolsForMimeType(mimeType); err != nil { - return nil, false, err - } - reader, err = a.extractDebContent(ctx, reader) - case rpmMimeType: - if err := ensureToolsForMimeType(mimeType); err != nil { - return nil, false, err - } - reader, err = a.extractRpmContent(ctx, reader) - default: - return reader, false, nil - } - - if err != nil { - return nil, false, fmt.Errorf("unable to extract file with MIME type %s: %w", mimeType, err) - } - return reader, true, nil -} - -// extractDebContent takes a .deb file as an io.Reader, extracts its contents -// into a temporary directory, and returns a Reader for the extracted data archive. -// It handles the extraction process by using the 'ar' command and manages temporary -// files and directories for the operation. -// The caller is responsible for closing the returned reader. -func (a *Archive) extractDebContent(ctx logContext.Context, file io.Reader) (io.ReadCloser, error) { - if a.currentDepth >= maxDepth { - return nil, fmt.Errorf(errMaxArchiveDepthReached) - } - - tmpEnv, err := a.createTempEnv(ctx, file) - if err != nil { - return nil, err - } - defer os.Remove(tmpEnv.tempFileName) - defer os.RemoveAll(tmpEnv.extractPath) - - cmd := exec.Command("ar", "x", tmpEnv.tempFile.Name()) - cmd.Dir = tmpEnv.extractPath - if err := executeCommand(cmd); err != nil { - return nil, err - } - - handler := func(ctx logContext.Context, env tempEnv, file string) (string, error) { - if strings.HasPrefix(file, "data.tar.") { - return file, nil - } - return a.handleNestedFileMIME(ctx, env, file) - } - - dataArchiveName, err := a.handleExtractedFiles(ctx, tmpEnv, handler) - if err != nil { - return nil, err - } - - return openDataArchive(tmpEnv.extractPath, dataArchiveName) -} - -// extractRpmContent takes an .rpm file as an io.Reader, extracts its contents -// into a temporary directory, and returns a Reader for the extracted data archive. -// It handles the extraction process by using the 'rpm2cpio' and 'cpio' commands and manages temporary -// files and directories for the operation. -// The caller is responsible for closing the returned reader. -func (a *Archive) extractRpmContent(ctx logContext.Context, file io.Reader) (io.ReadCloser, error) { - if a.currentDepth >= maxDepth { - return nil, fmt.Errorf("max archive depth reached") - } - - tmpEnv, err := a.createTempEnv(ctx, file) - if err != nil { - return nil, err - } - defer os.Remove(tmpEnv.tempFileName) - defer os.RemoveAll(tmpEnv.extractPath) - - // Use rpm2cpio to convert the RPM file to a cpio archive and then extract it using cpio command. - cmd := exec.Command("sh", "-c", "rpm2cpio "+tmpEnv.tempFile.Name()+" | cpio -id") - cmd.Dir = tmpEnv.extractPath - if err := executeCommand(cmd); err != nil { - return nil, err - } - - handler := func(ctx logContext.Context, env tempEnv, file string) (string, error) { - if strings.HasSuffix(file, ".tar.gz") { - return file, nil - } - return a.handleNestedFileMIME(ctx, env, file) - } - - dataArchiveName, err := a.handleExtractedFiles(ctx, tmpEnv, handler) - if err != nil { - return nil, err - } - - return openDataArchive(tmpEnv.extractPath, dataArchiveName) -} - -func (a *Archive) handleNestedFileMIME(ctx logContext.Context, tempEnv tempEnv, fileName string) (string, error) { - nestedFile, err := os.Open(filepath.Join(tempEnv.extractPath, fileName)) - if err != nil { - return "", err - } - defer nestedFile.Close() - - mimeType, reader, err := determineMimeType(nestedFile) - if err != nil { - return "", fmt.Errorf("unable to determine MIME type of nested filename: %s, %w", nestedFile.Name(), err) - } - - switch mimeType { - case arMimeType, rpmMimeType: - _, _, err = a.HandleSpecialized(ctx, reader) - default: - return "", nil - } - - if err != nil { - return "", fmt.Errorf("unable to extract file with MIME type %s: %w", mimeType, err) - } - - return fileName, nil -} - -// determineMimeType reads from the provided reader to detect the MIME type. -// It returns the detected MIME type and a new reader that includes the read portion. -func determineMimeType(reader io.Reader) (mimeType, io.Reader, error) { - // A buffer of 512 bytes is used since many file formats store their magic numbers within the first 512 bytes. - // If fewer bytes are read, MIME type detection may still succeed. - buffer := make([]byte, 512) - n, err := reader.Read(buffer) - if err != nil && !errors.Is(err, io.EOF) { - return "", nil, fmt.Errorf("unable to read file for MIME type detection: %w", err) - } - - // Create a new reader that starts with the buffer we just read - // and continues with the rest of the original reader. - reader = io.MultiReader(bytes.NewReader(buffer[:n]), reader) - - kind, err := filetype.Match(buffer) - if err != nil { - return "", nil, fmt.Errorf("unable to determine file type: %w", err) - } - - return mimeType(kind.MIME.Value), reader, nil -} - -// handleExtractedFiles processes each file in the extracted directory using a provided handler function. -// The function iterates through the files, applying the handleFile function to each, and returns the name -// of the data archive it finds. This centralizes the logic for handling specialized files such as .deb and .rpm -// by using the appropriate handling function passed as an argument. This design allows for flexibility and reuse -// of this function across various extraction processes in the package. -func (a *Archive) handleExtractedFiles(ctx logContext.Context, env tempEnv, handleFile func(logContext.Context, tempEnv, string) (string, error)) (string, error) { - extractedFiles, err := os.ReadDir(env.extractPath) - if err != nil { - return "", fmt.Errorf("unable to read extracted directory: %w", err) - } - - var dataArchiveName string - for _, file := range extractedFiles { - filename := file.Name() - filePath := filepath.Join(env.extractPath, filename) - fileInfo, err := os.Stat(filePath) - if err != nil { - return "", fmt.Errorf("unable to get file info for filename %s: %w", filename, err) - } - if fileInfo.IsDir() { - continue - } - - name, err := handleFile(ctx, env, filename) - if err != nil { - return "", err - } - if name != "" { - dataArchiveName = name - break - } - } - - return dataArchiveName, nil -} - -type tempEnv struct { - tempFile *os.File - tempFileName string - extractPath string -} - -// createTempEnv creates a temporary file and a temporary directory for extracting archives. -// The caller is responsible for removing these temporary resources -// (both the file and directory) when they are no longer needed. -func (a *Archive) createTempEnv(ctx logContext.Context, file io.Reader) (tempEnv, error) { - tempFile, err := os.CreateTemp("", "tmp") - if err != nil { - return tempEnv{}, fmt.Errorf("unable to create temporary file: %w", err) - } - - extractPath, err := os.MkdirTemp("", "tmp_archive") - if err != nil { - return tempEnv{}, fmt.Errorf("unable to create temporary directory: %w", err) - } - - b, err := a.ReadToMax(ctx, file) - if err != nil { - return tempEnv{}, err - } - - if _, err = tempFile.Write(b); err != nil { - return tempEnv{}, fmt.Errorf("unable to write to temporary file: %w", err) - } - - return tempEnv{tempFile: tempFile, tempFileName: tempFile.Name(), extractPath: extractPath}, nil -} - -func executeCommand(cmd *exec.Cmd) error { - var stderr bytes.Buffer - cmd.Stderr = &stderr - if err := cmd.Run(); err != nil { - return fmt.Errorf("unable to execute command %v: %w; error: %s", cmd.String(), err, stderr.String()) - } - return nil -} - -func openDataArchive(extractPath string, dataArchiveName string) (io.ReadCloser, error) { - dataArchivePath := filepath.Join(extractPath, dataArchiveName) - dataFile, err := os.Open(dataArchivePath) - if err != nil { - return nil, fmt.Errorf("unable to open file: %w", err) - } - return dataFile, nil -} diff --git a/pkg/handlers/arhandler.go b/pkg/handlers/arhandler.go new file mode 100644 index 000000000..abc17563f --- /dev/null +++ b/pkg/handlers/arhandler.go @@ -0,0 +1,18 @@ +package handlers + +import ( + "io" + + logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" +) + +// ARHandler specializes DefaultHandler to handle AR archive formats. By embedding DefaultHandler, +// ARHandler inherits and can further customize the common handling behavior such as skipping binaries. +type ARHandler struct{ DefaultHandler } + +// HandleFile processes AR formatted files. This function needs to be implemented to extract or +// manage data from AR files according to specific requirements. +func (h *ARHandler) HandleFile(ctx logContext.Context, input io.Reader) (chan []byte, error) { + // TODO implement me + panic("implement me") +} diff --git a/pkg/handlers/defaulthandler.go b/pkg/handlers/defaulthandler.go new file mode 100644 index 000000000..c15eb2112 --- /dev/null +++ b/pkg/handlers/defaulthandler.go @@ -0,0 +1,226 @@ +package handlers + +import ( + "bufio" + "context" + "errors" + "fmt" + "io" + "time" + + "github.com/gabriel-vasile/mimetype" + "github.com/mholt/archiver/v4" + + "github.com/trufflesecurity/trufflehog/v3/pkg/common" + logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" + "github.com/trufflesecurity/trufflehog/v3/pkg/sources" +) + +type ctxKey int + +const depthKey ctxKey = iota + +var ( + maxDepth = 5 + maxSize = 250 * 1024 * 1024 // 20MB + maxTimeout = time.Duration(30) * time.Second + + defaultBufferSize = 512 +) + +// SetArchiveMaxSize sets the maximum size of the archive. +func SetArchiveMaxSize(size int) { + maxSize = size +} + +// SetArchiveMaxDepth sets the maximum depth of the archive. +func SetArchiveMaxDepth(depth int) { + maxDepth = depth +} + +// SetArchiveMaxTimeout sets the maximum timeout for the archive handler. +func SetArchiveMaxTimeout(timeout time.Duration) { + maxTimeout = timeout +} + +// Option is a function type that applies a configuration to a DefaultHandler. +// It is used to modify the behavior of a DefaultHandler. +type Option func(handler *DefaultHandler) + +// WithSkipBinaries returns an Option that configures whether to skip binary files. +// This function is used to create an Option that sets the skipBinaries field of a DefaultHandler. +// If skip is true, the DefaultHandler will skip binary files. +func WithSkipBinaries(skip bool) Option { + return func(h *DefaultHandler) { h.skipBinaries = skip } +} + +// WithSkipArchives returns an Option that configures whether to skip archive files. +// This function is used to create an Option that sets the skipArchives field of a DefaultHandler. +// If skip is true, the DefaultHandler will skip archive files. +func WithSkipArchives(skip bool) Option { + return func(h *DefaultHandler) { h.skipArchives = skip } + +} + +// DefaultHandler provides a base implementation for file handlers, encapsulating common behaviors +// needed across different handlers, such as skipping binary files. This handler is embedded in other +// specialized handlers to ensure consistent application of these common behaviors and to simplify +// the extension of handler functionalities. +type DefaultHandler struct { + skipBinaries bool // Controls whether binary files should be processed. + skipArchives bool // Controls whether archive files should be processed. +} + +// configure applies a series of Options to the handler, allowing for flexible configuration of +// handler-specific settings such as whether to skip binary files. This method supports dynamic +// customization of handler behavior at runtime. +func (h *DefaultHandler) configure(opts ...Option) { + for _, opt := range opts { + opt(h) + } +} + +// HandleFile initiates the asynchronous extraction of archive contents. It creates a channel to send extracted data +// and starts a goroutine that handles the archive opening process. It utilizes a context with a timeout to ensure +// that the extraction process does not exceed a predefined maximum duration. +// The function returns a channel that will receive the extracted data bytes and an error if the initial setup fails. +func (h *DefaultHandler) HandleFile(ctx logContext.Context, input io.Reader) (chan []byte, error) { + if h.skipArchives { + return nil, nil + } + + archiveChan := make(chan []byte, defaultBufferSize) + go func() { + ctx, cancel := logContext.WithTimeout(ctx, maxTimeout) + defer cancel() + defer close(archiveChan) + + if err := h.openArchive(ctx, 0, input, archiveChan); err != nil { + ctx.Logger().Error(err, "error unarchiving chunk.") + } + }() + return archiveChan, nil +} + +var ErrMaxDepthReached = errors.New("max archive depth reached") + +// openArchive recursively extracts content from an archive up to a maximum depth, handling nested archives if necessary. +// It takes a reader from which it attempts to identify and process the archive format. Depending on the archive type, +// it either decompresses or extracts the contents directly, sending data to the provided channel. +// Returns an error if the archive cannot be processed due to issues like exceeding maximum depth or unsupported formats. +func (h *DefaultHandler) openArchive(ctx logContext.Context, depth int, reader io.Reader, archiveChan chan []byte) error { + if common.IsDone(ctx) { + return ctx.Err() + } + + if depth >= maxDepth { + return ErrMaxDepthReached + } + + format, arReader, err := archiver.Identify("", reader) + if errors.Is(err, archiver.ErrNoMatch) && depth > 0 { + return h.handleNonArchiveContent(ctx, arReader, archiveChan) + } + + if err != nil { + return fmt.Errorf("error identifying archive: %w", err) + } + + switch archive := format.(type) { + case archiver.Decompressor: + // Decompress tha archive and feed the decompressed data back into the archive handler to extract any nested archives. + compReader, err := archive.OpenReader(arReader) + if err != nil { + return err + } + + defer compReader.Close() + + return h.openArchive(ctx, depth+1, compReader, archiveChan) + case archiver.Extractor: + return archive.Extract(logContext.WithValue(ctx, depthKey, depth+1), arReader, nil, h.extractorHandler(archiveChan)) + default: + return fmt.Errorf("unknown archive type: %s", format.Name()) + } +} + +// extractorHandler creates a closure that handles individual files extracted by an archiver. +// It logs the extraction, checks for cancellation, and decides whether to skip the file based on its name or type, +// particularly for binary files if configured to skip. If the file is not skipped, it recursively calls openArchive +// to handle nested archives or to continue processing based on the file's content and depth in the archive structure. +func (h *DefaultHandler) extractorHandler(archiveChan chan []byte) func(context.Context, archiver.File) error { + return func(ctx context.Context, f archiver.File) error { + lCtx := logContext.AddLogger(ctx) + lCtx.Logger().V(5).Info("Handling extracted file.", "filename", f.Name()) + + if common.IsDone(ctx) { + return ctx.Err() + } + + depth := 0 + if ctxDepth, ok := ctx.Value(depthKey).(int); ok { + depth = ctxDepth + } + + fReader, err := f.Open() + if err != nil { + return err + } + defer fReader.Close() + + if common.SkipFile(f.Name()) { + lCtx.Logger().V(5).Info("skipping file", "filename", f.Name()) + return nil + } + + if h.skipBinaries && common.IsBinary(f.Name()) { + lCtx.Logger().V(5).Info("skipping binary file", "filename", f.Name()) + return nil + } + + return h.openArchive(lCtx, depth, fReader, archiveChan) + } +} + +// handleNonArchiveContent processes files that do not contain nested archives, serving as the final stage in the +// extraction/decompression process. It reads the content to detect its MIME type and decides whether to skip based +// on the type, particularly for binary files. It manages reading file chunks and writing them to the archive channel, +// effectively collecting the final bytes for further processing. This function is a key component in ensuring that all +// file content, regardless of being an archive or not, is handled appropriately. +func (h *DefaultHandler) handleNonArchiveContent(ctx logContext.Context, reader io.Reader, archiveChan chan []byte) error { + bufReader := bufio.NewReaderSize(reader, defaultBufferSize) + // A buffer of 512 bytes is used since many file formats store their magic numbers within the first 512 bytes. + // If fewer bytes are read, MIME type detection may still succeed. + buffer, err := bufReader.Peek(defaultBufferSize) + if err != nil && !errors.Is(err, io.EOF) { + return fmt.Errorf("unable to read file for MIME type detection: %w", err) + } + + mime := mimetype.Detect(buffer) + mimeT := mimeType(mime.String()) + + if common.SkipFile(mime.Extension()) { + ctx.Logger().V(5).Info("skipping file", "ext", mimeT) + return nil + } + + if h.skipBinaries { + if common.IsBinary(mime.Extension()) || mimeT == machOType || mimeT == octetStream { + ctx.Logger().V(5).Info("skipping binary file", "ext", mimeT) + return nil + } + } + + chunkReader := sources.NewChunkReader() + chunkResChan := chunkReader(ctx, bufReader) + for data := range chunkResChan { + if err := data.Error(); err != nil { + ctx.Logger().Error(err, "error reading chunk") + continue + } + if err := common.CancellableWrite(ctx, archiveChan, data.Bytes()); err != nil { + return err + } + } + return nil +} diff --git a/pkg/handlers/defaulthandler_test.go b/pkg/handlers/defaulthandler_test.go new file mode 100644 index 000000000..38576a29d --- /dev/null +++ b/pkg/handlers/defaulthandler_test.go @@ -0,0 +1,111 @@ +package handlers + +import ( + "context" + "net/http" + "regexp" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + diskbufferreader "github.com/trufflesecurity/disk-buffer-reader" + + logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" +) + +func TestArchiveHandler(t *testing.T) { + tests := map[string]struct { + archiveURL string + expectedChunks int + matchString string + }{ + "gzip-single": { + "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/one-zip.gz", + 1, + "AKIAYVP4CIPPH5TNP3SW", + }, + "gzip-nested": { + "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/double-zip.gz", + 1, + "AKIAYVP4CIPPH5TNP3SW", + }, + "gzip-too-deep": { + "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/six-zip.gz", + 0, + "", + }, + "tar-single": { + "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/one.tar", + 1, + "AKIAYVP4CIPPH5TNP3SW", + }, + "tar-nested": { + "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/two.tar", + 1, + "AKIAYVP4CIPPH5TNP3SW", + }, + "tar-too-deep": { + "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/six.tar", + 0, + "", + }, + "targz-single": { + "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/tar-archive.tar.gz", + 1, + "AKIAYVP4CIPPH5TNP3SW", + }, + "gzip-large": { + "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/FifteenMB.gz", + 1543, + "AKIAYVP4CIPPH5TNP3SW", + }, + "zip-single": { + "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/aws-canary-creds.zip", + 1, + "AKIAYVP4CIPPH5TNP3SW", + }, + } + + for name, testCase := range tests { + t.Run(name, func(t *testing.T) { + resp, err := http.Get(testCase.archiveURL) + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, resp.StatusCode) + defer resp.Body.Close() + + handler := DefaultHandler{} + + newReader, err := diskbufferreader.New(resp.Body) + if err != nil { + t.Errorf("error creating reusable reader: %s", err) + } + archiveChan, err := handler.HandleFile(logContext.Background(), newReader) + assert.NoError(t, err) + + count := 0 + re := regexp.MustCompile(testCase.matchString) + matched := false + for chunk := range archiveChan { + count++ + if re.Match(chunk) { + matched = true + } + } + + assert.True(t, matched) + assert.Equal(t, testCase.expectedChunks, count) + }) + } +} + +func TestOpenInvalidArchive(t *testing.T) { + reader := strings.NewReader("invalid archive") + + ctx := logContext.AddLogger(context.Background()) + handler := DefaultHandler{} + + archiveChan := make(chan []byte) + + err := handler.openArchive(ctx, 0, reader, archiveChan) + assert.Error(t, err) +} diff --git a/pkg/handlers/handlers.go b/pkg/handlers/handlers.go index 43fcf8941..aff2f8248 100644 --- a/pkg/handlers/handlers.go +++ b/pkg/handlers/handlers.go @@ -1,99 +1,125 @@ package handlers import ( + "bytes" + "errors" + "fmt" "io" + "github.com/h2non/filetype" diskbufferreader "github.com/trufflesecurity/disk-buffer-reader" logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" "github.com/trufflesecurity/trufflehog/v3/pkg/sources" ) -func DefaultHandlers() []Handler { - return []Handler{ - &Archive{}, +// FileHandler is an represents a handler for files. +// It has a single method, HandleFile, which takes a context and an io.Reader as input, +// and returns a channel of byte slices and an error. +type FileHandler interface { + HandleFile(ctx logContext.Context, input io.Reader) (chan []byte, error) +} + +type mimeType string + +const ( + arMimeType mimeType = "application/x-unix-archive" + rpmMimeType mimeType = "application/x-rpm" + machOType mimeType = "application/x-mach-binary" + octetStream mimeType = "application/octet-stream" +) + +// determineMimeType reads from the provided reader to detect the MIME type. +// It returns the detected MIME type and a new reader that includes the read portion. +func determineMimeType(reader io.Reader) (mimeType, io.Reader, error) { + // A buffer of 512 bytes is used since many file formats store their magic numbers within the first 512 bytes. + // If fewer bytes are read, MIME type detection may still succeed. + buffer := make([]byte, 512) + n, err := reader.Read(buffer) + if err != nil && !errors.Is(err, io.EOF) { + return "", nil, fmt.Errorf("unable to read file for MIME type detection: %w", err) } -} -// SpecializedHandler defines the interface for handlers that can process specialized archives. -// It includes a method to handle specialized archives and determine if the file is of a special type. -type SpecializedHandler interface { - // HandleSpecialized examines the provided file reader within the context and determines if it is a specialized archive. - // It returns a reader with any necessary modifications, a boolean indicating if the file was specialized, - // and an error if something went wrong during processing. - HandleSpecialized(logContext.Context, io.Reader) (io.Reader, bool, error) -} + // Create a new reader that starts with the buffer we just read + // and continues with the rest of the original reader. + reader = io.MultiReader(bytes.NewReader(buffer[:n]), reader) -// Option is a function type that applies a configuration to a Handler. -type Option func(Handler) - -// WithSkipBinaries returns a Option that configures whether to skip binary files. -func WithSkipBinaries(skip bool) Option { - return func(h Handler) { - if a, ok := h.(*Archive); ok { - a.skipBinaries = skip - } + kind, err := filetype.Match(buffer) + if err != nil { + return "", nil, fmt.Errorf("unable to determine file type: %w", err) } + + return mimeType(kind.MIME.Value), reader, nil } -// WithSkipArchives returns a Option that configures whether to skip archive files. -func WithSkipArchives(skip bool) Option { - return func(h Handler) { - if a, ok := h.(*Archive); ok { - a.skipArchives = skip - } +// GetHandlerForType dynamically selects and configures a FileHandler based on the provided MIME type. This method +// determines the appropriate handler to use: ARHandler for 'arMimeType', RPMHandler for 'rpmMimeType', and +// DefaultHandler for other types, which includes common archive formats like .zip, .tar, .gz, etc +// managed by the archiver library. +// The handler is then configured with provided Options, adapting it to specific operational needs. +// Returns the configured handler or an error if the handler type does not match the expected type. +func GetHandlerForType(mimeT mimeType, opts ...Option) (FileHandler, error) { + var handler FileHandler + switch mimeT { + case arMimeType: + handler = new(ARHandler) + case rpmMimeType: + handler = new(RPMHandler) + case machOType, octetStream: + fallthrough + default: + handler = new(DefaultHandler) } + + defaultHandler, ok := handler.(*DefaultHandler) + if !ok { + return handler, fmt.Errorf("handler is not a DefaultHandler: %T", handler) + } + + defaultHandler.configure(opts...) + return handler, nil } -type Handler interface { - FromFile(logContext.Context, io.Reader) chan []byte - IsFiletype(logContext.Context, io.Reader) (io.Reader, bool) - New(...Option) -} - -// HandleFile processes a given file by selecting an appropriate handler from DefaultHandlers. -// It first checks if the handler implements SpecializedHandler for any special processing, -// then falls back to regular file type handling. If successful, it reads the file in chunks, -// packages them in the provided chunk skeleton, and reports them to the chunk reporter. -// The function returns true if processing was successful and false otherwise. -// Context is used for cancellation, and the caller is responsible for canceling it if needed. +// HandleFile orchestrates the complete file handling process for a given file. +// It determines the MIME type of the file, selects the appropriate handler based on this type, and processes the file. +// This function initializes the handling process and delegates to the specific handler to manage file +// extraction or processing. Errors at any stage (MIME type determination, handler retrieval, +// seeking, or file handling) result in a log entry and a false return value indicating failure. +// Successful handling passes the file content through a channel to be chunked and reported, returning true on success. func HandleFile(ctx logContext.Context, reReader *diskbufferreader.DiskBufferReader, chunkSkel *sources.Chunk, reporter sources.ChunkReporter, opts ...Option) bool { - for _, h := range DefaultHandlers() { - h.New(opts...) - - if handled := processHandler(ctx, h, reReader, chunkSkel, reporter); handled { - return true - } + mimeT, _, err := determineMimeType(reReader) + if err != nil { + ctx.Logger().Error(err, "error determining MIME type") + return false } - return false -} - -func processHandler(ctx logContext.Context, h Handler, reReader *diskbufferreader.DiskBufferReader, chunkSkel *sources.Chunk, reporter sources.ChunkReporter) bool { - if specialHandler, ok := h.(SpecializedHandler); ok { - file, isSpecial, err := specialHandler.HandleSpecialized(ctx, reReader) - if isSpecial { - return handleChunks(ctx, h.FromFile(ctx, file), chunkSkel, reporter) - } - if err != nil { - ctx.Logger().Error(err, "error handling file") - } + handler, err := GetHandlerForType(mimeT, opts...) + if err != nil { + ctx.Logger().Error(err, "error getting handler for type") + return false } + // Reset the reader to the start of the file since the MIME type detection may have read some bytes. if _, err := reReader.Seek(0, io.SeekStart); err != nil { ctx.Logger().Error(err, "error seeking to start of file") return false } - if _, isType := h.IsFiletype(ctx, reReader); !isType { + archiveChan, err := handler.HandleFile(ctx, reReader) // Delegate to the specific handler to process the file. + if err != nil { + ctx.Logger().Error(err, "error handling file") return false } - - return handleChunks(ctx, h.FromFile(ctx, reReader), chunkSkel, reporter) + return handleChunks(ctx, archiveChan, chunkSkel, reporter) } +// handleChunks reads data from the handlerChan and uses it to fill chunks according to a predefined skeleton (chunkSkel). +// Each filled chunk is reported using the provided reporter. This function manages the lifecycle of the channel, +// handling the termination condition when the channel closes and ensuring the cancellation of the operation if the context +// is done. It returns true if all chunks are processed successfully, otherwise returns false on errors or cancellation. func handleChunks(ctx logContext.Context, handlerChan chan []byte, chunkSkel *sources.Chunk, reporter sources.ChunkReporter) bool { if handlerChan == nil { + ctx.Logger().Error(fmt.Errorf("handler channel is nil"), "error handling chunks") return false } @@ -101,14 +127,17 @@ func handleChunks(ctx logContext.Context, handlerChan chan []byte, chunkSkel *so select { case data, open := <-handlerChan: if !open { + ctx.Logger().V(5).Info("handler channel closed, all chunks processed") return true } chunk := *chunkSkel chunk.Data = data if err := reporter.ChunkOk(ctx, chunk); err != nil { + ctx.Logger().Error(err, "error reporting chunk while handling chunks") return false } case <-ctx.Done(): + ctx.Logger().Error(ctx.Err(), "context done while handling chunks") return false } } diff --git a/pkg/handlers/archive_test.go b/pkg/handlers/handlers_test.go similarity index 59% rename from pkg/handlers/archive_test.go rename to pkg/handlers/handlers_test.go index de2ed3fbf..cb5238c96 100644 --- a/pkg/handlers/archive_test.go +++ b/pkg/handlers/handlers_test.go @@ -3,13 +3,11 @@ package handlers import ( "archive/tar" "bytes" - "context" "encoding/binary" "io" "math/rand" "net/http" "os" - "regexp" "strings" "testing" "time" @@ -22,113 +20,26 @@ import ( "github.com/trufflesecurity/trufflehog/v3/pkg/sources" ) -func TestArchiveHandler(t *testing.T) { - tests := map[string]struct { - archiveURL string - expectedChunks int - matchString string - }{ - "gzip-single": { - "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/one-zip.gz", - 1, - "AKIAYVP4CIPPH5TNP3SW", - }, - "gzip-nested": { - "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/double-zip.gz", - 1, - "AKIAYVP4CIPPH5TNP3SW", - }, - "gzip-too-deep": { - "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/six-zip.gz", - 0, - "", - }, - "tar-single": { - "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/one.tar", - 1, - "AKIAYVP4CIPPH5TNP3SW", - }, - "tar-nested": { - "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/two.tar", - 1, - "AKIAYVP4CIPPH5TNP3SW", - }, - "tar-too-deep": { - "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/six.tar", - 0, - "", - }, - "targz-single": { - "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/tar-archive.tar.gz", - 1, - "AKIAYVP4CIPPH5TNP3SW", - }, - "gzip-large": { - "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/FifteenMB.gz", - 1543, - "AKIAYVP4CIPPH5TNP3SW", - }, - "zip-single": { - "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/aws-canary-creds.zip", - 1, - "AKIAYVP4CIPPH5TNP3SW", - }, - } - - for name, testCase := range tests { - t.Run(name, func(t *testing.T) { - resp, err := http.Get(testCase.archiveURL) - if err != nil || resp.StatusCode != http.StatusOK { - t.Error(err) - } - defer resp.Body.Close() - - archive := Archive{} - archive.New() - - newReader, err := diskbufferreader.New(resp.Body) - if err != nil { - t.Errorf("error creating reusable reader: %s", err) - } - archiveChan := archive.FromFile(logContext.Background(), newReader) - - count := 0 - re := regexp.MustCompile(testCase.matchString) - matched := false - for chunk := range archiveChan { - count++ - if re.Match(chunk) { - matched = true - } - } - if !matched && len(testCase.matchString) > 0 { - t.Errorf("%s: Expected string not found in archive.", name) - } - if count != testCase.expectedChunks { - t.Errorf("%s: Unexpected number of chunks. Got %d, expected: %d", name, count, testCase.expectedChunks) - } - }) - } -} - -func TestHandleFile(t *testing.T) { +func TestHandleFileCancelledContext(t *testing.T) { reporter := sources.ChanReporter{Ch: make(chan *sources.Chunk, 2)} - // Context cancels the operation. canceledCtx, cancel := logContext.WithCancel(logContext.Background()) cancel() reader, err := diskbufferreader.New(strings.NewReader("file")) assert.NoError(t, err) assert.False(t, HandleFile(canceledCtx, reader, &sources.Chunk{}, reporter)) +} + +func TestHandleFile(t *testing.T) { + reporter := sources.ChanReporter{Ch: make(chan *sources.Chunk, 2)} // Only one chunk is sent on the channel. // TODO: Embed a zip without making an HTTP request. resp, err := http.Get("https://raw.githubusercontent.com/bill-rich/bad-secrets/master/aws-canary-creds.zip") assert.NoError(t, err) defer resp.Body.Close() - archive := Archive{} - archive.New() - reader, err = diskbufferreader.New(resp.Body) + + reader, err := diskbufferreader.New(resp.Body) assert.NoError(t, err) assert.Equal(t, 0, len(reporter.Ch)) @@ -141,9 +52,6 @@ func BenchmarkHandleFile(b *testing.B) { assert.Nil(b, err) defer file.Close() - archive := Archive{} - archive.New() - b.ResetTimer() for i := 0; i < b.N; i++ { sourceChan := make(chan *sources.Chunk, 1) @@ -243,76 +151,6 @@ func createBinaryArchive(t *testing.T) string { return tarFile.Name() } -func TestReadToMax(t *testing.T) { - tests := []struct { - name string - input []byte - expected []byte - }{ - { - name: "read full content within maxSize", - input: []byte("abcdefg"), - expected: []byte("abcdefg"), - }, - { - name: "read content larger than maxSize", - input: make([]byte, maxSize+10), // this creates a byte slice 10 bytes larger than maxSize - expected: make([]byte, maxSize), - }, - { - name: "empty input", - input: []byte(""), - expected: []byte(""), - }, - } - - a := &Archive{} - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - reader := bytes.NewReader(tt.input) - output, err := a.ReadToMax(logContext.Background(), reader) - assert.Nil(t, err) - - assert.Equal(t, tt.expected, output) - }) - } -} - -func BenchmarkReadToMax(b *testing.B) { - data := bytes.Repeat([]byte("a"), 1024*1000) // 1MB of data. - reader := bytes.NewReader(data) - a := &Archive{} - - b.ResetTimer() - for i := 0; i < b.N; i++ { - b.StartTimer() - _, _ = a.ReadToMax(logContext.Background(), reader) - b.StopTimer() - - _, _ = reader.Seek(0, 0) // Reset the reader position. - a.size = 0 // Reset archive size. - } -} - -func TestExtractDebContent(t *testing.T) { - // Open the sample .deb file from the testdata folder. - file, err := os.Open("testdata/test.deb") - assert.Nil(t, err) - defer file.Close() - - ctx := logContext.AddLogger(context.Background()) - a := &Archive{} - - reader, err := a.extractDebContent(ctx, file) - assert.Nil(t, err) - - content, err := io.ReadAll(reader) - assert.Nil(t, err) - expectedLength := 1015582 - assert.Equal(t, expectedLength, len(string(content))) -} - func TestSkipArchive(t *testing.T) { file, err := os.Open("testdata/test.tgz") assert.Nil(t, err) @@ -363,36 +201,6 @@ func TestExtractTarContent(t *testing.T) { assert.Equal(t, wantCount, count) } -func TestExtractRPMContent(t *testing.T) { - // Open the sample .rpm file from the testdata folder. - file, err := os.Open("testdata/test.rpm") - assert.Nil(t, err) - defer file.Close() - - ctx := logContext.AddLogger(context.Background()) - a := &Archive{} - - reader, err := a.extractRpmContent(ctx, file) - assert.Nil(t, err) - - content, err := io.ReadAll(reader) - assert.Nil(t, err) - expectedLength := 1822720 - assert.Equal(t, expectedLength, len(string(content))) -} - -func TestOpenInvalidArchive(t *testing.T) { - reader := strings.NewReader("invalid archive") - - ctx := logContext.AddLogger(context.Background()) - a := &Archive{} - - archiveChan := make(chan []byte) - - err := a.openArchive(ctx, 0, reader, archiveChan) - assert.Error(t, err) -} - func TestNestedDirArchive(t *testing.T) { file, err := os.Open("testdata/dir-archive.zip") assert.Nil(t, err) diff --git a/pkg/handlers/rpmhandler.go b/pkg/handlers/rpmhandler.go new file mode 100644 index 000000000..593b0a140 --- /dev/null +++ b/pkg/handlers/rpmhandler.go @@ -0,0 +1,18 @@ +package handlers + +import ( + "io" + + logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" +) + +// RPMHandler specializes DefaultHandler to manage RPM package files. It leverages shared behaviors +// from DefaultHandler and introduces additional logic specific to RPM packages. +type RPMHandler struct{ DefaultHandler } + +// HandleFile processes RPM formatted files. Further implementation is required to appropriately +// handle RPM specific archive operations. +func (h *RPMHandler) HandleFile(ctx logContext.Context, input io.Reader) (chan []byte, error) { + // TODO implement me + panic("implement me") +} From e95356e64bf7d71f9761b7e92c5164e7c8285fd1 Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Sat, 13 Apr 2024 18:03:17 -0700 Subject: [PATCH 08/32] Refactor RPM archive handlers to use a library instead of shelling out --- go.mod | 6 ++- go.sum | 74 +++++++-------------------------- pkg/handlers/arhandler.go | 2 +- pkg/handlers/handlers.go | 35 ++++++---------- pkg/handlers/handlers_test.go | 22 +++++++--- pkg/handlers/rpmhandler.go | 44 ++++++++++++++++++-- pkg/handlers/rpmhandler_test.go | 38 +++++++++++++++++ 7 files changed, 128 insertions(+), 93 deletions(-) create mode 100644 pkg/handlers/rpmhandler_test.go diff --git a/go.mod b/go.mod index 214cc957b..dd9ff348d 100644 --- a/go.mod +++ b/go.mod @@ -69,6 +69,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.19.0 github.com/rabbitmq/amqp091-go v1.9.0 + github.com/sassoftware/go-rpmutils v0.3.0 github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 github.com/shuheiktgw/go-travis v0.3.1 github.com/snowflakedb/gosnowflake v1.8.0 @@ -118,6 +119,7 @@ require ( github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect + github.com/DataDog/zstd v1.5.5 // indirect github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/Microsoft/hcsshim v0.11.4 // indirect @@ -257,6 +259,7 @@ require ( github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/xhit/go-str2duration/v2 v2.1.0 // indirect + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect github.com/yuin/goldmark v1.5.4 // indirect github.com/yuin/goldmark-emoji v1.0.2 // indirect @@ -277,8 +280,7 @@ require ( golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.20.0 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect google.golang.org/grpc v1.63.2 // indirect diff --git a/go.sum b/go.sum index cbf09e328..eeeb52f55 100644 --- a/go.sum +++ b/go.sum @@ -88,6 +88,8 @@ github.com/BobuSumisu/aho-corasick v1.0.3/go.mod h1:hm4jLcvZKI2vRF2WDU1N4p/jpWtp github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= +github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= @@ -97,8 +99,6 @@ github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7 github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w= github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/TheZeroSlave/zapsentry v1.22.1 h1:NB7JW4SDlWCdEZ+7qqbjfS3hkvuJuTRAvHh4RRKo4BY= -github.com/TheZeroSlave/zapsentry v1.22.1/go.mod h1:D1YMfSuu6xnkhwFXxrronesmsiyDhIqo+86I3Ok+r64= github.com/TheZeroSlave/zapsentry v1.23.0 h1:TKyzfEL7LRlRr+7AvkukVLZ+jZPC++ebCUv7ZJHl1AU= github.com/TheZeroSlave/zapsentry v1.23.0/go.mod h1:3DRFLu4gIpnCTD4V9HMCBSaqYP8gYU7mZickrs2/rIY= github.com/adrg/strutil v0.3.1 h1:OLvSS7CSJO8lBii4YmBt8jiK9QOtB9CzCzwl4Ic/Fz4= @@ -113,8 +113,7 @@ github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74 h1:Kk6a4nehpJ3UuJRqlA3JxYxBZEqCeOmATOvrbT4p9RA= -github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= +github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7VVbI0o4wBRNQIgn917usHWOd6VAffYI= github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= @@ -126,18 +125,6 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/aws/aws-sdk-go v1.51.14 h1:qedX6zZEO1a+5kra+D4ythOYR3TgaROC0hTPxhTFh8I= -github.com/aws/aws-sdk-go v1.51.14/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go v1.51.16 h1:vnWKK8KjbftEkuPX8bRj3WHsLy1uhotn0eXptpvrxJI= -github.com/aws/aws-sdk-go v1.51.16/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go v1.51.17 h1:Cfa40lCdjv9OxC3X1Ks3a6O1Tu3gOANSyKHOSw/zuWU= -github.com/aws/aws-sdk-go v1.51.17/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go v1.51.18 h1:JKrk49ZlBTyKa4+droU7U/hk0QG84v91xaA58O0LPdo= -github.com/aws/aws-sdk-go v1.51.18/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go v1.51.19 h1:jp/Vx/mUpXttthvvo/4/Nn/3+zumirIlAFkp1Irf1kM= -github.com/aws/aws-sdk-go v1.51.19/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go v1.51.20 h1:ziM90ujYHKKkoTZL+Wg2LwjbQecL+l298GGJeG4ktZs= -github.com/aws/aws-sdk-go v1.51.20/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go v1.51.21 h1:UrT6JC9R9PkYYXDZBV0qDKTualMr+bfK2eboTknMgbs= github.com/aws/aws-sdk-go v1.51.21/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go v1.51.22 h1:VL2p2JgC32myt7DMEcbe1devdtgGSgMNvZpkcdvlxq4= @@ -308,8 +295,6 @@ github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXY 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-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-ldap/ldap/v3 v3.4.6 h1:ert95MdbiG7aWo/oPYp9btL3KJlMPKnP58r09rI8T+A= -github.com/go-ldap/ldap/v3 v3.4.6/go.mod h1:IGMQANNtxpsOzj7uUAMjpGBaOVTC4DYyIy8VsTdxmtc= github.com/go-ldap/ldap/v3 v3.4.7 h1:3Hbd7mIB1qjd3Ra59fI3JYea/t5kykFu2CVHBca9koE= github.com/go-ldap/ldap/v3 v3.4.7/go.mod h1:qS3Sjlu76eHfHGpUdWkAXQTw4beih+cHsco2jXlIXrk= github.com/go-ldap/ldap/v3 v3.4.8 h1:loKJyspcRezt2Q3ZRMq2p/0v8iOurlmeXDPw6fikSvQ= @@ -379,8 +364,6 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq 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/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= @@ -396,7 +379,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -424,7 +406,6 @@ github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= @@ -462,6 +443,7 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9 github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= 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= @@ -480,11 +462,17 @@ github.com/jackc/pgx/v5 v5.5.4 h1:Xp2aQS8uXButQdnCMWNmvx6UysWQQC+u1EoizjguY+8= github.com/jackc/pgx/v5 v5.5.4/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= +github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= +github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg= github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= +github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh687T8= github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs= +github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jlaffaye/ftp v0.2.0 h1:lXNvW7cBu7R/68bknOX3MrRIIqZ61zELs1P2RAiA3lg= github.com/jlaffaye/ftp v0.2.0/go.mod h1:is2Ds5qkhceAPy2xD6RLI6hmp/qysSoymZ+Z2uTnspI= @@ -538,8 +526,6 @@ github.com/launchdarkly/go-semver v1.0.2 h1:sYVRnuKyvxlmQCnCUyDkAhtmzSFRoX6rG2Xa github.com/launchdarkly/go-semver v1.0.2/go.mod h1:xFmMwXba5Mb+3h72Z+VeSs9ahCvKo2QFUTHRNHVqR28= github.com/launchdarkly/go-server-sdk-evaluation/v3 v3.0.0 h1:nQbR1xCpkdU9Z71FI28bWTi5LrmtSVURy0UFcBVD5ZU= github.com/launchdarkly/go-server-sdk-evaluation/v3 v3.0.0/go.mod h1:cwk7/7SzNB2wZbCZS7w2K66klMLBe3NFM3/qd3xnsRc= -github.com/launchdarkly/go-server-sdk/v7 v7.3.0 h1:blc8npHPjhXGs2NU68YSKby6Xkxp16aDSObLt3W5Qww= -github.com/launchdarkly/go-server-sdk/v7 v7.3.0/go.mod h1:EY2ag+p9HnNXiG4pJ+y7QG2gqCYEoYD+NJgwkhmUUqk= github.com/launchdarkly/go-server-sdk/v7 v7.4.0 h1:GaxFHjLuJzPTnadrQ2FcwSgW2Q1q2ZK/JtxpN5Q6vus= github.com/launchdarkly/go-server-sdk/v7 v7.4.0/go.mod h1:EY2ag+p9HnNXiG4pJ+y7QG2gqCYEoYD+NJgwkhmUUqk= github.com/launchdarkly/go-test-helpers/v2 v2.2.0 h1:L3kGILP/6ewikhzhdNkHy1b5y4zs50LueWenVF0sBbs= @@ -676,6 +662,8 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= github.com/sahilm/fuzzy v0.1.1-0.20230530133925-c48e322e2a8f h1:MvTmaQdww/z0Q4wrYjDSCcZ78NoftLQyHBSLW/Cx79Y= github.com/sahilm/fuzzy v0.1.1-0.20230530133925-c48e322e2a8f/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= +github.com/sassoftware/go-rpmutils v0.3.0 h1:tE4TZ8KcOXay5iIP64P291s6Qxd9MQCYhI7DU+f3gFA= +github.com/sassoftware/go-rpmutils v0.3.0/go.mod h1:hM9wdxFsjUFR/tJ6SMsLrJuChcucCa0DsCzE9RMfwMo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= @@ -720,20 +708,12 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502 h1:34icjjmqJ2HPjrSuJYEkdZ+0ItmGQAQ75cRHIiftIyE= github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502/go.mod h1:p9lPsd+cx33L3H9nNoecRRxPssFKUwwI50I3pZ0yT+8= -github.com/testcontainers/testcontainers-go v0.29.1 h1:z8kxdFlovA2y97RWx98v/TQ+tR+SXZm6p35M+xB92zk= -github.com/testcontainers/testcontainers-go v0.29.1/go.mod h1:SnKnKQav8UcgtKqjp/AD8bE1MqZm+3TDb/B8crE3XnI= github.com/testcontainers/testcontainers-go v0.30.0 h1:jmn/XS22q4YRrcMwWg0pAwlClzs/abopbsBzrepyc4E= github.com/testcontainers/testcontainers-go v0.30.0/go.mod h1:K+kHNGiM5zjklKjgTtcrEetF3uhWbMUyqAQoyoh8Pf0= -github.com/testcontainers/testcontainers-go/modules/mssql v0.29.1 h1:N5GqwKhyoytElzELjR9KCdiAvvy+6GpJ7ibtvdyY/o4= -github.com/testcontainers/testcontainers-go/modules/mssql v0.29.1/go.mod h1:Hc7lzst9KkM+JMMrv4OjQOE7GUEDzzjBXVfq04iBE6E= github.com/testcontainers/testcontainers-go/modules/mssql v0.30.0 h1:jvDa5EImFyFNv6LLbd3qdcq1TXBY2LzOUZ0GbVbsI7I= github.com/testcontainers/testcontainers-go/modules/mssql v0.30.0/go.mod h1:BYBQszX47xz69xeTg5hX62ndgwxdfAIs6w/94Pk1Z1M= -github.com/testcontainers/testcontainers-go/modules/mysql v0.29.1 h1:SnJtZNcskgxOMyVAT7M+MQjpveP59nwKzlBw2ItX+C8= -github.com/testcontainers/testcontainers-go/modules/mysql v0.29.1/go.mod h1:VhA5dV+O19sx3Y9u9bfO+fbJfP3E7RiMq0nDMEGjslw= github.com/testcontainers/testcontainers-go/modules/mysql v0.30.0 h1:wrePvxfU/2HFALKyBqpNs6VoPPvThzHy9aN+PCxse9g= github.com/testcontainers/testcontainers-go/modules/mysql v0.30.0/go.mod h1:Srnlf7wwA7s6K4sKKhjAoBHJcKorRINR/i5dCA4ZyGk= -github.com/testcontainers/testcontainers-go/modules/postgres v0.29.1 h1:hTn3MzhR9w4btwfzr/NborGCaeNZG0MPBpufeDj10KA= -github.com/testcontainers/testcontainers-go/modules/postgres v0.29.1/go.mod h1:YsWyy+pHDgvGdi0axGOx6CGXWsE6eqSaApyd1FYYSSc= github.com/testcontainers/testcontainers-go/modules/postgres v0.30.0 h1:D3HFqpZS90iRGAN7M85DFiuhPfvYvFNnx8urQ6mPAvo= github.com/testcontainers/testcontainers-go/modules/postgres v0.30.0/go.mod h1:e1sKxwUOkqzvaqdHl/oV9mUtFmkDPTfBGp0po2tnWQU= github.com/tetratelabs/wazero v1.7.0 h1:jg5qPydno59wqjpGrHph81lbtHzTrWzwwtD4cD88+hQ= @@ -756,16 +736,12 @@ github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0o github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck= github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= -github.com/wasilibs/go-re2 v1.5.1 h1:a+Gb1mx6Q7MmU4d+3BCnnN28U2/cnADmY1oRRanQi10= -github.com/wasilibs/go-re2 v1.5.1/go.mod h1:UqqxQ1O99boQUm1r61H/IYGiGQOS/P88K7hU5nLNkEg= github.com/wasilibs/go-re2 v1.5.2 h1:fDO2TJrRzRrv3jD0gzOvmZ2UM4Yt9YXOEdLrlNc/Ies= github.com/wasilibs/go-re2 v1.5.2/go.mod h1:UqqxQ1O99boQUm1r61H/IYGiGQOS/P88K7hU5nLNkEg= github.com/wasilibs/nottinygc v0.4.0 h1:h1TJMihMC4neN6Zq+WKpLxgd9xCFMw7O9ETLwY2exJQ= github.com/wasilibs/nottinygc v0.4.0/go.mod h1:oDcIotskuYNMpqMF23l7Z8uzD4TC0WXHK8jetlB3HIo= github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0 h1:3UeQBvD0TFrlVjOeLOBz+CPAI8dnbqNSVwUwRrkp7vQ= github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0/go.mod h1:IXCdmsXIht47RaVFLEdVnh1t+pgYtTAhQGj73kz+2DM= -github.com/xanzy/go-gitlab v0.101.0 h1:qRgvX8DNE19zRugB6rnnZMZ5ubhITSKPLNWEyc6UIPg= -github.com/xanzy/go-gitlab v0.101.0/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= github.com/xanzy/go-gitlab v0.102.0 h1:ExHuJ1OTQ2yt25zBMMj0G96ChBirGYv8U7HyUiYkZ+4= github.com/xanzy/go-gitlab v0.102.0/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= github.com/xanzy/go-gitlab v0.103.0 h1:J9pTQoq0GsEFqzd6srCM1QfdfKAxSNz6mT6ntrpNF2w= @@ -780,6 +756,8 @@ github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6 github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -853,9 +831,7 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= @@ -867,10 +843,6 @@ golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE 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-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw= -golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ= -golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 h1:985EYyeCOxTpcgOTJpflJUwOeEz0CQOdPt73OzpE9F8= -golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 h1:ESSUROHIBHg7USnszlcdmjBEwdMj9VUvU+OPk4yl2mc= golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2nTQVIEhZIptnrVb1XY= @@ -896,8 +868,6 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= -golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -929,7 +899,6 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= @@ -938,8 +907,6 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr 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.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= -golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -951,8 +918,6 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1000,10 +965,8 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -1013,9 +976,7 @@ golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= @@ -1031,7 +992,6 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1069,8 +1029,6 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= -golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1102,8 +1060,6 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 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.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= 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= @@ -1156,8 +1112,6 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 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.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/pkg/handlers/arhandler.go b/pkg/handlers/arhandler.go index abc17563f..e4f31ebf3 100644 --- a/pkg/handlers/arhandler.go +++ b/pkg/handlers/arhandler.go @@ -8,7 +8,7 @@ import ( // ARHandler specializes DefaultHandler to handle AR archive formats. By embedding DefaultHandler, // ARHandler inherits and can further customize the common handling behavior such as skipping binaries. -type ARHandler struct{ DefaultHandler } +type ARHandler struct{ *DefaultHandler } // HandleFile processes AR formatted files. This function needs to be implemented to extract or // manage data from AR files according to specific requirements. diff --git a/pkg/handlers/handlers.go b/pkg/handlers/handlers.go index aff2f8248..ec771ae32 100644 --- a/pkg/handlers/handlers.go +++ b/pkg/handlers/handlers.go @@ -1,7 +1,6 @@ package handlers import ( - "bytes" "errors" "fmt" "io" @@ -30,26 +29,21 @@ const ( ) // determineMimeType reads from the provided reader to detect the MIME type. -// It returns the detected MIME type and a new reader that includes the read portion. -func determineMimeType(reader io.Reader) (mimeType, io.Reader, error) { +func determineMimeType(reader io.Reader) (mimeType, error) { // A buffer of 512 bytes is used since many file formats store their magic numbers within the first 512 bytes. // If fewer bytes are read, MIME type detection may still succeed. - buffer := make([]byte, 512) - n, err := reader.Read(buffer) + buffer := make([]byte, defaultBufferSize) + _, err := reader.Read(buffer) if err != nil && !errors.Is(err, io.EOF) { - return "", nil, fmt.Errorf("unable to read file for MIME type detection: %w", err) + return "", fmt.Errorf("unable to read file for MIME type detection: %w", err) } - // Create a new reader that starts with the buffer we just read - // and continues with the rest of the original reader. - reader = io.MultiReader(bytes.NewReader(buffer[:n]), reader) - kind, err := filetype.Match(buffer) if err != nil { - return "", nil, fmt.Errorf("unable to determine file type: %w", err) + return "", fmt.Errorf("unable to determine file type: %w", err) } - return mimeType(kind.MIME.Value), reader, nil + return mimeType(kind.MIME.Value), nil } // GetHandlerForType dynamically selects and configures a FileHandler based on the provided MIME type. This method @@ -59,24 +53,21 @@ func determineMimeType(reader io.Reader) (mimeType, io.Reader, error) { // The handler is then configured with provided Options, adapting it to specific operational needs. // Returns the configured handler or an error if the handler type does not match the expected type. func GetHandlerForType(mimeT mimeType, opts ...Option) (FileHandler, error) { + defaultHandler := new(DefaultHandler) + defaultHandler.configure(opts...) + var handler FileHandler switch mimeT { case arMimeType: - handler = new(ARHandler) + handler = &ARHandler{DefaultHandler: defaultHandler} case rpmMimeType: - handler = new(RPMHandler) + handler = &RPMHandler{DefaultHandler: defaultHandler} case machOType, octetStream: fallthrough default: - handler = new(DefaultHandler) + handler = defaultHandler } - defaultHandler, ok := handler.(*DefaultHandler) - if !ok { - return handler, fmt.Errorf("handler is not a DefaultHandler: %T", handler) - } - - defaultHandler.configure(opts...) return handler, nil } @@ -87,7 +78,7 @@ func GetHandlerForType(mimeT mimeType, opts ...Option) (FileHandler, error) { // seeking, or file handling) result in a log entry and a false return value indicating failure. // Successful handling passes the file content through a channel to be chunked and reported, returning true on success. func HandleFile(ctx logContext.Context, reReader *diskbufferreader.DiskBufferReader, chunkSkel *sources.Chunk, reporter sources.ChunkReporter, opts ...Option) bool { - mimeT, _, err := determineMimeType(reReader) + mimeT, err := determineMimeType(reReader) if err != nil { ctx.Logger().Error(err, "error determining MIME type") return false diff --git a/pkg/handlers/handlers_test.go b/pkg/handlers/handlers_test.go index cb5238c96..418c6632c 100644 --- a/pkg/handlers/handlers_test.go +++ b/pkg/handlers/handlers_test.go @@ -284,7 +284,7 @@ func TestDetermineMimeType(t *testing.T) { originalData, _ := io.ReadAll(io.TeeReader(tt.input, &bytes.Buffer{})) tt.input = bytes.NewReader(originalData) // Reset the reader - mime, reader, err := determineMimeType(tt.input) + mime, err := determineMimeType(tt.input) if err != nil && !tt.shouldFail { t.Fatalf("unexpected error: %v", err) } @@ -292,10 +292,22 @@ func TestDetermineMimeType(t *testing.T) { if !tt.shouldFail { assert.Equal(t, tt.expected, mime) } - - // Ensure the reader still contains all the original data. - data, _ := io.ReadAll(reader) - assert.Equal(t, originalData, data) }) } } + +func TestHandleFileRPM(t *testing.T) { + wantChunkCount := 179 + reporter := sources.ChanReporter{Ch: make(chan *sources.Chunk, wantChunkCount)} + + file, err := os.Open("testdata/test.rpm") + assert.Nil(t, err) + defer file.Close() + + reader, err := diskbufferreader.New(file) + assert.NoError(t, err) + + assert.Equal(t, 0, len(reporter.Ch)) + assert.True(t, HandleFile(logContext.Background(), reader, &sources.Chunk{}, reporter)) + assert.Equal(t, wantChunkCount, len(reporter.Ch)) +} diff --git a/pkg/handlers/rpmhandler.go b/pkg/handlers/rpmhandler.go index 593b0a140..9781b5e01 100644 --- a/pkg/handlers/rpmhandler.go +++ b/pkg/handlers/rpmhandler.go @@ -1,18 +1,56 @@ package handlers import ( + "errors" "io" + "github.com/sassoftware/go-rpmutils" + logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" ) // RPMHandler specializes DefaultHandler to manage RPM package files. It leverages shared behaviors // from DefaultHandler and introduces additional logic specific to RPM packages. -type RPMHandler struct{ DefaultHandler } +type RPMHandler struct{ *DefaultHandler } // HandleFile processes RPM formatted files. Further implementation is required to appropriately // handle RPM specific archive operations. func (h *RPMHandler) HandleFile(ctx logContext.Context, input io.Reader) (chan []byte, error) { - // TODO implement me - panic("implement me") + archiveChan := make(chan []byte, defaultBufferSize) + + go func() { + ctx, cancel := logContext.WithTimeout(ctx, maxTimeout) + defer cancel() + defer close(archiveChan) + + rpm, err := rpmutils.ReadRpm(input) + if err != nil { + ctx.Logger().Error(err, "error reading RPM") + return + } + + reader, err := rpm.PayloadReaderExtended() + if err != nil { + ctx.Logger().Error(err, "error getting RPM payload reader") + return + } + + for { + fileInfo, err := reader.Next() + if err != nil { + if errors.Is(err, io.EOF) { + return + } + ctx.Logger().Error(err, "error reading RPM payload") + return + } + ctx := logContext.WithValues(ctx, "filename", fileInfo.Name, "size", fileInfo.Size) + + if err := h.handleNonArchiveContent(ctx, reader, archiveChan); err != nil { + ctx.Logger().Error(err, "error handling archive content in RPM") + } + } + }() + + return archiveChan, nil } diff --git a/pkg/handlers/rpmhandler_test.go b/pkg/handlers/rpmhandler_test.go new file mode 100644 index 000000000..4e7de0a07 --- /dev/null +++ b/pkg/handlers/rpmhandler_test.go @@ -0,0 +1,38 @@ +package handlers + +import ( + "context" + "os" + "testing" + "time" + + "github.com/stretchr/testify/assert" + diskbufferreader "github.com/trufflesecurity/disk-buffer-reader" + + logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" +) + +func TestHandleRPMFile(t *testing.T) { + file, err := os.Open("testdata/test.rpm") + assert.Nil(t, err) + defer file.Close() + + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + newReader, err := diskbufferreader.New(file) + assert.NoError(t, err) + defer newReader.Close() + + handler := new(RPMHandler) + archiveChan, err := handler.HandleFile(logContext.AddLogger(ctx), newReader) + assert.NoError(t, err) + + wantChunkCount := 179 + count := 0 + for range archiveChan { + count++ + } + + assert.Equal(t, wantChunkCount, count) +} From 0d9d56f96c5f033f7878fd65c44de57ee03e96b5 Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Sat, 13 Apr 2024 18:19:38 -0700 Subject: [PATCH 09/32] make rpm handling context aware --- pkg/handlers/rpmhandler.go | 40 +++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/pkg/handlers/rpmhandler.go b/pkg/handlers/rpmhandler.go index 9781b5e01..c038d3d6b 100644 --- a/pkg/handlers/rpmhandler.go +++ b/pkg/handlers/rpmhandler.go @@ -2,6 +2,7 @@ package handlers import ( "errors" + "fmt" "io" "github.com/sassoftware/go-rpmutils" @@ -36,21 +37,38 @@ func (h *RPMHandler) HandleFile(ctx logContext.Context, input io.Reader) (chan [ } for { - fileInfo, err := reader.Next() - if err != nil { - if errors.Is(err, io.EOF) { - return - } - ctx.Logger().Error(err, "error reading RPM payload") + select { + case <-ctx.Done(): return - } - ctx := logContext.WithValues(ctx, "filename", fileInfo.Name, "size", fileInfo.Size) - - if err := h.handleNonArchiveContent(ctx, reader, archiveChan); err != nil { - ctx.Logger().Error(err, "error handling archive content in RPM") + default: + if err := h.processRPMFiles(ctx, reader, archiveChan); err != nil { + ctx.Logger().Error(err, "error processing RPM files") + } } } }() return archiveChan, nil } + +func (h *RPMHandler) processRPMFiles(ctx logContext.Context, reader rpmutils.PayloadReader, archiveChan chan []byte) error { + for { + select { + case <-ctx.Done(): + return ctx.Err() + default: + fileInfo, err := reader.Next() + if err != nil { + if errors.Is(err, io.EOF) { + return nil + } + return fmt.Errorf("error reading RPM payload: %w", err) + } + fileCtx := logContext.WithValues(ctx, "filename", fileInfo.Name, "size", fileInfo.Size) + + if err := h.handleNonArchiveContent(fileCtx, reader, archiveChan); err != nil { + fileCtx.Logger().Error(err, "error handling archive content in RPM") + } + } + } +} From bd8f1dd1d303e3bb2a29af6b5a424b9d77067c8f Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Sat, 13 Apr 2024 18:34:55 -0700 Subject: [PATCH 10/32] update test --- pkg/handlers/rpmhandler_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/handlers/rpmhandler_test.go b/pkg/handlers/rpmhandler_test.go index 4e7de0a07..fffd8584a 100644 --- a/pkg/handlers/rpmhandler_test.go +++ b/pkg/handlers/rpmhandler_test.go @@ -24,7 +24,7 @@ func TestHandleRPMFile(t *testing.T) { assert.NoError(t, err) defer newReader.Close() - handler := new(RPMHandler) + handler := &RPMHandler{new(DefaultHandler)} archiveChan, err := handler.HandleFile(logContext.AddLogger(ctx), newReader) assert.NoError(t, err) From 8eb87017c8cefbf684d48ba406111757b3dc0fdf Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Sat, 13 Apr 2024 19:00:42 -0700 Subject: [PATCH 11/32] Refactor AR/deb archive handler to use an existing library instead of shelling out --- go.mod | 3 ++ go.sum | 6 ++++ pkg/handlers/arhandler.go | 57 ++++++++++++++++++++++++++++++++-- pkg/handlers/arhandler_test.go | 38 +++++++++++++++++++++++ pkg/handlers/defaulthandler.go | 3 +- pkg/handlers/handlers.go | 2 +- pkg/handlers/handlers_test.go | 16 ++++++++++ pkg/handlers/rpmhandler.go | 14 +++------ 8 files changed, 124 insertions(+), 15 deletions(-) create mode 100644 pkg/handlers/arhandler_test.go diff --git a/go.mod b/go.mod index dd9ff348d..70e2cb921 100644 --- a/go.mod +++ b/go.mod @@ -94,6 +94,7 @@ require ( google.golang.org/api v0.175.0 google.golang.org/protobuf v1.33.0 gopkg.in/h2non/gock.v1 v1.1.2 + pault.ag/go/debian v0.16.0 pgregory.net/rapid v1.1.0 sigs.k8s.io/yaml v1.4.0 ) @@ -199,6 +200,7 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/s3 v1.1.4 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/kjk/lzma v0.0.0-20161016003348-3fd93898850d // indirect github.com/klauspost/compress v1.17.4 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect github.com/klauspost/pgzip v1.2.5 // indirect @@ -287,4 +289,5 @@ require ( gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + pault.ag/go/topsort v0.1.1 // indirect ) diff --git a/go.sum b/go.sum index eeeb52f55..4b1e8eac7 100644 --- a/go.sum +++ b/go.sum @@ -494,6 +494,8 @@ github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4 github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kjk/lzma v0.0.0-20161016003348-3fd93898850d h1:RnWZeH8N8KXfbwMTex/KKMYMj0FJRCF6tQubUuQ02GM= +github.com/kjk/lzma v0.0.0-20161016003348-3fd93898850d/go.mod h1:phT/jsRPBAEqjAibu1BurrabCBNTYiVI+zbmyCZJY6Q= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= @@ -1148,6 +1150,10 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh 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= +pault.ag/go/debian v0.16.0 h1:fivXn/IO9rn2nzTGndflDhOkNU703Axs/StWihOeU2g= +pault.ag/go/debian v0.16.0/go.mod h1:JFl0XWRCv9hWBrB5MDDZjA5GSEs1X3zcFK/9kCNIUmE= +pault.ag/go/topsort v0.1.1 h1:L0QnhUly6LmTv0e3DEzbN2q6/FGgAcQvaEw65S53Bg4= +pault.ag/go/topsort v0.1.1/go.mod h1:r1kc/L0/FZ3HhjezBIPaNVhkqv8L0UJ9bxRuHRVZ0q4= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/pkg/handlers/arhandler.go b/pkg/handlers/arhandler.go index e4f31ebf3..f1cd7cf9e 100644 --- a/pkg/handlers/arhandler.go +++ b/pkg/handlers/arhandler.go @@ -1,8 +1,13 @@ package handlers import ( + "errors" + "fmt" "io" + diskbufferreader "github.com/trufflesecurity/disk-buffer-reader" + "pault.ag/go/debian/deb" + logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" ) @@ -12,7 +17,53 @@ type ARHandler struct{ *DefaultHandler } // HandleFile processes AR formatted files. This function needs to be implemented to extract or // manage data from AR files according to specific requirements. -func (h *ARHandler) HandleFile(ctx logContext.Context, input io.Reader) (chan []byte, error) { - // TODO implement me - panic("implement me") +func (h *ARHandler) HandleFile(ctx logContext.Context, input *diskbufferreader.DiskBufferReader) (chan []byte, error) { + archiveChan := make(chan []byte, defaultBufferSize) + + go func() { + ctx, cancel := logContext.WithTimeout(ctx, maxTimeout) + defer cancel() + defer close(archiveChan) + + arReader, err := deb.LoadAr(input) + if err != nil { + ctx.Logger().Error(err, "error reading AR") + return + } + + for { + select { + case <-ctx.Done(): + return + default: + if err := h.processARFiles(ctx, arReader, archiveChan); err != nil { + ctx.Logger().Error(err, "error processing AR files") + } + } + } + }() + + return archiveChan, nil +} + +func (h *ARHandler) processARFiles(ctx logContext.Context, reader *deb.Ar, archiveChan chan []byte) error { + for { + select { + case <-ctx.Done(): + return ctx.Err() + default: + arEntry, err := reader.Next() + if err != nil { + if errors.Is(err, io.EOF) { + return nil + } + return fmt.Errorf("error reading AR payload: %w", err) + } + fileCtx := logContext.WithValues(ctx, "filename", arEntry.Name, "size", arEntry.Size) + + if err := h.handleNonArchiveContent(fileCtx, arEntry.Data, archiveChan); err != nil { + fileCtx.Logger().Error(err, "error handling archive content in AR") + } + } + } } diff --git a/pkg/handlers/arhandler_test.go b/pkg/handlers/arhandler_test.go new file mode 100644 index 000000000..9d40fba11 --- /dev/null +++ b/pkg/handlers/arhandler_test.go @@ -0,0 +1,38 @@ +package handlers + +import ( + "context" + "os" + "testing" + "time" + + "github.com/stretchr/testify/assert" + diskbufferreader "github.com/trufflesecurity/disk-buffer-reader" + + logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" +) + +func TestHandleARFile(t *testing.T) { + file, err := os.Open("testdata/test.deb") + assert.Nil(t, err) + defer file.Close() + + ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) + defer cancel() + + newReader, err := diskbufferreader.New(file) + assert.NoError(t, err) + defer newReader.Close() + + handler := &ARHandler{new(DefaultHandler)} + archiveChan, err := handler.HandleFile(logContext.AddLogger(ctx), newReader) + assert.NoError(t, err) + + wantChunkCount := 102 + count := 0 + for range archiveChan { + count++ + } + + assert.Equal(t, wantChunkCount, count) +} diff --git a/pkg/handlers/defaulthandler.go b/pkg/handlers/defaulthandler.go index c15eb2112..abf8a8dd2 100644 --- a/pkg/handlers/defaulthandler.go +++ b/pkg/handlers/defaulthandler.go @@ -10,6 +10,7 @@ import ( "github.com/gabriel-vasile/mimetype" "github.com/mholt/archiver/v4" + diskbufferreader "github.com/trufflesecurity/disk-buffer-reader" "github.com/trufflesecurity/trufflehog/v3/pkg/common" logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" @@ -84,7 +85,7 @@ func (h *DefaultHandler) configure(opts ...Option) { // and starts a goroutine that handles the archive opening process. It utilizes a context with a timeout to ensure // that the extraction process does not exceed a predefined maximum duration. // The function returns a channel that will receive the extracted data bytes and an error if the initial setup fails. -func (h *DefaultHandler) HandleFile(ctx logContext.Context, input io.Reader) (chan []byte, error) { +func (h *DefaultHandler) HandleFile(ctx logContext.Context, input *diskbufferreader.DiskBufferReader) (chan []byte, error) { if h.skipArchives { return nil, nil } diff --git a/pkg/handlers/handlers.go b/pkg/handlers/handlers.go index ec771ae32..6f5c2b417 100644 --- a/pkg/handlers/handlers.go +++ b/pkg/handlers/handlers.go @@ -16,7 +16,7 @@ import ( // It has a single method, HandleFile, which takes a context and an io.Reader as input, // and returns a channel of byte slices and an error. type FileHandler interface { - HandleFile(ctx logContext.Context, input io.Reader) (chan []byte, error) + HandleFile(ctx logContext.Context, reader *diskbufferreader.DiskBufferReader) (chan []byte, error) } type mimeType string diff --git a/pkg/handlers/handlers_test.go b/pkg/handlers/handlers_test.go index 418c6632c..e9afb116c 100644 --- a/pkg/handlers/handlers_test.go +++ b/pkg/handlers/handlers_test.go @@ -311,3 +311,19 @@ func TestHandleFileRPM(t *testing.T) { assert.True(t, HandleFile(logContext.Background(), reader, &sources.Chunk{}, reporter)) assert.Equal(t, wantChunkCount, len(reporter.Ch)) } + +func TestHandleFileAR(t *testing.T) { + wantChunkCount := 102 + reporter := sources.ChanReporter{Ch: make(chan *sources.Chunk, wantChunkCount)} + + file, err := os.Open("testdata/test.deb") + assert.Nil(t, err) + defer file.Close() + + reader, err := diskbufferreader.New(file) + assert.NoError(t, err) + + assert.Equal(t, 0, len(reporter.Ch)) + assert.True(t, HandleFile(logContext.Background(), reader, &sources.Chunk{}, reporter)) + assert.Equal(t, wantChunkCount, len(reporter.Ch)) +} diff --git a/pkg/handlers/rpmhandler.go b/pkg/handlers/rpmhandler.go index c038d3d6b..168a16fb5 100644 --- a/pkg/handlers/rpmhandler.go +++ b/pkg/handlers/rpmhandler.go @@ -6,6 +6,7 @@ import ( "io" "github.com/sassoftware/go-rpmutils" + diskbufferreader "github.com/trufflesecurity/disk-buffer-reader" logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" ) @@ -16,7 +17,7 @@ type RPMHandler struct{ *DefaultHandler } // HandleFile processes RPM formatted files. Further implementation is required to appropriately // handle RPM specific archive operations. -func (h *RPMHandler) HandleFile(ctx logContext.Context, input io.Reader) (chan []byte, error) { +func (h *RPMHandler) HandleFile(ctx logContext.Context, input *diskbufferreader.DiskBufferReader) (chan []byte, error) { archiveChan := make(chan []byte, defaultBufferSize) go func() { @@ -36,15 +37,8 @@ func (h *RPMHandler) HandleFile(ctx logContext.Context, input io.Reader) (chan [ return } - for { - select { - case <-ctx.Done(): - return - default: - if err := h.processRPMFiles(ctx, reader, archiveChan); err != nil { - ctx.Logger().Error(err, "error processing RPM files") - } - } + if err := h.processRPMFiles(ctx, reader, archiveChan); err != nil { + ctx.Logger().Error(err, "error processing RPM files") } }() From 9079c0d8691d0e81dd51f42b230353d72552bbd6 Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Sat, 13 Apr 2024 19:02:31 -0700 Subject: [PATCH 12/32] Update tests --- pkg/handlers/arhandler.go | 12 +++--------- pkg/handlers/rpmhandler.go | 1 + 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/pkg/handlers/arhandler.go b/pkg/handlers/arhandler.go index f1cd7cf9e..ea3870708 100644 --- a/pkg/handlers/arhandler.go +++ b/pkg/handlers/arhandler.go @@ -31,15 +31,8 @@ func (h *ARHandler) HandleFile(ctx logContext.Context, input *diskbufferreader.D return } - for { - select { - case <-ctx.Done(): - return - default: - if err := h.processARFiles(ctx, arReader, archiveChan); err != nil { - ctx.Logger().Error(err, "error processing AR files") - } - } + if err := h.processARFiles(ctx, arReader, archiveChan); err != nil { + ctx.Logger().Error(err, "error processing AR files") } }() @@ -55,6 +48,7 @@ func (h *ARHandler) processARFiles(ctx logContext.Context, reader *deb.Ar, archi arEntry, err := reader.Next() if err != nil { if errors.Is(err, io.EOF) { + ctx.Logger().V(3).Info("AR archive fully processed") return nil } return fmt.Errorf("error reading AR payload: %w", err) diff --git a/pkg/handlers/rpmhandler.go b/pkg/handlers/rpmhandler.go index 168a16fb5..4d66409f5 100644 --- a/pkg/handlers/rpmhandler.go +++ b/pkg/handlers/rpmhandler.go @@ -54,6 +54,7 @@ func (h *RPMHandler) processRPMFiles(ctx logContext.Context, reader rpmutils.Pay fileInfo, err := reader.Next() if err != nil { if errors.Is(err, io.EOF) { + ctx.Logger().V(3).Info("RPM payload archive fully processed") return nil } return fmt.Errorf("error reading RPM payload: %w", err) From dd109dbbee6442ad5f40ee1e0d58275786e927c9 Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Sun, 14 Apr 2024 17:20:30 -0700 Subject: [PATCH 13/32] add max size check --- pkg/handlers/defaulthandler.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkg/handlers/defaulthandler.go b/pkg/handlers/defaulthandler.go index abf8a8dd2..9e481b7f4 100644 --- a/pkg/handlers/defaulthandler.go +++ b/pkg/handlers/defaulthandler.go @@ -162,6 +162,14 @@ func (h *DefaultHandler) extractorHandler(archiveChan chan []byte) func(context. if ctxDepth, ok := ctx.Value(depthKey).(int); ok { depth = ctxDepth } + if int(f.Size()) > maxSize { + lCtx.Logger().V(3).Info( + "skipping file due to size", + "filename", f.Name(), + "size", f.Size(), + ) + return nil + } fReader, err := f.Open() if err != nil { From c372be2f4758a59a145471ff9ff98ca3c0d8fdc1 Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Sun, 14 Apr 2024 17:25:01 -0700 Subject: [PATCH 14/32] add filename and size to context kvp --- pkg/handlers/defaulthandler.go | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/pkg/handlers/defaulthandler.go b/pkg/handlers/defaulthandler.go index 9e481b7f4..2bd1252d9 100644 --- a/pkg/handlers/defaulthandler.go +++ b/pkg/handlers/defaulthandler.go @@ -150,9 +150,13 @@ func (h *DefaultHandler) openArchive(ctx logContext.Context, depth int, reader i // particularly for binary files if configured to skip. If the file is not skipped, it recursively calls openArchive // to handle nested archives or to continue processing based on the file's content and depth in the archive structure. func (h *DefaultHandler) extractorHandler(archiveChan chan []byte) func(context.Context, archiver.File) error { - return func(ctx context.Context, f archiver.File) error { - lCtx := logContext.AddLogger(ctx) - lCtx.Logger().V(5).Info("Handling extracted file.", "filename", f.Name()) + return func(ctx context.Context, file archiver.File) error { + lCtx := logContext.WithValues( + logContext.AddLogger(ctx), + "filename", file.Name(), + "size", file.Size(), + ) + lCtx.Logger().V(5).Info("Handling extracted file.") if common.IsDone(ctx) { return ctx.Err() @@ -162,28 +166,24 @@ func (h *DefaultHandler) extractorHandler(archiveChan chan []byte) func(context. if ctxDepth, ok := ctx.Value(depthKey).(int); ok { depth = ctxDepth } - if int(f.Size()) > maxSize { - lCtx.Logger().V(3).Info( - "skipping file due to size", - "filename", f.Name(), - "size", f.Size(), - ) + if int(file.Size()) > maxSize { + lCtx.Logger().V(3).Info("skipping file due to size") return nil } - fReader, err := f.Open() + fReader, err := file.Open() if err != nil { return err } defer fReader.Close() - if common.SkipFile(f.Name()) { - lCtx.Logger().V(5).Info("skipping file", "filename", f.Name()) + if common.SkipFile(file.Name()) { + lCtx.Logger().V(5).Info("skipping file") return nil } - if h.skipBinaries && common.IsBinary(f.Name()) { - lCtx.Logger().V(5).Info("skipping binary file", "filename", f.Name()) + if h.skipBinaries && common.IsBinary(file.Name()) { + lCtx.Logger().V(5).Info("skipping binary file") return nil } From fe0688dbf52773ca66383045acea34a0368d63d7 Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Sun, 14 Apr 2024 17:26:29 -0700 Subject: [PATCH 15/32] move skip file check and is binary check before opening file --- pkg/handlers/defaulthandler.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/handlers/defaulthandler.go b/pkg/handlers/defaulthandler.go index 2bd1252d9..02be24b84 100644 --- a/pkg/handlers/defaulthandler.go +++ b/pkg/handlers/defaulthandler.go @@ -171,12 +171,6 @@ func (h *DefaultHandler) extractorHandler(archiveChan chan []byte) func(context. return nil } - fReader, err := file.Open() - if err != nil { - return err - } - defer fReader.Close() - if common.SkipFile(file.Name()) { lCtx.Logger().V(5).Info("skipping file") return nil @@ -187,6 +181,12 @@ func (h *DefaultHandler) extractorHandler(archiveChan chan []byte) func(context. return nil } + fReader, err := file.Open() + if err != nil { + return err + } + defer fReader.Close() + return h.openArchive(lCtx, depth, fReader, archiveChan) } } From b09fbdcb0a955ca6256578f96b5c2425ec545a3a Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Sun, 14 Apr 2024 17:46:00 -0700 Subject: [PATCH 16/32] fix test --- pkg/handlers/defaulthandler_test.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/handlers/defaulthandler_test.go b/pkg/handlers/defaulthandler_test.go index 38576a29d..ee96b9b6b 100644 --- a/pkg/handlers/defaulthandler_test.go +++ b/pkg/handlers/defaulthandler_test.go @@ -18,51 +18,61 @@ func TestArchiveHandler(t *testing.T) { archiveURL string expectedChunks int matchString string + expectErr bool }{ "gzip-single": { "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/one-zip.gz", 1, "AKIAYVP4CIPPH5TNP3SW", + false, }, "gzip-nested": { "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/double-zip.gz", 1, "AKIAYVP4CIPPH5TNP3SW", + false, }, "gzip-too-deep": { "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/six-zip.gz", 0, "", + true, }, "tar-single": { "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/one.tar", 1, "AKIAYVP4CIPPH5TNP3SW", + false, }, "tar-nested": { "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/two.tar", 1, "AKIAYVP4CIPPH5TNP3SW", + false, }, "tar-too-deep": { "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/six.tar", 0, "", + true, }, "targz-single": { "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/tar-archive.tar.gz", 1, "AKIAYVP4CIPPH5TNP3SW", + false, }, "gzip-large": { "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/FifteenMB.gz", 1543, "AKIAYVP4CIPPH5TNP3SW", + false, }, "zip-single": { "https://raw.githubusercontent.com/bill-rich/bad-secrets/master/aws-canary-creds.zip", 1, "AKIAYVP4CIPPH5TNP3SW", + false, }, } @@ -80,7 +90,10 @@ func TestArchiveHandler(t *testing.T) { t.Errorf("error creating reusable reader: %s", err) } archiveChan, err := handler.HandleFile(logContext.Background(), newReader) - assert.NoError(t, err) + if testCase.expectErr { + assert.NoError(t, err) + return + } count := 0 re := regexp.MustCompile(testCase.matchString) From 79a952be1fd07b16215d325053b8248629303cd3 Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Mon, 15 Apr 2024 11:23:27 -0700 Subject: [PATCH 17/32] preserve existing funcitonality of not handling non-archive files in HandleFile --- pkg/handlers/handlers.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/handlers/handlers.go b/pkg/handlers/handlers.go index 6f5c2b417..8dd51c3c7 100644 --- a/pkg/handlers/handlers.go +++ b/pkg/handlers/handlers.go @@ -6,6 +6,7 @@ import ( "io" "github.com/h2non/filetype" + "github.com/mholt/archiver/v4" diskbufferreader "github.com/trufflesecurity/disk-buffer-reader" logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context" @@ -96,7 +97,12 @@ func HandleFile(ctx logContext.Context, reReader *diskbufferreader.DiskBufferRea return false } - archiveChan, err := handler.HandleFile(ctx, reReader) // Delegate to the specific handler to process the file. + _, arReader, err := archiver.Identify("", reReader) + if errors.Is(err, archiver.ErrNoMatch) { + return false + } + + archiveChan, err := handler.HandleFile(ctx, arReader) // Delegate to the specific handler to process the file. if err != nil { ctx.Logger().Error(err, "error handling file") return false From 92310029a784f42fa14276f0783709a12658b4c1 Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Mon, 15 Apr 2024 11:51:49 -0700 Subject: [PATCH 18/32] Adjust check for rpm/deb archive type --- pkg/handlers/handlers.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/handlers/handlers.go b/pkg/handlers/handlers.go index 8dd51c3c7..14cac1c6f 100644 --- a/pkg/handlers/handlers.go +++ b/pkg/handlers/handlers.go @@ -97,12 +97,14 @@ func HandleFile(ctx logContext.Context, reReader *diskbufferreader.DiskBufferRea return false } - _, arReader, err := archiver.Identify("", reReader) - if errors.Is(err, archiver.ErrNoMatch) { - return false + if !(mimeT == arMimeType || mimeT == rpmMimeType) { + _, _, err := archiver.Identify("", reReader) + if errors.Is(err, archiver.ErrNoMatch) { + return false + } } - archiveChan, err := handler.HandleFile(ctx, arReader) // Delegate to the specific handler to process the file. + archiveChan, err := handler.HandleFile(ctx, reReader) // Delegate to the specific handler to process the file. if err != nil { ctx.Logger().Error(err, "error handling file") return false From 4e2f59bbd7cd35f533ac5c55923bab02b8b5fd8a Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Mon, 15 Apr 2024 12:14:04 -0700 Subject: [PATCH 19/32] add additional deb mime type --- pkg/handlers/handlers.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/handlers/handlers.go b/pkg/handlers/handlers.go index 14cac1c6f..369e3e3aa 100644 --- a/pkg/handlers/handlers.go +++ b/pkg/handlers/handlers.go @@ -24,6 +24,7 @@ type mimeType string const ( arMimeType mimeType = "application/x-unix-archive" + debMimeType mimeType = "application/vnd.debian.binary-package" rpmMimeType mimeType = "application/x-rpm" machOType mimeType = "application/x-mach-binary" octetStream mimeType = "application/octet-stream" @@ -59,7 +60,7 @@ func GetHandlerForType(mimeT mimeType, opts ...Option) (FileHandler, error) { var handler FileHandler switch mimeT { - case arMimeType: + case arMimeType, debMimeType: handler = &ARHandler{DefaultHandler: defaultHandler} case rpmMimeType: handler = &RPMHandler{DefaultHandler: defaultHandler} @@ -97,7 +98,7 @@ func HandleFile(ctx logContext.Context, reReader *diskbufferreader.DiskBufferRea return false } - if !(mimeT == arMimeType || mimeT == rpmMimeType) { + if !(mimeT == arMimeType || mimeT == rpmMimeType || mimeT == debMimeType) { _, _, err := archiver.Identify("", reReader) if errors.Is(err, archiver.ErrNoMatch) { return false From 1738c852982c6517e596971a64939da4ea54edca Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Mon, 15 Apr 2024 13:00:15 -0700 Subject: [PATCH 20/32] update comment --- pkg/handlers/handlers.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/handlers/handlers.go b/pkg/handlers/handlers.go index 369e3e3aa..a80ee036d 100644 --- a/pkg/handlers/handlers.go +++ b/pkg/handlers/handlers.go @@ -13,9 +13,11 @@ import ( "github.com/trufflesecurity/trufflehog/v3/pkg/sources" ) -// FileHandler is an represents a handler for files. -// It has a single method, HandleFile, which takes a context and an io.Reader as input, +// FileHandler represents a handler for files. +// It has a single method, HandleFile, which takes a context and a *diskbufferreader.DiskBufferReader as input, // and returns a channel of byte slices and an error. +// The DiskBufferReader provides an io.ReaderAt interface and supports seeking, allowing handlers to perform +// random access on the file content if needed. type FileHandler interface { HandleFile(ctx logContext.Context, reader *diskbufferreader.DiskBufferReader) (chan []byte, error) } From 46fde463f8f51a47c1638394af1f3ad371fa3ea9 Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Mon, 22 Apr 2024 14:35:46 -0700 Subject: [PATCH 21/32] go mod tidy --- go.mod | 2 +- go.sum | 50 -------------------------------------------------- 2 files changed, 1 insertion(+), 51 deletions(-) diff --git a/go.mod b/go.mod index c9278579f..98f5bb78a 100644 --- a/go.mod +++ b/go.mod @@ -282,7 +282,7 @@ require ( golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.20.0 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect - google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect + google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect google.golang.org/grpc v1.63.2 // indirect diff --git a/go.sum b/go.sum index 67e539586..72b90cc36 100644 --- a/go.sum +++ b/go.sum @@ -9,20 +9,12 @@ cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6T cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= -cloud.google.com/go/auth v0.2.0 h1:y6oTcpMSbOcXbwYgUUrvI+mrQ2xbrcdpPgtVbCGTLTk= -cloud.google.com/go/auth v0.2.0/go.mod h1:+yb+oy3/P0geX6DLKlqiGHARGR6EX2GRtYCzWOCQSbU= cloud.google.com/go/auth v0.2.2 h1:gmxNJs4YZYcw6YvKRtVBaF2fyUE6UrWPyzU8jHvYfmI= cloud.google.com/go/auth v0.2.2/go.mod h1:2bDNJWtWziDT3Pu1URxHHbkHE/BbOCuyUiKIGcNvafo= -cloud.google.com/go/auth/oauth2adapt v0.2.0 h1:FR8zevgQwu+8CqiOT5r6xCmJa3pJC/wdXEEPF1OkNhA= -cloud.google.com/go/auth/oauth2adapt v0.2.0/go.mod h1:AfqujpDAlTfLfeCIl/HJZZlIxD8+nJoZ5e0x1IxGq5k= cloud.google.com/go/auth/oauth2adapt v0.2.1 h1:VSPmMmUlT8CkIZ2PzD9AlLN+R3+D1clXMWHHa6vG/Ag= cloud.google.com/go/auth/oauth2adapt v0.2.1/go.mod h1:tOdK/k+D2e4GEwfBRA48dKNQiDsqIXxLh7VU319eV0g= 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/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= -cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= @@ -125,14 +117,6 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/aws/aws-sdk-go v1.51.21 h1:UrT6JC9R9PkYYXDZBV0qDKTualMr+bfK2eboTknMgbs= -github.com/aws/aws-sdk-go v1.51.21/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go v1.51.22 h1:VL2p2JgC32myt7DMEcbe1devdtgGSgMNvZpkcdvlxq4= -github.com/aws/aws-sdk-go v1.51.22/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go v1.51.23 h1:/3TEdsEE/aHmdKGw2NrOp7Sdea76zfffGkTTSXTsDxY= -github.com/aws/aws-sdk-go v1.51.23/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go v1.51.24 h1:nwL5MaommPkwb7Ixk24eWkdx5HY4of1gD10kFFVAl6A= -github.com/aws/aws-sdk-go v1.51.24/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go v1.51.25 h1:DjTT8mtmsachhV6yrXR8+yhnG6120dazr720nopRsls= github.com/aws/aws-sdk-go v1.51.25/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw= @@ -198,19 +182,14 @@ github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= -github.com/couchbase/gocb/v2 v2.8.0 h1:KoG44zWrP4QgK724D7D2rXHgRlztwkAPFQVApJCJaB4= -github.com/couchbase/gocb/v2 v2.8.0/go.mod h1:GL6M8F4eB5ZuoTYh2RzwCUheVVi4EADdCQ3yc52kqUI= github.com/couchbase/gocb/v2 v2.8.1 h1:syeJEVy36IvUy4wyzK/74M4wc4OJ2eWZ1d6yWG31Qno= github.com/couchbase/gocb/v2 v2.8.1/go.mod h1:xI7kkiz4IhdrhBAAEcKC6R2oqVXxpMIV/ZkmxB+PWgM= -github.com/couchbase/gocbcore/v10 v10.4.0 h1:ItBAQdxl5I9CBkt/XqlRB/Ni4Ej2k2OK1ClB2HHipVE= -github.com/couchbase/gocbcore/v10 v10.4.0/go.mod h1:lYQIIk+tzoMcwtwU5GzPbDdqEkwkH3isI2rkSpfL0oM= github.com/couchbase/gocbcore/v10 v10.4.1 h1:2vZjYRTbSCp1HEcL3iFQv+r4HwiI13VhdnbTku+E/+M= github.com/couchbase/gocbcore/v10 v10.4.1/go.mod h1:rulbgUK70EuyRUiLQ0LhQAfSI/Rl+jWws8tTbHzvB6M= github.com/couchbase/gocbcoreps v0.1.2 h1:wlGyyMnkWpCNOlTtfy8UG+8XZsFtqTJtPXz63+QKC58= github.com/couchbase/gocbcoreps v0.1.2/go.mod h1:33hSdOKnrUVaBqw4+RiqW+2JoD8ylkbvqm89Wg81uXk= github.com/couchbase/goprotostellar v1.0.2 h1:yoPbAL9sCtcyZ5e/DcU5PRMOEFaJrF9awXYu3VPfGls= github.com/couchbase/goprotostellar v1.0.2/go.mod h1:5/yqVnZlW2/NSbAWu1hPJCFBEwjxgpe0PFFOlRixnp4= -github.com/couchbaselabs/gocaves/client v0.0.0-20230307083111-cc3960c624b1/go.mod h1:AVekAZwIY2stsJOMWLAS/0uA/+qdp7pjO8EHnl61QkY= github.com/couchbaselabs/gocaves/client v0.0.0-20230404095311-05e3ba4f0259 h1:2TXy68EGEzIMHOx9UvczR5ApVecwCfQZ0LjkmwMI6g4= github.com/couchbaselabs/gocaves/client v0.0.0-20230404095311-05e3ba4f0259/go.mod h1:AVekAZwIY2stsJOMWLAS/0uA/+qdp7pjO8EHnl61QkY= github.com/couchbaselabs/gocbconnstr/v2 v2.0.0-20230515165046-68b522a21131 h1:2EAfFswAfgYn3a05DVcegiw6DgMgn1Mv5eGz6IHt1Cw= @@ -295,8 +274,6 @@ github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXY 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-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-ldap/ldap/v3 v3.4.7 h1:3Hbd7mIB1qjd3Ra59fI3JYea/t5kykFu2CVHBca9koE= -github.com/go-ldap/ldap/v3 v3.4.7/go.mod h1:qS3Sjlu76eHfHGpUdWkAXQTw4beih+cHsco2jXlIXrk= github.com/go-ldap/ldap/v3 v3.4.8 h1:loKJyspcRezt2Q3ZRMq2p/0v8iOurlmeXDPw6fikSvQ= github.com/go-ldap/ldap/v3 v3.4.8/go.mod h1:qS3Sjlu76eHfHGpUdWkAXQTw4beih+cHsco2jXlIXrk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -405,7 +382,6 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= @@ -566,8 +542,6 @@ github.com/mholt/archiver/v4 v4.0.0-alpha.8 h1:tRGQuDVPh66WCOelqe6LIGh0gwmfwxUrS github.com/mholt/archiver/v4 v4.0.0-alpha.8/go.mod h1:5f7FUYGXdJWUjESffJaYR4R60VhnHxb2X3T1teMyv5A= github.com/microcosm-cc/bluemonday v1.0.25 h1:4NEwSfiJ+Wva0VxN5B8OwMicaJvD8r9tlJWm9rtloEg= github.com/microcosm-cc/bluemonday v1.0.25/go.mod h1:ZIOjCQp1OrzBBPIJmfX4qDYFuhU02nx4bn030ixfHLE= -github.com/microsoft/go-mssqldb v1.7.0 h1:sgMPW0HA6Ihd37Yx0MzHyKD726C2kY/8KJsQtXHNaAs= -github.com/microsoft/go-mssqldb v1.7.0/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA= github.com/microsoft/go-mssqldb v1.7.1 h1:KU/g8aWeM3Hx7IMOFpiwYiUkU+9zeISb4+tx3ScVfsM= github.com/microsoft/go-mssqldb v1.7.1/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= @@ -744,8 +718,6 @@ github.com/wasilibs/nottinygc v0.4.0 h1:h1TJMihMC4neN6Zq+WKpLxgd9xCFMw7O9ETLwY2e github.com/wasilibs/nottinygc v0.4.0/go.mod h1:oDcIotskuYNMpqMF23l7Z8uzD4TC0WXHK8jetlB3HIo= github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0 h1:3UeQBvD0TFrlVjOeLOBz+CPAI8dnbqNSVwUwRrkp7vQ= github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0/go.mod h1:IXCdmsXIht47RaVFLEdVnh1t+pgYtTAhQGj73kz+2DM= -github.com/xanzy/go-gitlab v0.102.0 h1:ExHuJ1OTQ2yt25zBMMj0G96ChBirGYv8U7HyUiYkZ+4= -github.com/xanzy/go-gitlab v0.102.0/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= github.com/xanzy/go-gitlab v0.103.0 h1:J9pTQoq0GsEFqzd6srCM1QfdfKAxSNz6mT6ntrpNF2w= github.com/xanzy/go-gitlab v0.103.0/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= @@ -779,8 +751,6 @@ github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.einride.tech/aip v0.60.0 h1:h6bgabZ5BCfAptbGex8jbh3VvPBRLa6xq+pQ1CAjHYw= go.einride.tech/aip v0.60.0/go.mod h1:SdLbSbgSU60Xkb4TMkmsZEQPHeEWx0ikBoq5QnqZvdg= -go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= -go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.mongodb.org/mongo-driver v1.15.0 h1:rJCKC8eEliewXjZGf0ddURtl7tTVy1TK3bfl0gkUSLc= go.mongodb.org/mongo-driver v1.15.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -845,8 +815,6 @@ golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE 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-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 h1:ESSUROHIBHg7USnszlcdmjBEwdMj9VUvU+OPk4yl2mc= -golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2nTQVIEhZIptnrVb1XY= golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= @@ -1049,14 +1017,6 @@ google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb 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.172.0 h1:/1OcMZGPmW1rX2LCu2CmGUD1KXK1+pfzxotxyRUCCdk= -google.golang.org/api v0.172.0/go.mod h1:+fJZq6QXWfa9pXhnIzsjx4yI22d4aI9ZpLb58gvXjis= -google.golang.org/api v0.173.0 h1:fz6B7GWYWLS/HfruiTsRYVKQQApJ6vasTYWAK6+Qo8g= -google.golang.org/api v0.173.0/go.mod h1:ins7pTzjeBPQ3SdC/plzki6d/dQWwAWy8qVZ4Vgkzl8= -google.golang.org/api v0.174.0 h1:zB1BWl7ocxfTea2aQ9mgdzXjnfPySllpPOskdnO+q34= -google.golang.org/api v0.174.0/go.mod h1:aC7tB6j0HR1Nl0ni5ghpx6iLasmAX78Zkh/wgxAAjLg= -google.golang.org/api v0.175.0 h1:9bMDh10V9cBuU8N45Wlc3cKkItfqMRV0Fi8UscLEtbY= -google.golang.org/api v0.175.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8= google.golang.org/api v0.176.0 h1:dHj1/yv5Dm/eQTXiP9hNCRT3xzJHWXeNdRq29XbMxoE= google.golang.org/api v0.176.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -1079,16 +1039,10 @@ google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y= -google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c h1:kaI7oewGK5YnVwj+Y+EJBO/YN1ht8iTL9XkFHtVZLsc= google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa h1:RBgMaUMP+6soRkik4VoN8ojR2nex2TqZwjSSogic+eo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be h1:LG9vZxsWGOmUKieR8wPAUR3u3MpnYFQZROPIMaXh7/A= google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1101,10 +1055,6 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= -google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= -google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8= -google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= From bc3be22cf5b628e3f15a8e27ace8ce948fc95524 Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Mon, 22 Apr 2024 14:36:59 -0700 Subject: [PATCH 22/32] update go mod --- go.mod | 1 - 1 file changed, 1 deletion(-) diff --git a/go.mod b/go.mod index 98f5bb78a..c2fd7e7f2 100644 --- a/go.mod +++ b/go.mod @@ -103,7 +103,6 @@ require ( cloud.google.com/go v0.112.1 // indirect cloud.google.com/go/auth v0.2.2 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.1 // indirect - cloud.google.com/go/compute v1.24.0 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/iam v1.1.7 // indirect cloud.google.com/go/longrunning v0.5.5 // indirect From 14e44db2be953b0addc3adb3d04799fdf435dc3b Mon Sep 17 00:00:00 2001 From: Dustin Decker Date: Mon, 22 Apr 2024 18:18:04 -0400 Subject: [PATCH 23/32] Move detectors.IsKnownFalsePositive from the detectors and into the engine (#2643) * Remove detectors.IsKnownFalsePositive from detectors * Centralize false positive removal in engine * Don't apply fp filtering on custom regex to preserve previous behavior. * fix empty branch * update excludes * update filtering * Add result flag option and exclude some detectors --- main.go | 4 +- pkg/detectors/abbysale/abbysale.go | 5 -- pkg/detectors/abstract/abstract.go | 5 -- pkg/detectors/abuseipdb/abuseipdb.go | 5 -- pkg/detectors/accuweather/accuweather.go | 5 -- pkg/detectors/adafruitio/adafruitio.go | 5 -- pkg/detectors/adobeio/adobeio.go | 5 -- pkg/detectors/adzuna/adzuna.go | 5 -- pkg/detectors/aeroworkflow/aeroworkflow.go | 4 - pkg/detectors/agora/agora.go | 5 -- pkg/detectors/aha/aha.go | 5 -- .../airbrakeprojectkey/airbrakeprojectkey.go | 6 -- .../airbrakeuserkey/airbrakeuserkey.go | 5 -- pkg/detectors/airship/airship.go | 5 -- .../airtableapikey/airtableapikey.go | 4 - pkg/detectors/airvisual/airvisual.go | 5 -- pkg/detectors/aiven/aiven.go | 5 -- pkg/detectors/alchemy/alchemy.go | 5 -- pkg/detectors/alconost/alconost.go | 5 -- pkg/detectors/alegra/alegra.go | 8 +- pkg/detectors/aletheiaapi/aletheiaapi.go | 8 +- .../algoliaadminkey/algoliaadminkey.go | 5 -- pkg/detectors/alibaba/alibaba.go | 4 - pkg/detectors/alienvault/alienvault.go | 5 -- pkg/detectors/allsports/allsports.go | 8 +- pkg/detectors/amadeus/amadeus.go | 5 -- pkg/detectors/ambee/ambee.go | 5 -- .../amplitudeapikey/amplitudeapikey.go | 5 -- pkg/detectors/anthropic/anthropic.go | 3 - pkg/detectors/anypoint/anypoint.go | 5 -- pkg/detectors/apacta/apacta.go | 5 -- pkg/detectors/api2cart/api2cart.go | 5 -- pkg/detectors/apideck/apideck.go | 5 -- pkg/detectors/apiflash/apiflash.go | 5 -- pkg/detectors/apifonica/apifonica.go | 5 -- pkg/detectors/apify/apify.go | 5 -- pkg/detectors/apilayer/apilayer.go | 5 -- pkg/detectors/apimatic/apimatic.go | 5 -- pkg/detectors/apiscience/apiscience.go | 5 -- pkg/detectors/apitemplate/apitemplate.go | 5 -- pkg/detectors/apollo/apollo.go | 5 -- pkg/detectors/appcues/appcues.go | 5 -- pkg/detectors/appfollow/appfollow.go | 5 -- pkg/detectors/appointedd/appointedd.go | 4 - pkg/detectors/appoptics/appoptics.go | 5 -- pkg/detectors/appsynergy/appsynergy.go | 5 -- pkg/detectors/apptivo/apptivo.go | 5 -- pkg/detectors/artifactory/artifactory.go | 4 - pkg/detectors/artsy/artsy.go | 5 -- pkg/detectors/asanaoauth/asanaoauth.go | 5 -- .../asanapersonalaccesstoken.go | 5 -- pkg/detectors/assemblyai/assemblyai.go | 5 -- pkg/detectors/atera/atera.go | 5 -- pkg/detectors/audd/audd.go | 5 -- .../auth0managementapitoken.go | 4 - pkg/detectors/auth0oauth/auth0oauth.go | 7 +- pkg/detectors/autodesk/autodesk.go | 5 -- pkg/detectors/autoklose/autoklose.go | 5 -- pkg/detectors/autopilot/autopilot.go | 5 -- .../avazapersonalaccesstoken.go | 5 -- pkg/detectors/aviationstack/aviationstack.go | 5 -- pkg/detectors/aws/aws.go | 4 - pkg/detectors/awssessionkeys/awssessionkey.go | 7 +- pkg/detectors/axonaut/axonaut.go | 5 -- pkg/detectors/aylien/aylien.go | 5 -- pkg/detectors/ayrshare/ayrshare.go | 5 -- pkg/detectors/azure/azure.go | 9 --- pkg/detectors/azurebatch/azurebatch.go | 5 -- .../azurecontainerregistry.go | 4 - .../azuredevopspersonalaccesstoken.go | 5 -- .../azurefunctionkey/azurefunctionkey.go | 5 -- .../azuresearchadminkey.go | 5 -- .../azuresearchquerykey.go | 5 -- pkg/detectors/bannerbear/bannerbear.go | 5 -- pkg/detectors/baremetrics/baremetrics.go | 5 -- pkg/detectors/beamer/beamer.go | 5 -- pkg/detectors/beebole/beebole.go | 5 -- pkg/detectors/besnappy/besnappy.go | 5 -- pkg/detectors/besttime/besttime.go | 5 -- pkg/detectors/betterstack/betterstack.go | 5 -- pkg/detectors/billomat/billomat.go | 5 -- pkg/detectors/bitbar/bitbar.go | 5 -- .../bitcoinaverage/bitcoinaverage.go | 5 -- pkg/detectors/bitfinex/bitfinex.go | 4 - .../bitlyaccesstoken/bitlyaccesstoken.go | 5 -- pkg/detectors/bitmex/bitmex.go | 9 --- pkg/detectors/blazemeter/blazemeter.go | 5 -- pkg/detectors/blitapp/blitapp.go | 5 -- pkg/detectors/blocknative/blocknative.go | 5 -- pkg/detectors/blogger/blogger.go | 5 -- pkg/detectors/bombbomb/bombbomb.go | 5 -- pkg/detectors/boostnote/boostnote.go | 5 -- pkg/detectors/borgbase/borgbase.go | 5 -- .../braintreepayments/braintreepayments.go | 5 -- pkg/detectors/brandfetch/brandfetch.go | 5 -- pkg/detectors/browserstack/browserstack.go | 4 - pkg/detectors/browshot/browshot.go | 5 -- pkg/detectors/bscscan/bscscan.go | 5 -- pkg/detectors/buddyns/buddyns.go | 5 -- pkg/detectors/budibase/budibase.go | 5 -- pkg/detectors/bugherd/bugherd.go | 5 -- pkg/detectors/bugsnag/bugsnag.go | 5 -- pkg/detectors/buildkite/buildkite.go | 5 -- pkg/detectors/buildkitev2/buildkite.go | 5 -- pkg/detectors/bulbul/bulbul.go | 5 -- pkg/detectors/bulksms/bulksms.go | 5 -- pkg/detectors/buttercms/buttercms.go | 5 -- pkg/detectors/caflou/caflou.go | 5 -- pkg/detectors/calendarific/calendarific.go | 5 -- .../calendlyapikey/calendlyapikey.go | 5 -- pkg/detectors/calorieninja/calorieninja.go | 5 -- pkg/detectors/campayn/campayn.go | 5 -- pkg/detectors/cannyio/cannyio.go | 5 -- pkg/detectors/capsulecrm/capsulecrm.go | 5 -- pkg/detectors/captaindata/captaindata.go | 5 -- .../carboninterface/carboninterface.go | 5 -- pkg/detectors/cashboard/cashboard.go | 5 -- pkg/detectors/caspio/caspio.go | 5 -- pkg/detectors/censys/censys.go | 5 -- .../centralstationcrm/centralstationcrm.go | 5 -- pkg/detectors/cexio/cexio.go | 13 ---- pkg/detectors/chartmogul/chartmogul.go | 5 -- pkg/detectors/chatbot/chatbot.go | 5 -- pkg/detectors/chatfule/chatfule.go | 5 -- pkg/detectors/checio/checio.go | 5 -- pkg/detectors/checklyhq/checklyhq.go | 5 -- pkg/detectors/checkout/checkout.go | 5 -- pkg/detectors/checkvist/checkvist.go | 5 -- pkg/detectors/cicero/cicero.go | 5 -- pkg/detectors/circleci/circleci.go | 6 -- pkg/detectors/clarifai/clarifai.go | 4 - pkg/detectors/clearbit/clearbit.go | 5 -- pkg/detectors/clickhelp/clickhelp.go | 5 -- pkg/detectors/clicksendsms/clicksendsms.go | 5 -- .../clickuppersonaltoken.go | 5 -- pkg/detectors/cliengo/cliengo.go | 5 -- pkg/detectors/clinchpad/clinchpad.go | 5 -- pkg/detectors/clockify/clockify.go | 5 -- pkg/detectors/clockworksms/clockworksms.go | 5 -- pkg/detectors/closecrm/close.go | 5 -- pkg/detectors/cloudconvert/cloudconvert.go | 5 -- pkg/detectors/cloudelements/cloudelements.go | 5 -- .../cloudflareapitoken/cloudflareapitoken.go | 4 - .../cloudflarecakey/cloudflarecakey.go | 8 +- .../cloudflareglobalapikey.go | 7 +- pkg/detectors/cloudimage/cloudimage.go | 5 -- pkg/detectors/cloudmersive/cloudmersive.go | 5 -- pkg/detectors/cloudplan/cloudplan.go | 5 -- pkg/detectors/cloudsmith/cloudsmith.go | 7 +- pkg/detectors/cloverly/cloverly.go | 5 -- pkg/detectors/cloze/cloze.go | 6 -- pkg/detectors/clustdoc/clustdoc.go | 5 -- pkg/detectors/coda/coda.go | 5 -- pkg/detectors/codacy/codacy.go | 5 -- pkg/detectors/codeclimate/codeclimate.go | 5 -- pkg/detectors/codemagic/codemagic.go | 5 -- pkg/detectors/codequiry/codequiry.go | 5 -- pkg/detectors/coinapi/coinapi.go | 5 -- pkg/detectors/coinbase/coinbase.go | 5 -- pkg/detectors/coinlayer/coinlayer.go | 5 -- pkg/detectors/coinlib/coinlib.go | 5 -- pkg/detectors/collect2/collect2.go | 5 -- pkg/detectors/column/column.go | 4 - pkg/detectors/commercejs/commercejs.go | 5 -- pkg/detectors/commodities/commodities.go | 5 -- pkg/detectors/companyhub/companyhub.go | 5 -- pkg/detectors/confluent/confluent.go | 5 -- .../contentfulpersonalaccesstoken.go | 4 - .../conversiontools/conversiontools.go | 5 -- pkg/detectors/convertapi/convertapi.go | 5 -- pkg/detectors/convertkit/convertkit.go | 5 -- pkg/detectors/convier/convier.go | 5 -- pkg/detectors/copper/copper.go | 5 -- pkg/detectors/couchbase/couchbase.go | 5 -- pkg/detectors/countrylayer/countrylayer.go | 5 -- pkg/detectors/coveralls/coveralls.go | 5 -- pkg/detectors/craftmypdf/craftmypdf.go | 5 -- pkg/detectors/crowdin/crowdin.go | 5 -- pkg/detectors/cryptocompare/cryptocompare.go | 5 -- pkg/detectors/currencycloud/currencycloud.go | 4 - .../currencyfreaks/currencyfreaks.go | 5 -- pkg/detectors/currencylayer/currencylayer.go | 5 -- pkg/detectors/currencyscoop/currencyscoop.go | 5 -- pkg/detectors/currentsapi/currentsapi.go | 5 -- pkg/detectors/customerguru/customerguru.go | 5 -- pkg/detectors/customerio/customerio.go | 5 -- pkg/detectors/d7network/d7network.go | 5 -- pkg/detectors/dailyco/dailyco.go | 5 -- pkg/detectors/dandelion/dandelion.go | 5 -- pkg/detectors/dareboost/dareboost.go | 5 -- pkg/detectors/databox/databox.go | 5 -- .../databrickstoken/databrickstoken.go | 3 - pkg/detectors/datadogtoken/datadogtoken.go | 10 --- pkg/detectors/datagov/datagov.go | 5 -- pkg/detectors/debounce/debounce.go | 5 -- pkg/detectors/deepai/deepai.go | 5 -- pkg/detectors/deepgram/deepgram.go | 5 -- pkg/detectors/delighted/delighted.go | 5 -- pkg/detectors/demio/demio.go | 5 -- pkg/detectors/deno/denodeploy.go | 5 -- pkg/detectors/deputy/deputy.go | 5 -- pkg/detectors/detectify/detectify.go | 5 -- .../detectlanguage/detectlanguage.go | 5 -- pkg/detectors/dfuse/dfuse.go | 5 -- pkg/detectors/diffbot/diffbot.go | 5 -- pkg/detectors/diggernaut/diggernaut.go | 5 -- .../digitaloceantoken/digitaloceantoken.go | 4 - .../digitaloceanv2/digitaloceanv2.go | 10 --- .../discordbottoken/discordbottoken.go | 5 -- pkg/detectors/disqus/disqus.go | 5 -- pkg/detectors/ditto/ditto.go | 5 -- pkg/detectors/dnscheck/dnscheck.go | 5 -- pkg/detectors/docparser/docparser.go | 5 -- pkg/detectors/documo/documo.go | 5 -- pkg/detectors/docusign/docusign.go | 5 -- pkg/detectors/doppler/doppler.go | 5 -- pkg/detectors/dotmailer/dotmailer.go | 9 +-- pkg/detectors/dovico/dovico.go | 5 -- pkg/detectors/dronahq/dronahq.go | 5 -- pkg/detectors/droneci/droneci.go | 5 -- pkg/detectors/dropbox/dropbox.go | 4 - pkg/detectors/duply/duply.go | 5 -- pkg/detectors/dwolla/dwolla.go | 5 -- pkg/detectors/dynalist/dynalist.go | 5 -- pkg/detectors/dyspatch/dyspatch.go | 5 -- .../eagleeyenetworks/eagleeyenetworks.go | 5 -- pkg/detectors/easyinsight/easyinsight.go | 5 -- pkg/detectors/ecostruxureit/ecostruxureit.go | 5 -- pkg/detectors/edamam/edamam.go | 5 -- pkg/detectors/edenai/edenai.go | 5 -- pkg/detectors/eightxeight/eightxeight.go | 5 -- pkg/detectors/elasticemail/elasticemail.go | 4 - pkg/detectors/enablex/enablex.go | 5 -- pkg/detectors/enigma/enigma.go | 5 -- pkg/detectors/envoyapikey/envoyapikey.go | 5 -- pkg/detectors/etherscan/etherscan.go | 7 +- pkg/detectors/ethplorer/ethplorer.go | 5 -- pkg/detectors/eventbrite/eventbrite.go | 5 -- pkg/detectors/everhour/everhour.go | 5 -- .../exchangerateapi/exchangerateapi.go | 5 -- .../exchangeratesapi/exchangeratesapi.go | 5 -- pkg/detectors/exportsdk/exportsdk.go | 5 -- pkg/detectors/extractorapi/extractorapi.go | 5 -- pkg/detectors/facebookoauth/facebookoauth.go | 4 - pkg/detectors/faceplusplus/faceplusplus.go | 7 +- pkg/detectors/falsepositives.go | 58 ++++++++++++-- pkg/detectors/fastforex/fastforex.go | 5 -- .../fastlypersonaltoken.go | 4 - pkg/detectors/feedier/feedier.go | 5 -- pkg/detectors/fetchrss/fetchrss.go | 5 -- pkg/detectors/fibery/fibery.go | 5 -- .../v1/figmapersonalaccesstoken.go | 3 - .../v2/figmapersonalaccesstoken_v2.go | 3 - pkg/detectors/fileio/fileio.go | 5 -- pkg/detectors/finage/finage.go | 5 -- .../financialmodelingprep.go | 5 -- pkg/detectors/findl/findl.go | 5 -- pkg/detectors/finnhub/finnhub.go | 5 -- pkg/detectors/fixerio/fixerio.go | 4 - pkg/detectors/flatio/flatio.go | 5 -- pkg/detectors/fleetbase/fleetbase.go | 5 -- pkg/detectors/flickr/flickr.go | 5 -- pkg/detectors/flightapi/flightapi.go | 5 -- pkg/detectors/flightlabs/flightlabs.go | 5 -- pkg/detectors/flightstats/flightstats.go | 5 -- pkg/detectors/float/float.go | 5 -- pkg/detectors/flowflu/flowflu.go | 5 -- pkg/detectors/flutterwave/flutterwave.go | 5 -- pkg/detectors/fmfw/fmfw.go | 5 -- pkg/detectors/formbucket/formbucket.go | 5 -- pkg/detectors/formcraft/formcraft.go | 5 -- pkg/detectors/formio/formio.go | 5 -- pkg/detectors/formsite/formsite.go | 5 -- pkg/detectors/foursquare/foursquare.go | 5 -- pkg/detectors/frameio/frameio.go | 5 -- pkg/detectors/freshbooks/freshbooks.go | 5 -- pkg/detectors/freshdesk/freshdesk.go | 5 -- pkg/detectors/front/front.go | 5 -- pkg/detectors/ftp/ftp.go | 3 +- pkg/detectors/fulcrum/fulcrum.go | 5 -- pkg/detectors/fullstory/v1/fullstory.go | 5 -- pkg/detectors/fullstory/v2/fullstory_v2.go | 5 -- pkg/detectors/fxmarket/fxmarket.go | 5 -- pkg/detectors/geckoboard/geckoboard.go | 5 -- pkg/detectors/gemini/gemini.go | 4 - pkg/detectors/generic/generic.go | 23 +----- pkg/detectors/gengo/gengo.go | 9 --- pkg/detectors/geoapify/geoapify.go | 5 -- pkg/detectors/geocode/geocode.go | 5 -- pkg/detectors/geocodify/geocodify.go | 5 -- pkg/detectors/geocodio/geocodio.go | 5 -- pkg/detectors/geoipifi/geoipifi.go | 5 -- pkg/detectors/getemail/getemail.go | 5 -- pkg/detectors/getemails/getemails.go | 5 -- pkg/detectors/getgeoapi/getgeoapi.go | 5 -- pkg/detectors/getgist/getgist.go | 5 -- pkg/detectors/getresponse/getresponse.go | 5 -- pkg/detectors/getsandbox/getsandbox.go | 5 -- pkg/detectors/github/v1/github_old.go | 4 - pkg/detectors/github_oauth2/github_oauth2.go | 4 - pkg/detectors/githubapp/githubapp.go | 2 - pkg/detectors/gitlab/v1/gitlab.go | 4 - pkg/detectors/gitlab/v2/gitlab_v2.go | 4 - pkg/detectors/gitter/gitter.go | 5 -- pkg/detectors/glassnode/glassnode.go | 5 -- pkg/detectors/gocanvas/gocanvas.go | 5 -- pkg/detectors/gocardless/gocardless.go | 5 -- pkg/detectors/goodday/goodday.go | 5 -- .../googleoauth2/googleoauth2_access_token.go | 5 -- pkg/detectors/grafana/grafana.go | 5 -- .../grafanaserviceaccount.go | 5 -- pkg/detectors/graphcms/graphcms.go | 6 -- pkg/detectors/graphhopper/graphhopper.go | 5 -- pkg/detectors/groovehq/groovehq.go | 5 -- pkg/detectors/gtmetrix/gtmetrix.go | 5 -- pkg/detectors/guardianapi/guardianapi.go | 5 -- pkg/detectors/gumroad/gumroad.go | 5 -- pkg/detectors/guru/guru.go | 5 -- pkg/detectors/gyazo/gyazo.go | 5 -- pkg/detectors/happyscribe/happyscribe.go | 5 -- pkg/detectors/harvest/harvest.go | 5 -- pkg/detectors/hellosign/hellosign.go | 5 -- pkg/detectors/helpcrunch/helpcrunch.go | 5 -- pkg/detectors/helpscout/helpscout.go | 5 -- pkg/detectors/hereapi/hereapi.go | 5 -- pkg/detectors/heroku/heroku.go | 5 -- pkg/detectors/hive/hive.go | 5 -- pkg/detectors/hiveage/hiveage.go | 5 -- pkg/detectors/holidayapi/holidayapi.go | 7 +- pkg/detectors/holistic/holistic.go | 5 -- pkg/detectors/honeycomb/honeycomb.go | 5 -- pkg/detectors/host/host.go | 5 -- pkg/detectors/html2pdf/html2pdf.go | 5 -- pkg/detectors/hubspotapikey/hubspotapikey.go | 4 - pkg/detectors/huggingface/huggingface.go | 5 -- pkg/detectors/humanity/humanity.go | 5 -- pkg/detectors/hunter/hunter.go | 6 -- pkg/detectors/hybiscus/hybiscus.go | 5 -- pkg/detectors/hypertrack/hypertrack.go | 9 --- .../ibmclouduserkey/ibmclouduserkey.go | 6 -- pkg/detectors/iconfinder/iconfinder.go | 5 -- pkg/detectors/iexapis/iexapis.go | 5 -- pkg/detectors/iexcloud/iexcloud.go | 5 -- pkg/detectors/imagekit/imagekit.go | 5 -- pkg/detectors/imagga/imagga.go | 5 -- pkg/detectors/impala/impala.go | 5 -- pkg/detectors/infura/infura.go | 5 -- pkg/detectors/insightly/insightly.go | 5 -- pkg/detectors/instabot/instabot.go | 5 -- pkg/detectors/instamojo/instamojo.go | 4 - pkg/detectors/integromat/integromat.go | 5 -- pkg/detectors/intercom/intercom.go | 5 -- pkg/detectors/intrinio/intrinio.go | 5 -- pkg/detectors/invoiceocean/invoiceocean.go | 5 -- pkg/detectors/ip2location/ip2location.go | 3 - pkg/detectors/ipapi/ipapi.go | 5 -- pkg/detectors/ipgeolocation/ipgeolocation.go | 5 -- pkg/detectors/ipinfo/ipinfo.go | 5 -- pkg/detectors/ipinfodb/ipinfodb.go | 5 -- pkg/detectors/ipquality/ipquality.go | 5 -- pkg/detectors/ipstack/ipstack.go | 4 - pkg/detectors/jdbc/jdbc.go | 4 +- pkg/detectors/jiratoken/v1/jiratoken.go | 4 - pkg/detectors/jiratoken/v2/jiratoken_v2.go | 4 - pkg/detectors/jotform/jotform.go | 5 -- pkg/detectors/jumpcloud/jumpcloud.go | 5 -- pkg/detectors/juro/juro.go | 5 -- pkg/detectors/kanban/kanban.go | 5 -- pkg/detectors/kanbantool/kanbantool.go | 5 -- pkg/detectors/karmacrm/karmacrm.go | 5 -- pkg/detectors/keenio/keenio.go | 5 -- pkg/detectors/klaviyo/klaviyo.go | 5 -- pkg/detectors/klipfolio/klipfolio.go | 5 -- pkg/detectors/knapsackpro/knapsackpro.go | 5 -- pkg/detectors/kontent/kontent.go | 5 -- pkg/detectors/kraken/kraken.go | 5 -- pkg/detectors/kucoin/kucoin.go | 9 --- pkg/detectors/kylas/kylas.go | 5 -- pkg/detectors/languagelayer/languagelayer.go | 5 -- pkg/detectors/launchdarkly/launchdarkly.go | 5 -- pkg/detectors/leadfeeder/leadfeeder.go | 5 -- pkg/detectors/lemlist/lemlist.go | 5 -- pkg/detectors/lemonsqueezy/lemonsqueezy.go | 5 -- .../lessannoyingcrm/lessannoyingcrm.go | 5 -- pkg/detectors/lexigram/lexigram.go | 5 -- pkg/detectors/linearapi/linearapi.go | 5 -- pkg/detectors/linemessaging/linemessaging.go | 5 -- pkg/detectors/linenotify/linenotify.go | 5 -- pkg/detectors/linkpreview/linkpreview.go | 5 -- pkg/detectors/liveagent/liveagent.go | 5 -- pkg/detectors/livestorm/livestorm.go | 5 -- pkg/detectors/loadmill/loadmill.go | 5 -- pkg/detectors/lob/lob.go | 5 -- pkg/detectors/locationiq/locationiq.go | 5 -- pkg/detectors/loggly/loggly.go | 5 -- pkg/detectors/loginradius/loginradius.go | 5 -- pkg/detectors/logzio/logzio.go | 5 -- pkg/detectors/lokalisetoken/lokalisetoken.go | 5 -- pkg/detectors/loyverse/loyverse.go | 5 -- pkg/detectors/lunchmoney/lunchmoney.go | 5 -- pkg/detectors/luno/luno.go | 5 -- pkg/detectors/m3o/m3o.go | 5 -- pkg/detectors/madkudu/madkudu.go | 5 -- pkg/detectors/magicbell/magicbell.go | 9 --- pkg/detectors/magnetic/magnetic.go | 6 -- pkg/detectors/mailboxlayer/mailboxlayer.go | 7 +- pkg/detectors/mailchimp/mailchimp.go | 5 -- pkg/detectors/mailerlite/mailerlite.go | 5 -- pkg/detectors/mailgun/mailgun.go | 4 - .../mailjetbasicauth/mailjetbasicauth.go | 4 - pkg/detectors/mailjetsms/mailjetsms.go | 5 -- pkg/detectors/mailmodo/mailmodo.go | 5 -- pkg/detectors/mailsac/mailsac.go | 5 -- pkg/detectors/mandrill/mandrill.go | 5 -- pkg/detectors/manifest/manifest.go | 5 -- pkg/detectors/mapbox/mapbox.go | 5 -- pkg/detectors/mapquest/mapquest.go | 5 -- pkg/detectors/marketstack/marketstack.go | 5 -- .../mattermostpersonaltoken.go | 5 -- pkg/detectors/mavenlink/mavenlink.go | 5 -- .../maxmindlicense/v1/maxmindlicense.go | 4 - pkg/detectors/meaningcloud/meaningcloud.go | 5 -- pkg/detectors/mediastack/mediastack.go | 5 -- pkg/detectors/meistertask/meistertask.go | 5 -- pkg/detectors/mesibo/mesibo.go | 5 -- pkg/detectors/messagebird/messagebird.go | 4 - pkg/detectors/metaapi/metaapi.go | 5 -- pkg/detectors/metabase/metabase.go | 5 -- pkg/detectors/metrilo/metrilo.go | 5 -- .../microsoftteamswebhook.go | 4 - pkg/detectors/mindmeister/mindmeister.go | 7 +- pkg/detectors/miro/miro.go | 5 -- pkg/detectors/mite/mite.go | 5 -- pkg/detectors/mixmax/mixmax.go | 5 -- pkg/detectors/mixpanel/mixpanel.go | 5 -- pkg/detectors/mockaroo/mockaroo.go | 7 +- pkg/detectors/moderation/moderation.go | 5 -- pkg/detectors/monday/monday.go | 5 -- pkg/detectors/monkeylearn/monkeylearn.go | 5 -- pkg/detectors/moonclerk/moonclerk.go | 5 -- pkg/detectors/moosend/moosend.go | 5 -- pkg/detectors/moralis/moralis.go | 5 -- pkg/detectors/mrticktock/mrticktock.go | 5 -- pkg/detectors/mux/mux.go | 5 -- pkg/detectors/myfreshworks/myfreshworks.go | 4 - pkg/detectors/myintervals/myintervals.go | 5 -- .../nasdaqdatalink/nasdaqdatalink.go | 5 -- pkg/detectors/nethunt/nethunt.go | 5 -- pkg/detectors/netlify/netlify.go | 4 - pkg/detectors/neutrinoapi/neutrinoapi.go | 5 -- .../newrelicpersonalapikey.go | 10 --- pkg/detectors/newsapi/newsapi.go | 5 -- pkg/detectors/newscatcher/newscatcher.go | 5 -- pkg/detectors/nexmoapikey/nexmoapikey.go | 5 -- pkg/detectors/nftport/nftport.go | 5 -- pkg/detectors/ngc/ngc.go | 5 -- pkg/detectors/ngrok/ngrok.go | 5 -- pkg/detectors/nicereply/nicereply.go | 5 -- pkg/detectors/nightfall/nightfall.go | 5 -- pkg/detectors/nimble/nimble.go | 5 -- pkg/detectors/noticeable/noticeable.go | 5 -- pkg/detectors/notion/notion.go | 11 +-- pkg/detectors/nozbeteams/nozbeteams.go | 5 -- pkg/detectors/npmtoken/npmtoken.go | 5 -- pkg/detectors/npmtokenv2/npmtokenv2.go | 5 -- pkg/detectors/nugetapikey/nugetapikey.go | 5 -- pkg/detectors/numverify/numverify.go | 5 -- pkg/detectors/nutritionix/nutritionix.go | 5 -- pkg/detectors/nylas/nylas.go | 5 -- pkg/detectors/oanda/oanda.go | 5 -- pkg/detectors/okta/okta.go | 6 -- pkg/detectors/omnisend/omnisend.go | 5 -- pkg/detectors/onedesk/onedesk.go | 5 -- pkg/detectors/onelogin/onelogin.go | 4 - pkg/detectors/onepagecrm/onepagecrm.go | 5 -- pkg/detectors/onesignal/onesignal.go | 5 -- pkg/detectors/onwaterio/onwaterio.go | 5 -- pkg/detectors/oopspam/oopspam.go | 5 -- pkg/detectors/openai/openai.go | 4 - pkg/detectors/opencagedata/opencagedata.go | 5 -- pkg/detectors/openuv/openuv.go | 7 +- pkg/detectors/openvpn/openvpn.go | 5 +- pkg/detectors/openweather/openweather.go | 5 -- pkg/detectors/opsgenie/opsgenie.go | 75 ++++++++++--------- pkg/detectors/optimizely/optimizely.go | 5 -- pkg/detectors/overloop/overloop.go | 5 -- pkg/detectors/owlbot/owlbot.go | 5 -- pkg/detectors/packagecloud/packagecloud.go | 5 -- .../pagerdutyapikey/pagerdutyapikey.go | 3 - pkg/detectors/pandadoc/pandadoc.go | 5 -- pkg/detectors/paperform/paperform.go | 5 -- pkg/detectors/paralleldots/paralleldots.go | 5 -- pkg/detectors/parsehub/parsehub.go | 5 -- pkg/detectors/parsers/parsers.go | 5 -- pkg/detectors/parseur/parseur.go | 7 -- pkg/detectors/partnerstack/partnerstack.go | 5 -- pkg/detectors/pastebin/pastebin.go | 5 -- pkg/detectors/paydirtapp/paydirtapp.go | 5 -- pkg/detectors/paymoapp/paymoapp.go | 5 -- pkg/detectors/paymongo/paymongo.go | 5 -- pkg/detectors/paypaloauth/paypaloauth.go | 5 -- pkg/detectors/paystack/paystack.go | 4 - pkg/detectors/pdflayer/pdflayer.go | 5 -- pkg/detectors/pdfshift/pdfshift.go | 5 -- .../peopledatalabs/peopledatalabs.go | 5 -- pkg/detectors/pepipost/pepipost.go | 5 -- pkg/detectors/percy/percy.go | 5 -- pkg/detectors/pinata/pinata.go | 5 -- pkg/detectors/pipedream/pipedream.go | 5 -- pkg/detectors/pipedrive/pipedrive.go | 5 -- .../pivotaltracker/pivotaltracker.go | 4 - pkg/detectors/pixabay/pixabay.go | 5 -- pkg/detectors/plaidkey/plaidkey.go | 5 -- .../planviewleankit/planviewleankit.go | 5 -- pkg/detectors/planyo/planyo.go | 5 -- pkg/detectors/plivo/plivo.go | 4 - pkg/detectors/podio/podio.go | 5 -- pkg/detectors/pollsapi/pollsapi.go | 5 -- pkg/detectors/poloniex/poloniex.go | 9 --- pkg/detectors/polygon/polygon.go | 5 -- pkg/detectors/portainer/portainer.go | 4 +- .../portainertoken/portainertoken.go | 4 - pkg/detectors/positionstack/positionstack.go | 5 -- pkg/detectors/postageapp/postageapp.go | 5 -- pkg/detectors/postbacks/postbacks.go | 5 -- pkg/detectors/postgres/postgres.go | 3 - pkg/detectors/posthog/posthog.go | 9 --- pkg/detectors/postman/postman.go | 3 - pkg/detectors/postmark/postmark.go | 4 - pkg/detectors/powrbot/powrbot.go | 5 -- pkg/detectors/prefect/prefect.go | 5 -- pkg/detectors/privacy/privacy.go | 5 -- pkg/detectors/prodpad/prodpad.go | 5 -- pkg/detectors/prospectcrm/prospectcrm.go | 5 -- pkg/detectors/protocolsio/protocolsio.go | 5 -- pkg/detectors/proxycrawl/proxycrawl.go | 5 -- .../pubnubpublishkey/pubnubpublishkey.go | 5 -- .../pubnubsubscriptionkey.go | 5 -- pkg/detectors/pulumi/pulumi.go | 5 -- pkg/detectors/purestake/purestake.go | 5 -- .../pushbulletapikey/pushbulletapikey.go | 5 -- .../pusherchannelkey/pusherchannelkey.go | 5 -- pkg/detectors/qase/qase.go | 5 -- pkg/detectors/qualaroo/qualaroo.go | 5 -- pkg/detectors/qubole/qubole.go | 5 -- pkg/detectors/rabbitmq/rabbitmq.go | 4 - pkg/detectors/ramp/ramp.go | 5 -- pkg/detectors/rapidapi/rapidapi.go | 4 - pkg/detectors/raven/raven.go | 5 -- pkg/detectors/rawg/rawg.go | 5 -- pkg/detectors/razorpay/razorpay.go | 4 - pkg/detectors/reachmail/reachmail.go | 5 -- pkg/detectors/readme/readme.go | 5 -- .../reallysimplesystems.go | 5 -- pkg/detectors/rebrandly/rebrandly.go | 5 -- .../rechargepayments/rechargepayments.go | 4 - pkg/detectors/redis/redis.go | 8 -- pkg/detectors/refiner/refiner.go | 5 -- pkg/detectors/rentman/rentman.go | 5 -- pkg/detectors/repairshopr/repairshopr.go | 5 -- pkg/detectors/replicate/replicate.go | 5 -- pkg/detectors/replyio/replyio.go | 5 -- .../requestfinance/requestfinance.go | 5 -- pkg/detectors/restpack/restpack.go | 5 -- .../restpackhtmltopdfapi.go | 5 -- .../restpackscreenshotapi.go | 5 -- pkg/detectors/rev/rev.go | 9 --- pkg/detectors/revampcrm/revampcrm.go | 5 -- pkg/detectors/ringcentral/ringcentral.go | 5 -- pkg/detectors/ritekit/ritekit.go | 5 -- pkg/detectors/roaring/roaring.go | 5 -- pkg/detectors/rocketreach/rocketreach.go | 5 -- pkg/detectors/rockset/rockset.go | 5 -- pkg/detectors/roninapp/roninapp.go | 5 -- pkg/detectors/route4me/route4me.go | 5 -- pkg/detectors/rownd/rownd.go | 5 -- pkg/detectors/rubygems/rubygems.go | 5 -- pkg/detectors/runrunit/runrunit.go | 9 --- pkg/detectors/salesblink/salesblink.go | 5 -- pkg/detectors/salescookie/salescookie.go | 5 -- pkg/detectors/salesflare/salesflare.go | 5 -- pkg/detectors/salesmate/salesmate.go | 5 -- .../satismeterprojectkey.go | 5 -- .../satismeterwritekey/satismeterwritekey.go | 5 -- pkg/detectors/saucelabs/saucelabs.go | 5 -- pkg/detectors/scalewaykey/scalewaykey.go | 5 -- pkg/detectors/scalr/scalr.go | 5 -- pkg/detectors/scrapeowl/scrapeowl.go | 5 -- pkg/detectors/scraperapi/scraperapi.go | 5 -- pkg/detectors/scraperbox/scraperbox.go | 5 -- pkg/detectors/scrapestack/scrapestack.go | 5 -- pkg/detectors/scrapfly/scrapfly.go | 5 -- pkg/detectors/scrapingant/scrapingant.go | 5 -- pkg/detectors/scrapingbee/scrapingbee.go | 5 -- pkg/detectors/screenshotapi/screenshotapi.go | 5 -- .../screenshotlayer/screenshotlayer.go | 5 -- pkg/detectors/scrutinizerci/scrutinizerci.go | 5 -- .../securitytrails/securitytrails.go | 5 -- pkg/detectors/segmentapikey/segmentapikey.go | 5 -- pkg/detectors/selectpdf/selectpdf.go | 5 -- pkg/detectors/semaphore/semaphore.go | 5 -- pkg/detectors/sendbird/sendbird.go | 4 - .../sendbirdorganizationapi.go | 4 - pkg/detectors/sendgrid/sendgrid.go | 4 - pkg/detectors/sendinbluev2/sendinbluev2.go | 4 - pkg/detectors/sentrytoken/sentrytoken.go | 3 - pkg/detectors/serphouse/serphouse.go | 5 -- pkg/detectors/serpstack/serpstack.go | 5 -- pkg/detectors/sheety/sheety.go | 5 -- pkg/detectors/sherpadesk/sherpadesk.go | 5 -- pkg/detectors/shipday/shipday.go | 5 -- pkg/detectors/shodankey/shodankey.go | 3 - pkg/detectors/shopify/shopify.go | 5 -- pkg/detectors/shortcut/shortcut.go | 7 -- pkg/detectors/shotstack/shotstack.go | 5 -- pkg/detectors/shutterstock/shutterstock.go | 9 --- .../shutterstockoauth/shutterstockoauth.go | 5 -- pkg/detectors/signable/signable.go | 5 -- pkg/detectors/signalwire/signalwire.go | 5 -- pkg/detectors/signaturit/signaturit.go | 5 -- pkg/detectors/signupgenius/signupgenius.go | 5 -- pkg/detectors/sigopt/sigopt.go | 5 -- pkg/detectors/simfin/simfin.go | 5 -- pkg/detectors/simplesat/simplesat.go | 5 -- pkg/detectors/simplynoted/simplynoted.go | 5 -- pkg/detectors/simvoly/simvoly.go | 5 -- pkg/detectors/sinchmessage/sinchmessage.go | 5 -- pkg/detectors/sirv/sirv.go | 5 -- pkg/detectors/siteleaf/siteleaf.go | 5 -- pkg/detectors/skrappio/skrappio.go | 5 -- pkg/detectors/skybiometry/skybiometry.go | 9 --- pkg/detectors/slack/slack.go | 4 - pkg/detectors/smartsheets/smartsheets.go | 5 -- pkg/detectors/smartystreets/smartystreets.go | 5 -- pkg/detectors/smooch/smooch.go | 5 -- pkg/detectors/snipcart/snipcart.go | 5 -- pkg/detectors/snowflake/snowflake.go | 5 -- pkg/detectors/snykkey/snykkey.go | 4 - pkg/detectors/sonarcloud/sonarcloud.go | 5 -- pkg/detectors/sourcegraph/sourcegraph.go | 5 -- .../sourcegraphcody/sourcegraphcody.go | 5 -- pkg/detectors/sparkpost/sparkpost.go | 5 -- pkg/detectors/speechtextai/speechtextai.go | 5 -- .../splunkobservabilitytoken.go | 7 +- pkg/detectors/spoonacular/spoonacular.go | 5 -- pkg/detectors/sportsmonk/sportsmonk.go | 5 -- pkg/detectors/square/square.go | 4 - pkg/detectors/squareapp/squareapp.go | 12 +-- pkg/detectors/squarespace/squarespace.go | 5 -- pkg/detectors/squareup/squareup.go | 5 -- pkg/detectors/sslmate/sslmate.go | 5 -- pkg/detectors/statuscake/statuscake.go | 5 -- pkg/detectors/statuspage/statuspage.go | 5 -- pkg/detectors/statuspal/statuspal.go | 5 -- pkg/detectors/stitchdata/stitchdata.go | 5 -- pkg/detectors/stockdata/stockdata.go | 5 -- pkg/detectors/storecove/storecove.go | 5 -- pkg/detectors/stormboard/stormboard.go | 5 -- pkg/detectors/stormglass/stormglass.go | 5 -- pkg/detectors/storyblok/storyblok.go | 5 -- pkg/detectors/storychief/storychief.go | 5 -- pkg/detectors/strava/strava.go | 5 -- pkg/detectors/streak/streak.go | 5 -- pkg/detectors/stripe/stripe.go | 4 - pkg/detectors/stripo/stripo.go | 5 -- pkg/detectors/stytch/stytch.go | 5 -- pkg/detectors/sugester/sugester.go | 5 -- pkg/detectors/sumologickey/sumologickey.go | 5 -- pkg/detectors/supabasetoken/supabasetoken.go | 5 -- pkg/detectors/supernotesapi/supernotesapi.go | 5 -- .../surveyanyplace/surveyanyplace.go | 5 -- pkg/detectors/surveybot/surveybot.go | 5 -- pkg/detectors/surveysparrow/surveysparrow.go | 5 -- pkg/detectors/survicate/survicate.go | 5 -- pkg/detectors/swell/swell.go | 5 -- pkg/detectors/swiftype/swiftype.go | 5 -- pkg/detectors/tailscale/tailscale.go | 5 -- pkg/detectors/tallyfy/tallyfy.go | 5 -- pkg/detectors/tatumio/tatumio.go | 5 -- pkg/detectors/taxjar/taxjar.go | 5 -- pkg/detectors/teamgate/teamgate.go | 5 -- pkg/detectors/teamworkcrm/teamworkcrm.go | 5 -- pkg/detectors/teamworkdesk/teamworkdesk.go | 5 -- .../teamworkspaces/teamworkspaces.go | 5 -- .../technicalanalysisapi.go | 5 -- pkg/detectors/tefter/tefter.go | 5 -- .../telegrambottoken/telegrambottoken.go | 4 - pkg/detectors/teletype/teletype.go | 5 -- pkg/detectors/telnyx/telnyx.go | 5 -- .../terraformcloudpersonaltoken.go | 4 - pkg/detectors/testingbot/testingbot.go | 5 -- pkg/detectors/textmagic/textmagic.go | 5 -- pkg/detectors/theoddsapi/theoddsapi.go | 5 -- pkg/detectors/thinkific/thinkific.go | 5 -- pkg/detectors/thousandeyes/thousandeyes.go | 5 -- pkg/detectors/ticketmaster/ticketmaster.go | 5 -- pkg/detectors/tickettailor/tickettailor.go | 5 -- pkg/detectors/tiingo/tiingo.go | 5 -- pkg/detectors/timecamp/timecamp.go | 5 -- pkg/detectors/timezoneapi/timezoneapi.go | 5 -- pkg/detectors/tly/tly.go | 5 -- pkg/detectors/tmetric/tmetric.go | 5 -- pkg/detectors/todoist/todoist.go | 5 -- pkg/detectors/toggltrack/toggltrack.go | 5 -- pkg/detectors/tokeet/tokeet.go | 5 -- pkg/detectors/tomorrowio/tomorrowio.go | 7 +- pkg/detectors/tomtom/tomtom.go | 5 -- pkg/detectors/tradier/tradier.go | 5 -- pkg/detectors/transferwise/transferwise.go | 5 -- pkg/detectors/travelpayouts/travelpayouts.go | 5 -- pkg/detectors/travisci/travisci.go | 4 - pkg/detectors/trelloapikey/trelloapikey.go | 4 - pkg/detectors/tru/tru.go | 5 -- .../trufflehogenterprise.go | 5 -- pkg/detectors/twelvedata/twelvedata.go | 4 - pkg/detectors/twilio/twilio.go | 4 - pkg/detectors/twist/twist.go | 7 +- pkg/detectors/twitch/twitch.go | 4 - pkg/detectors/tyntec/tyntec.go | 5 -- pkg/detectors/typeform/typeform.go | 5 -- pkg/detectors/typetalk/typetalk.go | 5 -- pkg/detectors/ubidots/ubidots.go | 5 -- pkg/detectors/uclassify/uclassify.go | 5 -- pkg/detectors/unifyid/unifyid.go | 5 -- pkg/detectors/unplugg/unplugg.go | 5 -- pkg/detectors/unsplash/unsplash.go | 5 -- pkg/detectors/upcdatabase/upcdatabase.go | 5 -- pkg/detectors/uplead/uplead.go | 5 -- pkg/detectors/uploadcare/uploadcare.go | 5 -- pkg/detectors/uptimerobot/uptimerobot.go | 5 -- pkg/detectors/upwave/upwave.go | 7 +- pkg/detectors/uri/uri.go | 4 - pkg/detectors/urlscan/urlscan.go | 5 -- pkg/detectors/user/user.go | 5 -- pkg/detectors/userflow/userflow.go | 5 -- pkg/detectors/userstack/userstack.go | 4 - .../vagrantcloudpersonaltoken.go | 5 -- pkg/detectors/vatlayer/vatlayer.go | 5 -- pkg/detectors/vbout/vbout.go | 7 +- pkg/detectors/vercel/vercel.go | 5 -- pkg/detectors/verifier/verifier.go | 5 -- pkg/detectors/verimail/verimail.go | 5 -- pkg/detectors/veriphone/veriphone.go | 5 -- pkg/detectors/versioneye/versioneye.go | 5 -- pkg/detectors/viewneo/viewneo.go | 5 -- pkg/detectors/virustotal/virustotal.go | 3 - .../visualcrossing/visualcrossing.go | 5 -- pkg/detectors/voicegain/voicegain.go | 5 -- pkg/detectors/voodoosms/voodoosms.go | 5 -- pkg/detectors/vouchery/vouchery.go | 5 -- pkg/detectors/vpnapi/vpnapi.go | 5 -- pkg/detectors/vultrapikey/vultrapikey.go | 5 -- pkg/detectors/vyte/vyte.go | 5 -- pkg/detectors/walkscore/walkscore.go | 5 -- pkg/detectors/weatherbit/weatherbit.go | 5 -- pkg/detectors/weatherstack/weatherstack.go | 5 -- pkg/detectors/web3storage/web3storage.go | 5 -- pkg/detectors/webex/webex.go | 4 - pkg/detectors/webflow/webflow.go | 5 -- pkg/detectors/webscraper/webscraper.go | 5 -- pkg/detectors/webscraping/webscraping.go | 5 -- pkg/detectors/websitepulse/websitepulse.go | 4 - pkg/detectors/wepay/wepay.go | 5 -- pkg/detectors/whoxy/whoxy.go | 5 -- pkg/detectors/wistia/wistia.go | 7 +- pkg/detectors/wit/wit.go | 7 +- pkg/detectors/worksnaps/worksnaps.go | 5 -- pkg/detectors/workstack/workstack.go | 5 -- .../worldcoinindex/worldcoinindex.go | 5 -- pkg/detectors/worldweather/worldweather.go | 5 -- pkg/detectors/wrike/wrike.go | 5 -- pkg/detectors/yandex/yandex.go | 5 -- pkg/detectors/yelp/yelp.go | 5 -- .../youneedabudget/youneedabudget.go | 5 -- pkg/detectors/yousign/yousign.go | 5 -- pkg/detectors/youtubeapikey/youtubeapikey.go | 5 -- pkg/detectors/zendeskapi/zendeskapi.go | 4 - pkg/detectors/zenkitapi/zenkitapi.go | 5 -- pkg/detectors/zenrows/zenrows.go | 5 -- pkg/detectors/zenscrape/zenscrape.go | 4 - pkg/detectors/zenserp/zenserp.go | 5 -- pkg/detectors/zeplin/zeplin.go | 5 -- pkg/detectors/zerobounce/zerobounce.go | 5 -- pkg/detectors/zerotier/zerotier.go | 5 -- pkg/detectors/zipapi/zipapi.go | 5 -- pkg/detectors/zipbooks/zipbooks.go | 5 -- pkg/detectors/zipcodeapi/zipcodeapi.go | 5 -- pkg/detectors/zipcodebase/zipcodebase.go | 5 -- pkg/detectors/zonkafeedback/zonkafeedback.go | 5 -- pkg/detectors/zulipchat/zulipchat.go | 3 - pkg/engine/engine.go | 8 +- pkg/engine/engine_test.go | 4 +- 792 files changed, 143 insertions(+), 4009 deletions(-) diff --git a/main.go b/main.go index d30a764a9..de91f4831 100644 --- a/main.go +++ b/main.go @@ -653,10 +653,10 @@ func parseResults(input *string) (map[string]struct{}, error) { ) for _, value := range values { switch value { - case "verified", "unknown", "unverified": + case "verified", "unknown", "unverified", "filtered_unverified": results[value] = struct{}{} default: - return nil, fmt.Errorf("invalid value '%s', valid values are 'verified,unknown,unverified'", value) + return nil, fmt.Errorf("invalid value '%s', valid values are 'verified,unknown,unverified,filtered_unverified'", value) } } return results, nil diff --git a/pkg/detectors/abbysale/abbysale.go b/pkg/detectors/abbysale/abbysale.go index 0bea49261..047c89d08 100644 --- a/pkg/detectors/abbysale/abbysale.go +++ b/pkg/detectors/abbysale/abbysale.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/abstract/abstract.go b/pkg/detectors/abstract/abstract.go index b88883a7b..d6db71a9f 100644 --- a/pkg/detectors/abstract/abstract.go +++ b/pkg/detectors/abstract/abstract.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/abuseipdb/abuseipdb.go b/pkg/detectors/abuseipdb/abuseipdb.go index 83febcd13..238f59530 100644 --- a/pkg/detectors/abuseipdb/abuseipdb.go +++ b/pkg/detectors/abuseipdb/abuseipdb.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/accuweather/accuweather.go b/pkg/detectors/accuweather/accuweather.go index e7ebadae6..7fdac2635 100644 --- a/pkg/detectors/accuweather/accuweather.go +++ b/pkg/detectors/accuweather/accuweather.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/adafruitio/adafruitio.go b/pkg/detectors/adafruitio/adafruitio.go index d38a579bc..612879b24 100644 --- a/pkg/detectors/adafruitio/adafruitio.go +++ b/pkg/detectors/adafruitio/adafruitio.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/adobeio/adobeio.go b/pkg/detectors/adobeio/adobeio.go index fae2111f7..1efe07cbb 100644 --- a/pkg/detectors/adobeio/adobeio.go +++ b/pkg/detectors/adobeio/adobeio.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/adzuna/adzuna.go b/pkg/detectors/adzuna/adzuna.go index eb13aad41..5fb06ba2d 100644 --- a/pkg/detectors/adzuna/adzuna.go +++ b/pkg/detectors/adzuna/adzuna.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/aeroworkflow/aeroworkflow.go b/pkg/detectors/aeroworkflow/aeroworkflow.go index 780a78265..80375b8df 100644 --- a/pkg/detectors/aeroworkflow/aeroworkflow.go +++ b/pkg/detectors/aeroworkflow/aeroworkflow.go @@ -75,10 +75,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/agora/agora.go b/pkg/detectors/agora/agora.go index ce1e101b8..fe7fb55c6 100644 --- a/pkg/detectors/agora/agora.go +++ b/pkg/detectors/agora/agora.go @@ -76,11 +76,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/aha/aha.go b/pkg/detectors/aha/aha.go index 41aa29c0e..9126386c9 100644 --- a/pkg/detectors/aha/aha.go +++ b/pkg/detectors/aha/aha.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/airbrakeprojectkey/airbrakeprojectkey.go b/pkg/detectors/airbrakeprojectkey/airbrakeprojectkey.go index 4fdd1bca7..1c98fd610 100644 --- a/pkg/detectors/airbrakeprojectkey/airbrakeprojectkey.go +++ b/pkg/detectors/airbrakeprojectkey/airbrakeprojectkey.go @@ -76,12 +76,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified { - if detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - } - results = append(results, s1) } diff --git a/pkg/detectors/airbrakeuserkey/airbrakeuserkey.go b/pkg/detectors/airbrakeuserkey/airbrakeuserkey.go index fc9b13f35..5f1a916d1 100644 --- a/pkg/detectors/airbrakeuserkey/airbrakeuserkey.go +++ b/pkg/detectors/airbrakeuserkey/airbrakeuserkey.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/airship/airship.go b/pkg/detectors/airship/airship.go index 70c32d54b..8479fe75c 100644 --- a/pkg/detectors/airship/airship.go +++ b/pkg/detectors/airship/airship.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/airtableapikey/airtableapikey.go b/pkg/detectors/airtableapikey/airtableapikey.go index 1eaaf2032..01ca34972 100644 --- a/pkg/detectors/airtableapikey/airtableapikey.go +++ b/pkg/detectors/airtableapikey/airtableapikey.go @@ -92,10 +92,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.Verified = true } } - } else { - if detectors.IsKnownFalsePositive(keyRes, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/airvisual/airvisual.go b/pkg/detectors/airvisual/airvisual.go index 72d09348f..ee2ac2978 100644 --- a/pkg/detectors/airvisual/airvisual.go +++ b/pkg/detectors/airvisual/airvisual.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/aiven/aiven.go b/pkg/detectors/aiven/aiven.go index 451ed8ad0..9f514c73b 100644 --- a/pkg/detectors/aiven/aiven.go +++ b/pkg/detectors/aiven/aiven.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/alchemy/alchemy.go b/pkg/detectors/alchemy/alchemy.go index eb8b12dda..be1e05826 100644 --- a/pkg/detectors/alchemy/alchemy.go +++ b/pkg/detectors/alchemy/alchemy.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, match) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(match, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/alconost/alconost.go b/pkg/detectors/alconost/alconost.go index 99699c9f0..1a7faf98d 100644 --- a/pkg/detectors/alconost/alconost.go +++ b/pkg/detectors/alconost/alconost.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/alegra/alegra.go b/pkg/detectors/alegra/alegra.go index 8ef7c0b9c..c23b5cb12 100644 --- a/pkg/detectors/alegra/alegra.go +++ b/pkg/detectors/alegra/alegra.go @@ -2,10 +2,11 @@ package alegra import ( "context" - regexp "github.com/wasilibs/go-re2" "net/http" "strings" + regexp "github.com/wasilibs/go-re2" + "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" @@ -67,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/aletheiaapi/aletheiaapi.go b/pkg/detectors/aletheiaapi/aletheiaapi.go index c22eee4c8..1c83a01f6 100644 --- a/pkg/detectors/aletheiaapi/aletheiaapi.go +++ b/pkg/detectors/aletheiaapi/aletheiaapi.go @@ -2,11 +2,12 @@ package aletheiaapi import ( "context" - regexp "github.com/wasilibs/go-re2" "net/http" "strings" "time" + regexp "github.com/wasilibs/go-re2" + "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" @@ -60,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/algoliaadminkey/algoliaadminkey.go b/pkg/detectors/algoliaadminkey/algoliaadminkey.go index 49c15b3e3..ee0739ac9 100644 --- a/pkg/detectors/algoliaadminkey/algoliaadminkey.go +++ b/pkg/detectors/algoliaadminkey/algoliaadminkey.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/alibaba/alibaba.go b/pkg/detectors/alibaba/alibaba.go index 26570c647..0a5f5a035 100644 --- a/pkg/detectors/alibaba/alibaba.go +++ b/pkg/detectors/alibaba/alibaba.go @@ -116,10 +116,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } } diff --git a/pkg/detectors/alienvault/alienvault.go b/pkg/detectors/alienvault/alienvault.go index 61a38ced5..15e281c07 100644 --- a/pkg/detectors/alienvault/alienvault.go +++ b/pkg/detectors/alienvault/alienvault.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/allsports/allsports.go b/pkg/detectors/allsports/allsports.go index 2fef074fb..e71ebdeaf 100644 --- a/pkg/detectors/allsports/allsports.go +++ b/pkg/detectors/allsports/allsports.go @@ -4,10 +4,10 @@ import ( "context" "io" "net/http" - // "log" - regexp "github.com/wasilibs/go-re2" "strings" + regexp "github.com/wasilibs/go-re2" + "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" @@ -64,10 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if strings.Contains(body, "success") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/amadeus/amadeus.go b/pkg/detectors/amadeus/amadeus.go index 561dba6fa..37893d126 100644 --- a/pkg/detectors/amadeus/amadeus.go +++ b/pkg/detectors/amadeus/amadeus.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if (res.StatusCode >= 200 && res.StatusCode < 300) && strings.Contains(body, "access_token") { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ambee/ambee.go b/pkg/detectors/ambee/ambee.go index 1441e6eb4..3f2d498df 100644 --- a/pkg/detectors/ambee/ambee.go +++ b/pkg/detectors/ambee/ambee.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/amplitudeapikey/amplitudeapikey.go b/pkg/detectors/amplitudeapikey/amplitudeapikey.go index 9cfcb725d..c48cbc107 100644 --- a/pkg/detectors/amplitudeapikey/amplitudeapikey.go +++ b/pkg/detectors/amplitudeapikey/amplitudeapikey.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/anthropic/anthropic.go b/pkg/detectors/anthropic/anthropic.go index 100f35e71..a68cd90be 100644 --- a/pkg/detectors/anthropic/anthropic.go +++ b/pkg/detectors/anthropic/anthropic.go @@ -61,9 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(err, resMatch) } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/anypoint/anypoint.go b/pkg/detectors/anypoint/anypoint.go index 826a15f5e..f001a7bfe 100644 --- a/pkg/detectors/anypoint/anypoint.go +++ b/pkg/detectors/anypoint/anypoint.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/apacta/apacta.go b/pkg/detectors/apacta/apacta.go index 7789c2044..9b43384f6 100644 --- a/pkg/detectors/apacta/apacta.go +++ b/pkg/detectors/apacta/apacta.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/api2cart/api2cart.go b/pkg/detectors/api2cart/api2cart.go index dd3080963..050614e03 100644 --- a/pkg/detectors/api2cart/api2cart.go +++ b/pkg/detectors/api2cart/api2cart.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if res.StatusCode >= 200 && res.StatusCode < 300 && result.ReturnCode == 0 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/apideck/apideck.go b/pkg/detectors/apideck/apideck.go index 03a6eb10f..68f037e3d 100644 --- a/pkg/detectors/apideck/apideck.go +++ b/pkg/detectors/apideck/apideck.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/apiflash/apiflash.go b/pkg/detectors/apiflash/apiflash.go index ed07a722a..9a6e1aee8 100644 --- a/pkg/detectors/apiflash/apiflash.go +++ b/pkg/detectors/apiflash/apiflash.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/apifonica/apifonica.go b/pkg/detectors/apifonica/apifonica.go index dbe1dcd55..bf770b3e3 100644 --- a/pkg/detectors/apifonica/apifonica.go +++ b/pkg/detectors/apifonica/apifonica.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/apify/apify.go b/pkg/detectors/apify/apify.go index d75b19800..f612c217b 100644 --- a/pkg/detectors/apify/apify.go +++ b/pkg/detectors/apify/apify.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/apilayer/apilayer.go b/pkg/detectors/apilayer/apilayer.go index 144510bb7..07d673db3 100644 --- a/pkg/detectors/apilayer/apilayer.go +++ b/pkg/detectors/apilayer/apilayer.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/apimatic/apimatic.go b/pkg/detectors/apimatic/apimatic.go index ca37f0e2a..0e843c80f 100644 --- a/pkg/detectors/apimatic/apimatic.go +++ b/pkg/detectors/apimatic/apimatic.go @@ -70,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(passPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/apiscience/apiscience.go b/pkg/detectors/apiscience/apiscience.go index c7308f8e5..a813b36c7 100644 --- a/pkg/detectors/apiscience/apiscience.go +++ b/pkg/detectors/apiscience/apiscience.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/apitemplate/apitemplate.go b/pkg/detectors/apitemplate/apitemplate.go index 554f2fffb..8cc24b064 100644 --- a/pkg/detectors/apitemplate/apitemplate.go +++ b/pkg/detectors/apitemplate/apitemplate.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/apollo/apollo.go b/pkg/detectors/apollo/apollo.go index 30ff0f0b1..6e8dedcc3 100644 --- a/pkg/detectors/apollo/apollo.go +++ b/pkg/detectors/apollo/apollo.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/appcues/appcues.go b/pkg/detectors/appcues/appcues.go index 687e1f0f5..7e66993f8 100644 --- a/pkg/detectors/appcues/appcues.go +++ b/pkg/detectors/appcues/appcues.go @@ -76,11 +76,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/appfollow/appfollow.go b/pkg/detectors/appfollow/appfollow.go index d0bf67166..37fc5a9ad 100644 --- a/pkg/detectors/appfollow/appfollow.go +++ b/pkg/detectors/appfollow/appfollow.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/appointedd/appointedd.go b/pkg/detectors/appointedd/appointedd.go index 6c6e3fe38..dedc59c93 100644 --- a/pkg/detectors/appointedd/appointedd.go +++ b/pkg/detectors/appointedd/appointedd.go @@ -63,10 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if strings.Contains(body, "total") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/appoptics/appoptics.go b/pkg/detectors/appoptics/appoptics.go index 3b623ffbf..aed6875e0 100644 --- a/pkg/detectors/appoptics/appoptics.go +++ b/pkg/detectors/appoptics/appoptics.go @@ -81,11 +81,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/appsynergy/appsynergy.go b/pkg/detectors/appsynergy/appsynergy.go index 210732e8a..4aaf50269 100644 --- a/pkg/detectors/appsynergy/appsynergy.go +++ b/pkg/detectors/appsynergy/appsynergy.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/apptivo/apptivo.go b/pkg/detectors/apptivo/apptivo.go index 5a4362c0b..2be5fe94d 100644 --- a/pkg/detectors/apptivo/apptivo.go +++ b/pkg/detectors/apptivo/apptivo.go @@ -76,11 +76,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/artifactory/artifactory.go b/pkg/detectors/artifactory/artifactory.go index accdc385e..8b5236446 100644 --- a/pkg/detectors/artifactory/artifactory.go +++ b/pkg/detectors/artifactory/artifactory.go @@ -74,10 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/artsy/artsy.go b/pkg/detectors/artsy/artsy.go index d99a8a5c6..77ab08fa2 100644 --- a/pkg/detectors/artsy/artsy.go +++ b/pkg/detectors/artsy/artsy.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/asanaoauth/asanaoauth.go b/pkg/detectors/asanaoauth/asanaoauth.go index f6bb6dd17..ee7df3d2d 100644 --- a/pkg/detectors/asanaoauth/asanaoauth.go +++ b/pkg/detectors/asanaoauth/asanaoauth.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/asanapersonalaccesstoken/asanapersonalaccesstoken.go b/pkg/detectors/asanapersonalaccesstoken/asanapersonalaccesstoken.go index 0f220fbff..3e7342d47 100644 --- a/pkg/detectors/asanapersonalaccesstoken/asanapersonalaccesstoken.go +++ b/pkg/detectors/asanapersonalaccesstoken/asanapersonalaccesstoken.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/assemblyai/assemblyai.go b/pkg/detectors/assemblyai/assemblyai.go index 56715eea1..4788823e5 100644 --- a/pkg/detectors/assemblyai/assemblyai.go +++ b/pkg/detectors/assemblyai/assemblyai.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/atera/atera.go b/pkg/detectors/atera/atera.go index defa75d0d..d7f8d6257 100644 --- a/pkg/detectors/atera/atera.go +++ b/pkg/detectors/atera/atera.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/audd/audd.go b/pkg/detectors/audd/audd.go index a73673d79..58ecc17a8 100644 --- a/pkg/detectors/audd/audd.go +++ b/pkg/detectors/audd/audd.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/auth0managementapitoken/auth0managementapitoken.go b/pkg/detectors/auth0managementapitoken/auth0managementapitoken.go index 657033025..e4081d292 100644 --- a/pkg/detectors/auth0managementapitoken/auth0managementapitoken.go +++ b/pkg/detectors/auth0managementapitoken/auth0managementapitoken.go @@ -76,10 +76,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(managementApiTokenRes, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/auth0oauth/auth0oauth.go b/pkg/detectors/auth0oauth/auth0oauth.go index 5694fb9f5..25ce7d035 100644 --- a/pkg/detectors/auth0oauth/auth0oauth.go +++ b/pkg/detectors/auth0oauth/auth0oauth.go @@ -100,12 +100,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if !strings.Contains(body, "access_denied") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(clientIdRes, detectors.DefaultFalsePositives, true) { - continue - } - } - + } } } diff --git a/pkg/detectors/autodesk/autodesk.go b/pkg/detectors/autodesk/autodesk.go index f40c75f23..1c8dbffea 100644 --- a/pkg/detectors/autodesk/autodesk.go +++ b/pkg/detectors/autodesk/autodesk.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/autoklose/autoklose.go b/pkg/detectors/autoklose/autoklose.go index cadbb030f..b538b7948 100644 --- a/pkg/detectors/autoklose/autoklose.go +++ b/pkg/detectors/autoklose/autoklose.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/autopilot/autopilot.go b/pkg/detectors/autopilot/autopilot.go index fca023681..cc9132786 100644 --- a/pkg/detectors/autopilot/autopilot.go +++ b/pkg/detectors/autopilot/autopilot.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/avazapersonalaccesstoken/avazapersonalaccesstoken.go b/pkg/detectors/avazapersonalaccesstoken/avazapersonalaccesstoken.go index 60a8d77ce..c5213a0bc 100644 --- a/pkg/detectors/avazapersonalaccesstoken/avazapersonalaccesstoken.go +++ b/pkg/detectors/avazapersonalaccesstoken/avazapersonalaccesstoken.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/aviationstack/aviationstack.go b/pkg/detectors/aviationstack/aviationstack.go index bf4aabbe4..ddefb6b3d 100644 --- a/pkg/detectors/aviationstack/aviationstack.go +++ b/pkg/detectors/aviationstack/aviationstack.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/aws/aws.go b/pkg/detectors/aws/aws.go index ee98ccfb3..110a06566 100644 --- a/pkg/detectors/aws/aws.go +++ b/pkg/detectors/aws/aws.go @@ -229,10 +229,6 @@ func (s scanner) FromData(ctx context.Context, verify bool, data []byte) (result } if !s1.Verified { - // Unverified results that contain common test words are probably not secrets - if detectors.IsKnownFalsePositive(resSecretMatch, detectors.DefaultFalsePositives, true) { - continue - } // Unverified results that look like hashes are probably not secrets if falsePositiveSecretCheck.MatchString(resSecretMatch) { continue diff --git a/pkg/detectors/awssessionkeys/awssessionkey.go b/pkg/detectors/awssessionkeys/awssessionkey.go index 8d68e548a..643626a25 100644 --- a/pkg/detectors/awssessionkeys/awssessionkey.go +++ b/pkg/detectors/awssessionkeys/awssessionkey.go @@ -7,11 +7,12 @@ import ( "encoding/hex" "encoding/json" "fmt" - regexp "github.com/wasilibs/go-re2" "net/http" "strings" "time" + regexp "github.com/wasilibs/go-re2" + "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" @@ -143,10 +144,6 @@ func (s scanner) FromData(ctx context.Context, verify bool, data []byte) (result } if !s1.Verified { - // Unverified results that contain common test words are probably not secrets - if detectors.IsKnownFalsePositive(resSecretMatch, detectors.DefaultFalsePositives, true) { - continue - } // Unverified results that look like hashes are probably not secrets if falsePositiveSecretCheck.MatchString(resSecretMatch) { continue diff --git a/pkg/detectors/axonaut/axonaut.go b/pkg/detectors/axonaut/axonaut.go index 4b6424eeb..03e14683b 100644 --- a/pkg/detectors/axonaut/axonaut.go +++ b/pkg/detectors/axonaut/axonaut.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/aylien/aylien.go b/pkg/detectors/aylien/aylien.go index af413b8d1..cfe20a098 100644 --- a/pkg/detectors/aylien/aylien.go +++ b/pkg/detectors/aylien/aylien.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ayrshare/ayrshare.go b/pkg/detectors/ayrshare/ayrshare.go index b5e2a2c8a..ca3be8864 100644 --- a/pkg/detectors/ayrshare/ayrshare.go +++ b/pkg/detectors/ayrshare/ayrshare.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/azure/azure.go b/pkg/detectors/azure/azure.go index c20a2f882..99ce2ddc3 100644 --- a/pkg/detectors/azure/azure.go +++ b/pkg/detectors/azure/azure.go @@ -74,15 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified { - if detectors.IsKnownFalsePositive(s.Redacted, detectors.DefaultFalsePositives, true) { - continue - } - if detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, true) { - continue - } - } - results = append(results, s) } } diff --git a/pkg/detectors/azurebatch/azurebatch.go b/pkg/detectors/azurebatch/azurebatch.go index 927052ae8..f04b907e3 100644 --- a/pkg/detectors/azurebatch/azurebatch.go +++ b/pkg/detectors/azurebatch/azurebatch.go @@ -95,11 +95,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(accountKey, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) if s1.Verified { break diff --git a/pkg/detectors/azurecontainerregistry/azurecontainerregistry.go b/pkg/detectors/azurecontainerregistry/azurecontainerregistry.go index 78ee6f66e..b0651ab92 100644 --- a/pkg/detectors/azurecontainerregistry/azurecontainerregistry.go +++ b/pkg/detectors/azurecontainerregistry/azurecontainerregistry.go @@ -84,10 +84,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(password, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) if s1.Verified { break diff --git a/pkg/detectors/azuredevopspersonalaccesstoken/azuredevopspersonalaccesstoken.go b/pkg/detectors/azuredevopspersonalaccesstoken/azuredevopspersonalaccesstoken.go index d6a3bb537..98e5bb98b 100644 --- a/pkg/detectors/azuredevopspersonalaccesstoken/azuredevopspersonalaccesstoken.go +++ b/pkg/detectors/azuredevopspersonalaccesstoken/azuredevopspersonalaccesstoken.go @@ -83,11 +83,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/azurefunctionkey/azurefunctionkey.go b/pkg/detectors/azurefunctionkey/azurefunctionkey.go index 1f6f23519..dad5015a1 100644 --- a/pkg/detectors/azurefunctionkey/azurefunctionkey.go +++ b/pkg/detectors/azurefunctionkey/azurefunctionkey.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/azuresearchadminkey/azuresearchadminkey.go b/pkg/detectors/azuresearchadminkey/azuresearchadminkey.go index d821ab844..6dd0673be 100644 --- a/pkg/detectors/azuresearchadminkey/azuresearchadminkey.go +++ b/pkg/detectors/azuresearchadminkey/azuresearchadminkey.go @@ -84,11 +84,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/azuresearchquerykey/azuresearchquerykey.go b/pkg/detectors/azuresearchquerykey/azuresearchquerykey.go index dbb7a3962..e6781286c 100644 --- a/pkg/detectors/azuresearchquerykey/azuresearchquerykey.go +++ b/pkg/detectors/azuresearchquerykey/azuresearchquerykey.go @@ -82,11 +82,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/bannerbear/bannerbear.go b/pkg/detectors/bannerbear/bannerbear.go index 3c4e9a66f..ba6c9e157 100644 --- a/pkg/detectors/bannerbear/bannerbear.go +++ b/pkg/detectors/bannerbear/bannerbear.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/baremetrics/baremetrics.go b/pkg/detectors/baremetrics/baremetrics.go index f30568096..c1e942904 100644 --- a/pkg/detectors/baremetrics/baremetrics.go +++ b/pkg/detectors/baremetrics/baremetrics.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/beamer/beamer.go b/pkg/detectors/beamer/beamer.go index f6b8d5fa5..bad69b3f8 100644 --- a/pkg/detectors/beamer/beamer.go +++ b/pkg/detectors/beamer/beamer.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/beebole/beebole.go b/pkg/detectors/beebole/beebole.go index 23936d10e..4d67e25bb 100644 --- a/pkg/detectors/beebole/beebole.go +++ b/pkg/detectors/beebole/beebole.go @@ -63,11 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/besnappy/besnappy.go b/pkg/detectors/besnappy/besnappy.go index 4ccedbc1b..6ad3fd57f 100644 --- a/pkg/detectors/besnappy/besnappy.go +++ b/pkg/detectors/besnappy/besnappy.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/besttime/besttime.go b/pkg/detectors/besttime/besttime.go index 9afd781f7..a0b19118d 100644 --- a/pkg/detectors/besttime/besttime.go +++ b/pkg/detectors/besttime/besttime.go @@ -63,12 +63,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if strings.Contains(body, `"status": "OK"`) { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } - } } diff --git a/pkg/detectors/betterstack/betterstack.go b/pkg/detectors/betterstack/betterstack.go index c38b6b67a..3770dacd8 100644 --- a/pkg/detectors/betterstack/betterstack.go +++ b/pkg/detectors/betterstack/betterstack.go @@ -74,11 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/billomat/billomat.go b/pkg/detectors/billomat/billomat.go index 5dd10e87f..cf2eba3d3 100644 --- a/pkg/detectors/billomat/billomat.go +++ b/pkg/detectors/billomat/billomat.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/bitbar/bitbar.go b/pkg/detectors/bitbar/bitbar.go index 1a93dded5..9eca13378 100644 --- a/pkg/detectors/bitbar/bitbar.go +++ b/pkg/detectors/bitbar/bitbar.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/bitcoinaverage/bitcoinaverage.go b/pkg/detectors/bitcoinaverage/bitcoinaverage.go index 079f5a8bf..3e05dddf0 100644 --- a/pkg/detectors/bitcoinaverage/bitcoinaverage.go +++ b/pkg/detectors/bitcoinaverage/bitcoinaverage.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if resp.Success { s1.Verified = true } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/bitfinex/bitfinex.go b/pkg/detectors/bitfinex/bitfinex.go index 1c1145ffb..11d33230e 100644 --- a/pkg/detectors/bitfinex/bitfinex.go +++ b/pkg/detectors/bitfinex/bitfinex.go @@ -77,10 +77,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if err != nil { if strings.HasPrefix(err.Error(), "POST https://") { // eg POST https://api-pub.bitfinex.com/v2/auth/r/orders/hist: 500 apikey: digest invalid (10100) isValid = false - } else { - if detectors.IsKnownFalsePositive(apiKeyRes, detectors.DefaultFalsePositives, true) { - continue - } } } diff --git a/pkg/detectors/bitlyaccesstoken/bitlyaccesstoken.go b/pkg/detectors/bitlyaccesstoken/bitlyaccesstoken.go index 136ce30e0..7b72d899e 100644 --- a/pkg/detectors/bitlyaccesstoken/bitlyaccesstoken.go +++ b/pkg/detectors/bitlyaccesstoken/bitlyaccesstoken.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/bitmex/bitmex.go b/pkg/detectors/bitmex/bitmex.go index a2fa65a6b..01adc8d33 100644 --- a/pkg/detectors/bitmex/bitmex.go +++ b/pkg/detectors/bitmex/bitmex.go @@ -82,15 +82,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - - if detectors.IsKnownFalsePositive(resSecretMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/blazemeter/blazemeter.go b/pkg/detectors/blazemeter/blazemeter.go index 8245e2b8f..615b7b5f5 100644 --- a/pkg/detectors/blazemeter/blazemeter.go +++ b/pkg/detectors/blazemeter/blazemeter.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/blitapp/blitapp.go b/pkg/detectors/blitapp/blitapp.go index f390a2587..077c443a1 100644 --- a/pkg/detectors/blitapp/blitapp.go +++ b/pkg/detectors/blitapp/blitapp.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/blocknative/blocknative.go b/pkg/detectors/blocknative/blocknative.go index 3da23aa8b..d65b44672 100644 --- a/pkg/detectors/blocknative/blocknative.go +++ b/pkg/detectors/blocknative/blocknative.go @@ -63,11 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if !strings.Contains(body, "valid") { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/blogger/blogger.go b/pkg/detectors/blogger/blogger.go index 2f3db1dfe..a3c46155b 100644 --- a/pkg/detectors/blogger/blogger.go +++ b/pkg/detectors/blogger/blogger.go @@ -55,11 +55,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/bombbomb/bombbomb.go b/pkg/detectors/bombbomb/bombbomb.go index cfee96adf..612e39855 100644 --- a/pkg/detectors/bombbomb/bombbomb.go +++ b/pkg/detectors/bombbomb/bombbomb.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/boostnote/boostnote.go b/pkg/detectors/boostnote/boostnote.go index b3a026f05..a6fd6363b 100644 --- a/pkg/detectors/boostnote/boostnote.go +++ b/pkg/detectors/boostnote/boostnote.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/borgbase/borgbase.go b/pkg/detectors/borgbase/borgbase.go index eeb90c3cb..ee81d3148 100644 --- a/pkg/detectors/borgbase/borgbase.go +++ b/pkg/detectors/borgbase/borgbase.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/braintreepayments/braintreepayments.go b/pkg/detectors/braintreepayments/braintreepayments.go index ffbb433c6..b156783b9 100644 --- a/pkg/detectors/braintreepayments/braintreepayments.go +++ b/pkg/detectors/braintreepayments/braintreepayments.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/brandfetch/brandfetch.go b/pkg/detectors/brandfetch/brandfetch.go index fbcfb5705..7ad508641 100644 --- a/pkg/detectors/brandfetch/brandfetch.go +++ b/pkg/detectors/brandfetch/brandfetch.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/browserstack/browserstack.go b/pkg/detectors/browserstack/browserstack.go index 7d31d0ebe..d3f5e1930 100644 --- a/pkg/detectors/browserstack/browserstack.go +++ b/pkg/detectors/browserstack/browserstack.go @@ -84,10 +84,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } } diff --git a/pkg/detectors/browshot/browshot.go b/pkg/detectors/browshot/browshot.go index b58595a66..f57d67819 100644 --- a/pkg/detectors/browshot/browshot.go +++ b/pkg/detectors/browshot/browshot.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/bscscan/bscscan.go b/pkg/detectors/bscscan/bscscan.go index 83bc89b0a..9051b4de0 100644 --- a/pkg/detectors/bscscan/bscscan.go +++ b/pkg/detectors/bscscan/bscscan.go @@ -63,11 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if !strings.Contains(body, "NOTOK") { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sur> - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/buddyns/buddyns.go b/pkg/detectors/buddyns/buddyns.go index c3ff73ff9..df61159b6 100644 --- a/pkg/detectors/buddyns/buddyns.go +++ b/pkg/detectors/buddyns/buddyns.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/budibase/budibase.go b/pkg/detectors/budibase/budibase.go index d5d7edb30..50b3fc194 100644 --- a/pkg/detectors/budibase/budibase.go +++ b/pkg/detectors/budibase/budibase.go @@ -81,11 +81,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/bugherd/bugherd.go b/pkg/detectors/bugherd/bugherd.go index 94b5e302a..cf81e1328 100644 --- a/pkg/detectors/bugherd/bugherd.go +++ b/pkg/detectors/bugherd/bugherd.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/bugsnag/bugsnag.go b/pkg/detectors/bugsnag/bugsnag.go index 4d1fba369..11e2f63c1 100644 --- a/pkg/detectors/bugsnag/bugsnag.go +++ b/pkg/detectors/bugsnag/bugsnag.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/buildkite/buildkite.go b/pkg/detectors/buildkite/buildkite.go index a8f0c3a9b..92bd1a5a7 100644 --- a/pkg/detectors/buildkite/buildkite.go +++ b/pkg/detectors/buildkite/buildkite.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/buildkitev2/buildkite.go b/pkg/detectors/buildkitev2/buildkite.go index 4c97e7b7e..54b98106e 100644 --- a/pkg/detectors/buildkitev2/buildkite.go +++ b/pkg/detectors/buildkitev2/buildkite.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/bulbul/bulbul.go b/pkg/detectors/bulbul/bulbul.go index 2a2d6c809..a3fc6c92c 100644 --- a/pkg/detectors/bulbul/bulbul.go +++ b/pkg/detectors/bulbul/bulbul.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/bulksms/bulksms.go b/pkg/detectors/bulksms/bulksms.go index 7240b1da3..632fd40b9 100644 --- a/pkg/detectors/bulksms/bulksms.go +++ b/pkg/detectors/bulksms/bulksms.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/buttercms/buttercms.go b/pkg/detectors/buttercms/buttercms.go index abd813fb3..4910eec60 100644 --- a/pkg/detectors/buttercms/buttercms.go +++ b/pkg/detectors/buttercms/buttercms.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/caflou/caflou.go b/pkg/detectors/caflou/caflou.go index ccd28ccb4..c831d56f5 100644 --- a/pkg/detectors/caflou/caflou.go +++ b/pkg/detectors/caflou/caflou.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/calendarific/calendarific.go b/pkg/detectors/calendarific/calendarific.go index 774685bb0..7930c68ee 100644 --- a/pkg/detectors/calendarific/calendarific.go +++ b/pkg/detectors/calendarific/calendarific.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/calendlyapikey/calendlyapikey.go b/pkg/detectors/calendlyapikey/calendlyapikey.go index 730c24f9c..e74e288b6 100644 --- a/pkg/detectors/calendlyapikey/calendlyapikey.go +++ b/pkg/detectors/calendlyapikey/calendlyapikey.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/calorieninja/calorieninja.go b/pkg/detectors/calorieninja/calorieninja.go index d6bc61c10..7019d224a 100644 --- a/pkg/detectors/calorieninja/calorieninja.go +++ b/pkg/detectors/calorieninja/calorieninja.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/campayn/campayn.go b/pkg/detectors/campayn/campayn.go index 1f66cc3bb..4f6838bd6 100644 --- a/pkg/detectors/campayn/campayn.go +++ b/pkg/detectors/campayn/campayn.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cannyio/cannyio.go b/pkg/detectors/cannyio/cannyio.go index 8abc2ea02..0a5631e87 100644 --- a/pkg/detectors/cannyio/cannyio.go +++ b/pkg/detectors/cannyio/cannyio.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/capsulecrm/capsulecrm.go b/pkg/detectors/capsulecrm/capsulecrm.go index 4a2a14b21..ca631f4dd 100644 --- a/pkg/detectors/capsulecrm/capsulecrm.go +++ b/pkg/detectors/capsulecrm/capsulecrm.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/captaindata/captaindata.go b/pkg/detectors/captaindata/captaindata.go index d43012534..82b0b2abb 100644 --- a/pkg/detectors/captaindata/captaindata.go +++ b/pkg/detectors/captaindata/captaindata.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/carboninterface/carboninterface.go b/pkg/detectors/carboninterface/carboninterface.go index cd70bc5bc..0b0b69c5d 100644 --- a/pkg/detectors/carboninterface/carboninterface.go +++ b/pkg/detectors/carboninterface/carboninterface.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cashboard/cashboard.go b/pkg/detectors/cashboard/cashboard.go index bc48620f8..5bdb9e0aa 100644 --- a/pkg/detectors/cashboard/cashboard.go +++ b/pkg/detectors/cashboard/cashboard.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/caspio/caspio.go b/pkg/detectors/caspio/caspio.go index c5d115e01..6b9d82508 100644 --- a/pkg/detectors/caspio/caspio.go +++ b/pkg/detectors/caspio/caspio.go @@ -78,11 +78,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/censys/censys.go b/pkg/detectors/censys/censys.go index 766184f9b..e07ec0cce 100644 --- a/pkg/detectors/censys/censys.go +++ b/pkg/detectors/censys/censys.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/centralstationcrm/centralstationcrm.go b/pkg/detectors/centralstationcrm/centralstationcrm.go index 4d033163a..72b3f78ca 100644 --- a/pkg/detectors/centralstationcrm/centralstationcrm.go +++ b/pkg/detectors/centralstationcrm/centralstationcrm.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cexio/cexio.go b/pkg/detectors/cexio/cexio.go index bb4ec51e7..5821ae8a6 100644 --- a/pkg/detectors/cexio/cexio.go +++ b/pkg/detectors/cexio/cexio.go @@ -105,19 +105,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if res.StatusCode >= 200 && res.StatusCode < 300 && validResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resUserIdMatch, detectors.DefaultFalsePositives, true) { - continue - } - - if detectors.IsKnownFalsePositive(resKeyMatch, detectors.DefaultFalsePositives, true) { - continue - } - - if detectors.IsKnownFalsePositive(resSecretMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/chartmogul/chartmogul.go b/pkg/detectors/chartmogul/chartmogul.go index fd65f52cd..20e313f12 100644 --- a/pkg/detectors/chartmogul/chartmogul.go +++ b/pkg/detectors/chartmogul/chartmogul.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/chatbot/chatbot.go b/pkg/detectors/chatbot/chatbot.go index fb3ceeb93..c71f80ca9 100644 --- a/pkg/detectors/chatbot/chatbot.go +++ b/pkg/detectors/chatbot/chatbot.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/chatfule/chatfule.go b/pkg/detectors/chatfule/chatfule.go index 15d18b01e..b11760998 100644 --- a/pkg/detectors/chatfule/chatfule.go +++ b/pkg/detectors/chatfule/chatfule.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/checio/checio.go b/pkg/detectors/checio/checio.go index 0b3a1823b..082d1c98f 100644 --- a/pkg/detectors/checio/checio.go +++ b/pkg/detectors/checio/checio.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/checklyhq/checklyhq.go b/pkg/detectors/checklyhq/checklyhq.go index e36e73537..370c348ca 100644 --- a/pkg/detectors/checklyhq/checklyhq.go +++ b/pkg/detectors/checklyhq/checklyhq.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/checkout/checkout.go b/pkg/detectors/checkout/checkout.go index daa4eef90..35b11b31d 100644 --- a/pkg/detectors/checkout/checkout.go +++ b/pkg/detectors/checkout/checkout.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/checkvist/checkvist.go b/pkg/detectors/checkvist/checkvist.go index 8affe43e5..3ea18a5c8 100644 --- a/pkg/detectors/checkvist/checkvist.go +++ b/pkg/detectors/checkvist/checkvist.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cicero/cicero.go b/pkg/detectors/cicero/cicero.go index 8461aab26..7f7393415 100644 --- a/pkg/detectors/cicero/cicero.go +++ b/pkg/detectors/cicero/cicero.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/circleci/circleci.go b/pkg/detectors/circleci/circleci.go index 22ab9cdce..936b8e0ba 100644 --- a/pkg/detectors/circleci/circleci.go +++ b/pkg/detectors/circleci/circleci.go @@ -59,12 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified { - if detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, true) { - continue - } - } - results = append(results, s) } diff --git a/pkg/detectors/clarifai/clarifai.go b/pkg/detectors/clarifai/clarifai.go index d019d8744..b9885a409 100644 --- a/pkg/detectors/clarifai/clarifai.go +++ b/pkg/detectors/clarifai/clarifai.go @@ -73,10 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/clearbit/clearbit.go b/pkg/detectors/clearbit/clearbit.go index 376f96cb0..469ba200e 100644 --- a/pkg/detectors/clearbit/clearbit.go +++ b/pkg/detectors/clearbit/clearbit.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/clickhelp/clickhelp.go b/pkg/detectors/clickhelp/clickhelp.go index 6a92ae929..42267d49d 100644 --- a/pkg/detectors/clickhelp/clickhelp.go +++ b/pkg/detectors/clickhelp/clickhelp.go @@ -78,11 +78,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resServer, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/clicksendsms/clicksendsms.go b/pkg/detectors/clicksendsms/clicksendsms.go index 365eaa154..d8574775e 100644 --- a/pkg/detectors/clicksendsms/clicksendsms.go +++ b/pkg/detectors/clicksendsms/clicksendsms.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/clickuppersonaltoken/clickuppersonaltoken.go b/pkg/detectors/clickuppersonaltoken/clickuppersonaltoken.go index 156ee5f31..d8058fbd3 100644 --- a/pkg/detectors/clickuppersonaltoken/clickuppersonaltoken.go +++ b/pkg/detectors/clickuppersonaltoken/clickuppersonaltoken.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cliengo/cliengo.go b/pkg/detectors/cliengo/cliengo.go index 2b43d6c27..6713786c7 100644 --- a/pkg/detectors/cliengo/cliengo.go +++ b/pkg/detectors/cliengo/cliengo.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/clinchpad/clinchpad.go b/pkg/detectors/clinchpad/clinchpad.go index a92b89537..e1b927a69 100644 --- a/pkg/detectors/clinchpad/clinchpad.go +++ b/pkg/detectors/clinchpad/clinchpad.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/clockify/clockify.go b/pkg/detectors/clockify/clockify.go index 75a9bdb6d..92acf73ec 100644 --- a/pkg/detectors/clockify/clockify.go +++ b/pkg/detectors/clockify/clockify.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/clockworksms/clockworksms.go b/pkg/detectors/clockworksms/clockworksms.go index c3a494607..e48e1a8be 100644 --- a/pkg/detectors/clockworksms/clockworksms.go +++ b/pkg/detectors/clockworksms/clockworksms.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/closecrm/close.go b/pkg/detectors/closecrm/close.go index ee6c0ffda..1bdb8ea4a 100644 --- a/pkg/detectors/closecrm/close.go +++ b/pkg/detectors/closecrm/close.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cloudconvert/cloudconvert.go b/pkg/detectors/cloudconvert/cloudconvert.go index 21121d7d0..8ffadc9fb 100644 --- a/pkg/detectors/cloudconvert/cloudconvert.go +++ b/pkg/detectors/cloudconvert/cloudconvert.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cloudelements/cloudelements.go b/pkg/detectors/cloudelements/cloudelements.go index e9f3dc960..3ba8c1e1c 100644 --- a/pkg/detectors/cloudelements/cloudelements.go +++ b/pkg/detectors/cloudelements/cloudelements.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cloudflareapitoken/cloudflareapitoken.go b/pkg/detectors/cloudflareapitoken/cloudflareapitoken.go index 8eb2cb3d9..51d9ca50e 100644 --- a/pkg/detectors/cloudflareapitoken/cloudflareapitoken.go +++ b/pkg/detectors/cloudflareapitoken/cloudflareapitoken.go @@ -58,10 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cloudflarecakey/cloudflarecakey.go b/pkg/detectors/cloudflarecakey/cloudflarecakey.go index bfd70ef56..ce8703ac3 100644 --- a/pkg/detectors/cloudflarecakey/cloudflarecakey.go +++ b/pkg/detectors/cloudflarecakey/cloudflarecakey.go @@ -2,15 +2,13 @@ package cloudflarecakey import ( "context" - // "fmt" - // "log" - regexp "github.com/wasilibs/go-re2" "net/http" "strings" "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" + regexp "github.com/wasilibs/go-re2" ) type Scanner struct{} @@ -42,10 +40,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } resMatch := strings.TrimSpace(match[1]) - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - s1 := detectors.Result{ DetectorType: detectorspb.DetectorType_CloudflareCaKey, Raw: []byte(resMatch), diff --git a/pkg/detectors/cloudflareglobalapikey/cloudflareglobalapikey.go b/pkg/detectors/cloudflareglobalapikey/cloudflareglobalapikey.go index b0d6b46bd..e2e12e5e2 100644 --- a/pkg/detectors/cloudflareglobalapikey/cloudflareglobalapikey.go +++ b/pkg/detectors/cloudflareglobalapikey/cloudflareglobalapikey.go @@ -2,10 +2,11 @@ package cloudflareglobalapikey import ( "context" - regexp "github.com/wasilibs/go-re2" "net/http" "strings" + regexp "github.com/wasilibs/go-re2" + "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" @@ -52,10 +53,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } emailRes := strings.TrimSpace(emailMatch[1]) - if detectors.IsKnownFalsePositive(apiKeyRes, detectors.DefaultFalsePositives, true) { // wait- (apiKeyRes, email) might be false positive does not mean (apiKeyRes, another_email) is ? - continue - } - s1 := detectors.Result{ DetectorType: detectorspb.DetectorType_CloudflareGlobalApiKey, Redacted: emailRes, diff --git a/pkg/detectors/cloudimage/cloudimage.go b/pkg/detectors/cloudimage/cloudimage.go index 7d48687f4..71e7dc2ab 100644 --- a/pkg/detectors/cloudimage/cloudimage.go +++ b/pkg/detectors/cloudimage/cloudimage.go @@ -63,11 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cloudmersive/cloudmersive.go b/pkg/detectors/cloudmersive/cloudmersive.go index 6bfd4bc32..4a2d5e0b5 100644 --- a/pkg/detectors/cloudmersive/cloudmersive.go +++ b/pkg/detectors/cloudmersive/cloudmersive.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cloudplan/cloudplan.go b/pkg/detectors/cloudplan/cloudplan.go index 95db96e3a..30ac902b4 100644 --- a/pkg/detectors/cloudplan/cloudplan.go +++ b/pkg/detectors/cloudplan/cloudplan.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cloudsmith/cloudsmith.go b/pkg/detectors/cloudsmith/cloudsmith.go index efe2a0f9b..953f65840 100644 --- a/pkg/detectors/cloudsmith/cloudsmith.go +++ b/pkg/detectors/cloudsmith/cloudsmith.go @@ -70,12 +70,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if r.Authenticated { s1.Verified = true } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/cloverly/cloverly.go b/pkg/detectors/cloverly/cloverly.go index 72ecab95c..8793d84e8 100644 --- a/pkg/detectors/cloverly/cloverly.go +++ b/pkg/detectors/cloverly/cloverly.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cloze/cloze.go b/pkg/detectors/cloze/cloze.go index 2fe6f62b0..de157bc5e 100644 --- a/pkg/detectors/cloze/cloze.go +++ b/pkg/detectors/cloze/cloze.go @@ -70,12 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } } } diff --git a/pkg/detectors/clustdoc/clustdoc.go b/pkg/detectors/clustdoc/clustdoc.go index 8f9195cb4..0ec9ab16a 100644 --- a/pkg/detectors/clustdoc/clustdoc.go +++ b/pkg/detectors/clustdoc/clustdoc.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/coda/coda.go b/pkg/detectors/coda/coda.go index 1ea12bcfc..2b0fa8983 100644 --- a/pkg/detectors/coda/coda.go +++ b/pkg/detectors/coda/coda.go @@ -74,11 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/codacy/codacy.go b/pkg/detectors/codacy/codacy.go index 4a2e7a469..13326f540 100644 --- a/pkg/detectors/codacy/codacy.go +++ b/pkg/detectors/codacy/codacy.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/codeclimate/codeclimate.go b/pkg/detectors/codeclimate/codeclimate.go index d29c4d9e9..52f1f739b 100644 --- a/pkg/detectors/codeclimate/codeclimate.go +++ b/pkg/detectors/codeclimate/codeclimate.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if r.Data.Id != "" { s1.Verified = true } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/codemagic/codemagic.go b/pkg/detectors/codemagic/codemagic.go index 494ec04a9..4ab971d0b 100644 --- a/pkg/detectors/codemagic/codemagic.go +++ b/pkg/detectors/codemagic/codemagic.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/codequiry/codequiry.go b/pkg/detectors/codequiry/codequiry.go index c41587da7..a16a9ef3e 100644 --- a/pkg/detectors/codequiry/codequiry.go +++ b/pkg/detectors/codequiry/codequiry.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/coinapi/coinapi.go b/pkg/detectors/coinapi/coinapi.go index 8d192aec7..52eaa9313 100644 --- a/pkg/detectors/coinapi/coinapi.go +++ b/pkg/detectors/coinapi/coinapi.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/coinbase/coinbase.go b/pkg/detectors/coinbase/coinbase.go index d84482f55..bc93208a6 100644 --- a/pkg/detectors/coinbase/coinbase.go +++ b/pkg/detectors/coinbase/coinbase.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/coinlayer/coinlayer.go b/pkg/detectors/coinlayer/coinlayer.go index e8316f3a5..0fa4cd0d1 100644 --- a/pkg/detectors/coinlayer/coinlayer.go +++ b/pkg/detectors/coinlayer/coinlayer.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/coinlib/coinlib.go b/pkg/detectors/coinlib/coinlib.go index 820f1aeb6..383fc419b 100644 --- a/pkg/detectors/coinlib/coinlib.go +++ b/pkg/detectors/coinlib/coinlib.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/collect2/collect2.go b/pkg/detectors/collect2/collect2.go index 6091e981c..8ad52883b 100644 --- a/pkg/detectors/collect2/collect2.go +++ b/pkg/detectors/collect2/collect2.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/column/column.go b/pkg/detectors/column/column.go index 061e83daa..b8bf106b2 100644 --- a/pkg/detectors/column/column.go +++ b/pkg/detectors/column/column.go @@ -63,10 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.Verified = true } else { s1.Verified = false - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - // if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - // continue - // } } } } diff --git a/pkg/detectors/commercejs/commercejs.go b/pkg/detectors/commercejs/commercejs.go index edeb67af2..c77bc80ae 100644 --- a/pkg/detectors/commercejs/commercejs.go +++ b/pkg/detectors/commercejs/commercejs.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/commodities/commodities.go b/pkg/detectors/commodities/commodities.go index 1b3e597c9..126215fe0 100644 --- a/pkg/detectors/commodities/commodities.go +++ b/pkg/detectors/commodities/commodities.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/companyhub/companyhub.go b/pkg/detectors/companyhub/companyhub.go index 97ce50a76..d79e32704 100644 --- a/pkg/detectors/companyhub/companyhub.go +++ b/pkg/detectors/companyhub/companyhub.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/confluent/confluent.go b/pkg/detectors/confluent/confluent.go index ac460bd86..b6a07eb82 100644 --- a/pkg/detectors/confluent/confluent.go +++ b/pkg/detectors/confluent/confluent.go @@ -70,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resSecret, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/contentfulpersonalaccesstoken/contentfulpersonalaccesstoken.go b/pkg/detectors/contentfulpersonalaccesstoken/contentfulpersonalaccesstoken.go index 8f12c530d..b75ace2b4 100644 --- a/pkg/detectors/contentfulpersonalaccesstoken/contentfulpersonalaccesstoken.go +++ b/pkg/detectors/contentfulpersonalaccesstoken/contentfulpersonalaccesstoken.go @@ -56,10 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(keyRes, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/conversiontools/conversiontools.go b/pkg/detectors/conversiontools/conversiontools.go index 87420df39..27b42823a 100644 --- a/pkg/detectors/conversiontools/conversiontools.go +++ b/pkg/detectors/conversiontools/conversiontools.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/convertapi/convertapi.go b/pkg/detectors/convertapi/convertapi.go index 1ead72a3b..8e443bfff 100644 --- a/pkg/detectors/convertapi/convertapi.go +++ b/pkg/detectors/convertapi/convertapi.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/convertkit/convertkit.go b/pkg/detectors/convertkit/convertkit.go index f22a89e20..3417dabe5 100644 --- a/pkg/detectors/convertkit/convertkit.go +++ b/pkg/detectors/convertkit/convertkit.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/convier/convier.go b/pkg/detectors/convier/convier.go index e8dbb3b20..bd28e1b8a 100644 --- a/pkg/detectors/convier/convier.go +++ b/pkg/detectors/convier/convier.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/copper/copper.go b/pkg/detectors/copper/copper.go index daa047f58..6d1dc61cc 100644 --- a/pkg/detectors/copper/copper.go +++ b/pkg/detectors/copper/copper.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/couchbase/couchbase.go b/pkg/detectors/couchbase/couchbase.go index f224b3dc1..3f18bdf47 100644 --- a/pkg/detectors/couchbase/couchbase.go +++ b/pkg/detectors/couchbase/couchbase.go @@ -130,11 +130,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if pingEndpoint.State == gocb.PingStateOk { s1.Verified = true break - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resPasswordMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/countrylayer/countrylayer.go b/pkg/detectors/countrylayer/countrylayer.go index 56efad482..36a872b0d 100644 --- a/pkg/detectors/countrylayer/countrylayer.go +++ b/pkg/detectors/countrylayer/countrylayer.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/coveralls/coveralls.go b/pkg/detectors/coveralls/coveralls.go index 05125b594..164c47af5 100644 --- a/pkg/detectors/coveralls/coveralls.go +++ b/pkg/detectors/coveralls/coveralls.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/craftmypdf/craftmypdf.go b/pkg/detectors/craftmypdf/craftmypdf.go index 578ef865c..36482c023 100644 --- a/pkg/detectors/craftmypdf/craftmypdf.go +++ b/pkg/detectors/craftmypdf/craftmypdf.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/crowdin/crowdin.go b/pkg/detectors/crowdin/crowdin.go index 57725aa05..8a13a3b6c 100644 --- a/pkg/detectors/crowdin/crowdin.go +++ b/pkg/detectors/crowdin/crowdin.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/cryptocompare/cryptocompare.go b/pkg/detectors/cryptocompare/cryptocompare.go index 594fa661e..262e62346 100644 --- a/pkg/detectors/cryptocompare/cryptocompare.go +++ b/pkg/detectors/cryptocompare/cryptocompare.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/currencycloud/currencycloud.go b/pkg/detectors/currencycloud/currencycloud.go index 15f08f9cc..63617a191 100644 --- a/pkg/detectors/currencycloud/currencycloud.go +++ b/pkg/detectors/currencycloud/currencycloud.go @@ -77,10 +77,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.Verified = true s1.ExtraData = map[string]string{"environment": fmt.Sprintf("https://%s.currencycloud.com", env)} break - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/currencyfreaks/currencyfreaks.go b/pkg/detectors/currencyfreaks/currencyfreaks.go index 7a3fead42..4465a51ba 100644 --- a/pkg/detectors/currencyfreaks/currencyfreaks.go +++ b/pkg/detectors/currencyfreaks/currencyfreaks.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/currencylayer/currencylayer.go b/pkg/detectors/currencylayer/currencylayer.go index bf2ea0b50..a8a1a1ded 100644 --- a/pkg/detectors/currencylayer/currencylayer.go +++ b/pkg/detectors/currencylayer/currencylayer.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/currencyscoop/currencyscoop.go b/pkg/detectors/currencyscoop/currencyscoop.go index 1ca905877..1ae261514 100644 --- a/pkg/detectors/currencyscoop/currencyscoop.go +++ b/pkg/detectors/currencyscoop/currencyscoop.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/currentsapi/currentsapi.go b/pkg/detectors/currentsapi/currentsapi.go index ae19160ae..093d6c351 100644 --- a/pkg/detectors/currentsapi/currentsapi.go +++ b/pkg/detectors/currentsapi/currentsapi.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/customerguru/customerguru.go b/pkg/detectors/customerguru/customerguru.go index d27825643..8d339794f 100644 --- a/pkg/detectors/customerguru/customerguru.go +++ b/pkg/detectors/customerguru/customerguru.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/customerio/customerio.go b/pkg/detectors/customerio/customerio.go index 450ac8a70..4dc8036b4 100644 --- a/pkg/detectors/customerio/customerio.go +++ b/pkg/detectors/customerio/customerio.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/d7network/d7network.go b/pkg/detectors/d7network/d7network.go index 722ab4981..2cdfa8c40 100644 --- a/pkg/detectors/d7network/d7network.go +++ b/pkg/detectors/d7network/d7network.go @@ -54,11 +54,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dailyco/dailyco.go b/pkg/detectors/dailyco/dailyco.go index 83cb3aebc..54bd589dd 100644 --- a/pkg/detectors/dailyco/dailyco.go +++ b/pkg/detectors/dailyco/dailyco.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dandelion/dandelion.go b/pkg/detectors/dandelion/dandelion.go index 88ca74f4a..32878c5dc 100644 --- a/pkg/detectors/dandelion/dandelion.go +++ b/pkg/detectors/dandelion/dandelion.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dareboost/dareboost.go b/pkg/detectors/dareboost/dareboost.go index 353cabb0a..02fdf791e 100644 --- a/pkg/detectors/dareboost/dareboost.go +++ b/pkg/detectors/dareboost/dareboost.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/databox/databox.go b/pkg/detectors/databox/databox.go index 5cc563771..e6e250e82 100644 --- a/pkg/detectors/databox/databox.go +++ b/pkg/detectors/databox/databox.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/databrickstoken/databrickstoken.go b/pkg/detectors/databrickstoken/databrickstoken.go index a50c667b2..724f72cf6 100644 --- a/pkg/detectors/databrickstoken/databrickstoken.go +++ b/pkg/detectors/databrickstoken/databrickstoken.go @@ -77,9 +77,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(err, resMatch) } } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/datadogtoken/datadogtoken.go b/pkg/detectors/datadogtoken/datadogtoken.go index 9fc7f3a5e..af2c8f0cf 100644 --- a/pkg/detectors/datadogtoken/datadogtoken.go +++ b/pkg/detectors/datadogtoken/datadogtoken.go @@ -78,11 +78,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resApiMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } @@ -115,11 +110,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resApiMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/datagov/datagov.go b/pkg/detectors/datagov/datagov.go index 10bb08919..eb927a30f 100644 --- a/pkg/detectors/datagov/datagov.go +++ b/pkg/detectors/datagov/datagov.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/debounce/debounce.go b/pkg/detectors/debounce/debounce.go index 18100138c..dffcbaf7f 100644 --- a/pkg/detectors/debounce/debounce.go +++ b/pkg/detectors/debounce/debounce.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/deepai/deepai.go b/pkg/detectors/deepai/deepai.go index 39ba01597..335e77847 100644 --- a/pkg/detectors/deepai/deepai.go +++ b/pkg/detectors/deepai/deepai.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/deepgram/deepgram.go b/pkg/detectors/deepgram/deepgram.go index f7e3e5c7d..b0f42c852 100644 --- a/pkg/detectors/deepgram/deepgram.go +++ b/pkg/detectors/deepgram/deepgram.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/delighted/delighted.go b/pkg/detectors/delighted/delighted.go index 9a1444ba0..bcc491267 100644 --- a/pkg/detectors/delighted/delighted.go +++ b/pkg/detectors/delighted/delighted.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/demio/demio.go b/pkg/detectors/demio/demio.go index e686ed77e..e1b4a7046 100644 --- a/pkg/detectors/demio/demio.go +++ b/pkg/detectors/demio/demio.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/deno/denodeploy.go b/pkg/detectors/deno/denodeploy.go index 689d5e07e..f8c1a5982 100644 --- a/pkg/detectors/deno/denodeploy.go +++ b/pkg/detectors/deno/denodeploy.go @@ -92,11 +92,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(token, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/deputy/deputy.go b/pkg/detectors/deputy/deputy.go index 996c695a9..e0d23f4d9 100644 --- a/pkg/detectors/deputy/deputy.go +++ b/pkg/detectors/deputy/deputy.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/detectify/detectify.go b/pkg/detectors/detectify/detectify.go index 23c25ca2a..07258812c 100644 --- a/pkg/detectors/detectify/detectify.go +++ b/pkg/detectors/detectify/detectify.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/detectlanguage/detectlanguage.go b/pkg/detectors/detectlanguage/detectlanguage.go index 06880fea6..214c75743 100644 --- a/pkg/detectors/detectlanguage/detectlanguage.go +++ b/pkg/detectors/detectlanguage/detectlanguage.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dfuse/dfuse.go b/pkg/detectors/dfuse/dfuse.go index e19b8ced7..08777a70f 100644 --- a/pkg/detectors/dfuse/dfuse.go +++ b/pkg/detectors/dfuse/dfuse.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/diffbot/diffbot.go b/pkg/detectors/diffbot/diffbot.go index 8fda47e5c..9d3914ae2 100644 --- a/pkg/detectors/diffbot/diffbot.go +++ b/pkg/detectors/diffbot/diffbot.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/diggernaut/diggernaut.go b/pkg/detectors/diggernaut/diggernaut.go index ae025a1e1..221cd5c25 100644 --- a/pkg/detectors/diggernaut/diggernaut.go +++ b/pkg/detectors/diggernaut/diggernaut.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/digitaloceantoken/digitaloceantoken.go b/pkg/detectors/digitaloceantoken/digitaloceantoken.go index e5faca4b5..e866c71d9 100644 --- a/pkg/detectors/digitaloceantoken/digitaloceantoken.go +++ b/pkg/detectors/digitaloceantoken/digitaloceantoken.go @@ -57,10 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/digitaloceanv2/digitaloceanv2.go b/pkg/detectors/digitaloceanv2/digitaloceanv2.go index 152f938ab..81e3610c0 100644 --- a/pkg/detectors/digitaloceanv2/digitaloceanv2.go +++ b/pkg/detectors/digitaloceanv2/digitaloceanv2.go @@ -70,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if res.StatusCode >= 200 && res.StatusCode < 300 && validResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } @@ -89,11 +84,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/discordbottoken/discordbottoken.go b/pkg/detectors/discordbottoken/discordbottoken.go index 1e85c5865..bee617a07 100644 --- a/pkg/detectors/discordbottoken/discordbottoken.go +++ b/pkg/detectors/discordbottoken/discordbottoken.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } } } diff --git a/pkg/detectors/disqus/disqus.go b/pkg/detectors/disqus/disqus.go index 70cda3e90..e8635f3b0 100644 --- a/pkg/detectors/disqus/disqus.go +++ b/pkg/detectors/disqus/disqus.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ditto/ditto.go b/pkg/detectors/ditto/ditto.go index afdad473b..c2def8852 100644 --- a/pkg/detectors/ditto/ditto.go +++ b/pkg/detectors/ditto/ditto.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dnscheck/dnscheck.go b/pkg/detectors/dnscheck/dnscheck.go index ed1161dfd..bd744c76a 100644 --- a/pkg/detectors/dnscheck/dnscheck.go +++ b/pkg/detectors/dnscheck/dnscheck.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/docparser/docparser.go b/pkg/detectors/docparser/docparser.go index bb8fc2860..96cb6dc05 100644 --- a/pkg/detectors/docparser/docparser.go +++ b/pkg/detectors/docparser/docparser.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/documo/documo.go b/pkg/detectors/documo/documo.go index 3f98cca08..d24fd223a 100644 --- a/pkg/detectors/documo/documo.go +++ b/pkg/detectors/documo/documo.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/docusign/docusign.go b/pkg/detectors/docusign/docusign.go index 78c4774e8..b748490b8 100644 --- a/pkg/detectors/docusign/docusign.go +++ b/pkg/detectors/docusign/docusign.go @@ -91,11 +91,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if err == nil { if res.StatusCode >= 200 && res.StatusCode < 300 && verifiedBodyResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resIDMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/doppler/doppler.go b/pkg/detectors/doppler/doppler.go index 20de7114f..3bca3506e 100644 --- a/pkg/detectors/doppler/doppler.go +++ b/pkg/detectors/doppler/doppler.go @@ -88,11 +88,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if r.Workplace.Name != "" { s1.ExtraData["workplace"] = r.Workplace.Name } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dotmailer/dotmailer.go b/pkg/detectors/dotmailer/dotmailer.go index 205cea1aa..b85d71897 100644 --- a/pkg/detectors/dotmailer/dotmailer.go +++ b/pkg/detectors/dotmailer/dotmailer.go @@ -2,11 +2,12 @@ package dotmailer import ( "context" - regexp "github.com/wasilibs/go-re2" "net/http" "strings" "time" + regexp "github.com/wasilibs/go-re2" + "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" @@ -54,6 +55,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1 := detectors.Result{ DetectorType: detectorspb.DetectorType_Dotmailer, Raw: []byte(resMatch), + RawV2: []byte(resMatch + resPassMatch), } if verify { timeout := 10 * time.Second @@ -68,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resPassMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dovico/dovico.go b/pkg/detectors/dovico/dovico.go index 766c76db3..555f4a7c1 100644 --- a/pkg/detectors/dovico/dovico.go +++ b/pkg/detectors/dovico/dovico.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dronahq/dronahq.go b/pkg/detectors/dronahq/dronahq.go index 0665aa4ed..b2c813bca 100644 --- a/pkg/detectors/dronahq/dronahq.go +++ b/pkg/detectors/dronahq/dronahq.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/droneci/droneci.go b/pkg/detectors/droneci/droneci.go index 3cd976c30..99fb8ece7 100644 --- a/pkg/detectors/droneci/droneci.go +++ b/pkg/detectors/droneci/droneci.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dropbox/dropbox.go b/pkg/detectors/dropbox/dropbox.go index 6bdd2a0b3..e7f593fc1 100644 --- a/pkg/detectors/dropbox/dropbox.go +++ b/pkg/detectors/dropbox/dropbox.go @@ -64,10 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified && detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s) } diff --git a/pkg/detectors/duply/duply.go b/pkg/detectors/duply/duply.go index 3ffd81a94..3b2d94ccc 100644 --- a/pkg/detectors/duply/duply.go +++ b/pkg/detectors/duply/duply.go @@ -70,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dwolla/dwolla.go b/pkg/detectors/dwolla/dwolla.go index d67c74f1d..41aa420ff 100644 --- a/pkg/detectors/dwolla/dwolla.go +++ b/pkg/detectors/dwolla/dwolla.go @@ -76,11 +76,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(idMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dynalist/dynalist.go b/pkg/detectors/dynalist/dynalist.go index 7a2203774..03af2edc1 100644 --- a/pkg/detectors/dynalist/dynalist.go +++ b/pkg/detectors/dynalist/dynalist.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/dyspatch/dyspatch.go b/pkg/detectors/dyspatch/dyspatch.go index 5547d2f44..b51ea7449 100644 --- a/pkg/detectors/dyspatch/dyspatch.go +++ b/pkg/detectors/dyspatch/dyspatch.go @@ -67,12 +67,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if validResponse { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } - } } diff --git a/pkg/detectors/eagleeyenetworks/eagleeyenetworks.go b/pkg/detectors/eagleeyenetworks/eagleeyenetworks.go index 47d1f5677..576030c2f 100644 --- a/pkg/detectors/eagleeyenetworks/eagleeyenetworks.go +++ b/pkg/detectors/eagleeyenetworks/eagleeyenetworks.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/easyinsight/easyinsight.go b/pkg/detectors/easyinsight/easyinsight.go index 12ba7de62..dfab594f3 100644 --- a/pkg/detectors/easyinsight/easyinsight.go +++ b/pkg/detectors/easyinsight/easyinsight.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ecostruxureit/ecostruxureit.go b/pkg/detectors/ecostruxureit/ecostruxureit.go index 2fa477667..c3d3b9e54 100644 --- a/pkg/detectors/ecostruxureit/ecostruxureit.go +++ b/pkg/detectors/ecostruxureit/ecostruxureit.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/edamam/edamam.go b/pkg/detectors/edamam/edamam.go index f1a30ad16..9ed2f5bd3 100644 --- a/pkg/detectors/edamam/edamam.go +++ b/pkg/detectors/edamam/edamam.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/edenai/edenai.go b/pkg/detectors/edenai/edenai.go index 471514dfd..2d1a2d5c7 100644 --- a/pkg/detectors/edenai/edenai.go +++ b/pkg/detectors/edenai/edenai.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/eightxeight/eightxeight.go b/pkg/detectors/eightxeight/eightxeight.go index 628942c4b..d2eee9c84 100644 --- a/pkg/detectors/eightxeight/eightxeight.go +++ b/pkg/detectors/eightxeight/eightxeight.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/elasticemail/elasticemail.go b/pkg/detectors/elasticemail/elasticemail.go index 436cd94e7..1a287cef0 100644 --- a/pkg/detectors/elasticemail/elasticemail.go +++ b/pkg/detectors/elasticemail/elasticemail.go @@ -69,10 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } return results, nil diff --git a/pkg/detectors/enablex/enablex.go b/pkg/detectors/enablex/enablex.go index 13c8c2409..ab431987b 100644 --- a/pkg/detectors/enablex/enablex.go +++ b/pkg/detectors/enablex/enablex.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/enigma/enigma.go b/pkg/detectors/enigma/enigma.go index 729b44f48..c58463cb0 100644 --- a/pkg/detectors/enigma/enigma.go +++ b/pkg/detectors/enigma/enigma.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/envoyapikey/envoyapikey.go b/pkg/detectors/envoyapikey/envoyapikey.go index b34d3493d..9279344ae 100644 --- a/pkg/detectors/envoyapikey/envoyapikey.go +++ b/pkg/detectors/envoyapikey/envoyapikey.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if !strings.Contains(string(body), `"status":401`) { s1.Verified = true } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/etherscan/etherscan.go b/pkg/detectors/etherscan/etherscan.go index 585d5bf69..11e375fa9 100644 --- a/pkg/detectors/etherscan/etherscan.go +++ b/pkg/detectors/etherscan/etherscan.go @@ -63,12 +63,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if strings.Contains(body, `"OK"`) { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/ethplorer/ethplorer.go b/pkg/detectors/ethplorer/ethplorer.go index 3c101d5b6..5731ae246 100644 --- a/pkg/detectors/ethplorer/ethplorer.go +++ b/pkg/detectors/ethplorer/ethplorer.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/eventbrite/eventbrite.go b/pkg/detectors/eventbrite/eventbrite.go index d81fe7e44..dfbfbdd67 100644 --- a/pkg/detectors/eventbrite/eventbrite.go +++ b/pkg/detectors/eventbrite/eventbrite.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/everhour/everhour.go b/pkg/detectors/everhour/everhour.go index 1bb2f1461..6e34783b5 100644 --- a/pkg/detectors/everhour/everhour.go +++ b/pkg/detectors/everhour/everhour.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/exchangerateapi/exchangerateapi.go b/pkg/detectors/exchangerateapi/exchangerateapi.go index b033c90af..759827858 100644 --- a/pkg/detectors/exchangerateapi/exchangerateapi.go +++ b/pkg/detectors/exchangerateapi/exchangerateapi.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/exchangeratesapi/exchangeratesapi.go b/pkg/detectors/exchangeratesapi/exchangeratesapi.go index 2316b94dc..8c3ae9565 100644 --- a/pkg/detectors/exchangeratesapi/exchangeratesapi.go +++ b/pkg/detectors/exchangeratesapi/exchangeratesapi.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/exportsdk/exportsdk.go b/pkg/detectors/exportsdk/exportsdk.go index 62ac8ddfa..71233c87b 100644 --- a/pkg/detectors/exportsdk/exportsdk.go +++ b/pkg/detectors/exportsdk/exportsdk.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/extractorapi/extractorapi.go b/pkg/detectors/extractorapi/extractorapi.go index 95e15c608..b00e37390 100644 --- a/pkg/detectors/extractorapi/extractorapi.go +++ b/pkg/detectors/extractorapi/extractorapi.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/facebookoauth/facebookoauth.go b/pkg/detectors/facebookoauth/facebookoauth.go index 194aa7d7f..fc727e98a 100644 --- a/pkg/detectors/facebookoauth/facebookoauth.go +++ b/pkg/detectors/facebookoauth/facebookoauth.go @@ -69,10 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(apiIdRes, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/faceplusplus/faceplusplus.go b/pkg/detectors/faceplusplus/faceplusplus.go index 24914f083..cf17155cb 100644 --- a/pkg/detectors/faceplusplus/faceplusplus.go +++ b/pkg/detectors/faceplusplus/faceplusplus.go @@ -66,12 +66,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/falsepositives.go b/pkg/detectors/falsepositives.go index a848267da..7559cfe1a 100644 --- a/pkg/detectors/falsepositives.go +++ b/pkg/detectors/falsepositives.go @@ -8,6 +8,9 @@ import ( "unicode/utf8" ahocorasick "github.com/BobuSumisu/aho-corasick" + "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" + + "github.com/trufflesecurity/trufflehog/v3/pkg/context" ) var DefaultFalsePositives = []FalsePositive{"example", "xxxxxx", "aaaaaa", "abcde", "00000", "sample", "www"} @@ -106,19 +109,62 @@ func StringShannonEntropy(input string) float64 { } // FilterResultsWithEntropy filters out determinately unverified results that have a shannon entropy below the given value. -func FilterResultsWithEntropy(results []Result, entropy float64) []Result { +func FilterResultsWithEntropy(ctx context.Context, results []Result, entropy float64, shouldLog bool) []Result { var filteredResults []Result for _, result := range results { if !result.Verified { - if result.RawV2 != nil { - if StringShannonEntropy(string(result.RawV2)) >= entropy { - filteredResults = append(filteredResults, result) - } - } else { + if result.Raw != nil { if StringShannonEntropy(string(result.Raw)) >= entropy { filteredResults = append(filteredResults, result) + } else { + if shouldLog { + ctx.Logger().Info("Filtered out result with low entropy", "result", result) + } } + } else { + filteredResults = append(filteredResults, result) } + } else { + filteredResults = append(filteredResults, result) + } + } + return filteredResults +} + +// FilterKnownFalsePositives filters out known false positives from the results. +func FilterKnownFalsePositives(ctx context.Context, results []Result, falsePositives []FalsePositive, wordCheck bool, shouldLog bool) []Result { + var filteredResults []Result + for _, result := range results { + if !result.Verified { + switch result.DetectorType { + case detectorspb.DetectorType_CustomRegex: + filteredResults = append(filteredResults, result) + break + case detectorspb.DetectorType_GCP, + detectorspb.DetectorType_URI, + detectorspb.DetectorType_AzureBatch, + detectorspb.DetectorType_AzureContainerRegistry, + detectorspb.DetectorType_Shopify, + detectorspb.DetectorType_Postgres, + detectorspb.DetectorType_MongoDB, + detectorspb.DetectorType_JDBC: + filteredResults = append(filteredResults, result) + break + default: + if result.Raw != nil { + if !IsKnownFalsePositive(string(result.Raw), falsePositives, wordCheck) { + filteredResults = append(filteredResults, result) + } else { + if shouldLog { + ctx.Logger().Info("Filtered out known false positive", "result", result) + } + } + } else { + filteredResults = append(filteredResults, result) + } + } + } else { + filteredResults = append(filteredResults, result) } } return filteredResults diff --git a/pkg/detectors/fastforex/fastforex.go b/pkg/detectors/fastforex/fastforex.go index 0c8b772f4..f4373dc2c 100644 --- a/pkg/detectors/fastforex/fastforex.go +++ b/pkg/detectors/fastforex/fastforex.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/fastlypersonaltoken/fastlypersonaltoken.go b/pkg/detectors/fastlypersonaltoken/fastlypersonaltoken.go index 27a6da02c..8981db540 100644 --- a/pkg/detectors/fastlypersonaltoken/fastlypersonaltoken.go +++ b/pkg/detectors/fastlypersonaltoken/fastlypersonaltoken.go @@ -83,10 +83,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result "locked": fmt.Sprintf("%t", userRes.Locked), "two_factor_auth_enabled": fmt.Sprintf("%t", userRes.TwoFactorAuthEnabled), } - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/feedier/feedier.go b/pkg/detectors/feedier/feedier.go index 099caea94..01a58d975 100644 --- a/pkg/detectors/feedier/feedier.go +++ b/pkg/detectors/feedier/feedier.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/fetchrss/fetchrss.go b/pkg/detectors/fetchrss/fetchrss.go index 8c3b3690f..38b036dea 100644 --- a/pkg/detectors/fetchrss/fetchrss.go +++ b/pkg/detectors/fetchrss/fetchrss.go @@ -63,12 +63,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if !strings.Contains(body, "Not authorised") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } - } } diff --git a/pkg/detectors/fibery/fibery.go b/pkg/detectors/fibery/fibery.go index ce23a1d1a..5f268343a 100644 --- a/pkg/detectors/fibery/fibery.go +++ b/pkg/detectors/fibery/fibery.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/figmapersonalaccesstoken/v1/figmapersonalaccesstoken.go b/pkg/detectors/figmapersonalaccesstoken/v1/figmapersonalaccesstoken.go index 454b87ee2..4546e1705 100644 --- a/pkg/detectors/figmapersonalaccesstoken/v1/figmapersonalaccesstoken.go +++ b/pkg/detectors/figmapersonalaccesstoken/v1/figmapersonalaccesstoken.go @@ -80,9 +80,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/figmapersonalaccesstoken/v2/figmapersonalaccesstoken_v2.go b/pkg/detectors/figmapersonalaccesstoken/v2/figmapersonalaccesstoken_v2.go index 1284d0f53..da23c49de 100644 --- a/pkg/detectors/figmapersonalaccesstoken/v2/figmapersonalaccesstoken_v2.go +++ b/pkg/detectors/figmapersonalaccesstoken/v2/figmapersonalaccesstoken_v2.go @@ -79,9 +79,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/fileio/fileio.go b/pkg/detectors/fileio/fileio.go index 136a96762..5d1fae8c2 100644 --- a/pkg/detectors/fileio/fileio.go +++ b/pkg/detectors/fileio/fileio.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/finage/finage.go b/pkg/detectors/finage/finage.go index fc43ec4a5..bd0dca0fa 100644 --- a/pkg/detectors/finage/finage.go +++ b/pkg/detectors/finage/finage.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/financialmodelingprep/financialmodelingprep.go b/pkg/detectors/financialmodelingprep/financialmodelingprep.go index 6f3d20194..5783c15a9 100644 --- a/pkg/detectors/financialmodelingprep/financialmodelingprep.go +++ b/pkg/detectors/financialmodelingprep/financialmodelingprep.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/findl/findl.go b/pkg/detectors/findl/findl.go index 0f6150957..921c98596 100644 --- a/pkg/detectors/findl/findl.go +++ b/pkg/detectors/findl/findl.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/finnhub/finnhub.go b/pkg/detectors/finnhub/finnhub.go index 442e908c6..3d5429733 100644 --- a/pkg/detectors/finnhub/finnhub.go +++ b/pkg/detectors/finnhub/finnhub.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/fixerio/fixerio.go b/pkg/detectors/fixerio/fixerio.go index 070a8ca2c..e2a77bbd3 100644 --- a/pkg/detectors/fixerio/fixerio.go +++ b/pkg/detectors/fixerio/fixerio.go @@ -71,10 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if res.StatusCode >= 200 && res.StatusCode < 300 && validResponse { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } diff --git a/pkg/detectors/flatio/flatio.go b/pkg/detectors/flatio/flatio.go index 20a39d0c1..4743b2996 100644 --- a/pkg/detectors/flatio/flatio.go +++ b/pkg/detectors/flatio/flatio.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/fleetbase/fleetbase.go b/pkg/detectors/fleetbase/fleetbase.go index fd5c4e385..05e7bb12b 100644 --- a/pkg/detectors/fleetbase/fleetbase.go +++ b/pkg/detectors/fleetbase/fleetbase.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/flickr/flickr.go b/pkg/detectors/flickr/flickr.go index 1df3abf16..5049678c1 100644 --- a/pkg/detectors/flickr/flickr.go +++ b/pkg/detectors/flickr/flickr.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if (res.StatusCode >= 200 && res.StatusCode < 300) && strings.Contains(body, "owner=") { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/flightapi/flightapi.go b/pkg/detectors/flightapi/flightapi.go index 049947ac7..90bb89d5e 100644 --- a/pkg/detectors/flightapi/flightapi.go +++ b/pkg/detectors/flightapi/flightapi.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/flightlabs/flightlabs.go b/pkg/detectors/flightlabs/flightlabs.go index 516c56fdc..230321d85 100644 --- a/pkg/detectors/flightlabs/flightlabs.go +++ b/pkg/detectors/flightlabs/flightlabs.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 && validResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/flightstats/flightstats.go b/pkg/detectors/flightstats/flightstats.go index 9a898ec7e..0a28e06ef 100644 --- a/pkg/detectors/flightstats/flightstats.go +++ b/pkg/detectors/flightstats/flightstats.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result validResponse := (res.StatusCode >= 200 && res.StatusCode < 300 && strings.Contains(body, "id")) || (res.StatusCode == 403 && strings.Contains(body, "application is not active")) if validResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/float/float.go b/pkg/detectors/float/float.go index fd5c09415..cb8a0ed90 100644 --- a/pkg/detectors/float/float.go +++ b/pkg/detectors/float/float.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/flowflu/flowflu.go b/pkg/detectors/flowflu/flowflu.go index 6848c9848..011631053 100644 --- a/pkg/detectors/flowflu/flowflu.go +++ b/pkg/detectors/flowflu/flowflu.go @@ -79,11 +79,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/flutterwave/flutterwave.go b/pkg/detectors/flutterwave/flutterwave.go index aee9fcc19..32bc69e6d 100644 --- a/pkg/detectors/flutterwave/flutterwave.go +++ b/pkg/detectors/flutterwave/flutterwave.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/fmfw/fmfw.go b/pkg/detectors/fmfw/fmfw.go index 1ff4f3286..e6514b1c6 100644 --- a/pkg/detectors/fmfw/fmfw.go +++ b/pkg/detectors/fmfw/fmfw.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/formbucket/formbucket.go b/pkg/detectors/formbucket/formbucket.go index 8ace8aca6..b3175d8c8 100644 --- a/pkg/detectors/formbucket/formbucket.go +++ b/pkg/detectors/formbucket/formbucket.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if errBody == nil { if res.StatusCode >= 200 && res.StatusCode < 300 && validResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/formcraft/formcraft.go b/pkg/detectors/formcraft/formcraft.go index 5e417914f..1f09769d8 100644 --- a/pkg/detectors/formcraft/formcraft.go +++ b/pkg/detectors/formcraft/formcraft.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/formio/formio.go b/pkg/detectors/formio/formio.go index 3c9aba537..b562dd3ed 100644 --- a/pkg/detectors/formio/formio.go +++ b/pkg/detectors/formio/formio.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/formsite/formsite.go b/pkg/detectors/formsite/formsite.go index 53cc44009..c8ef4dfa8 100644 --- a/pkg/detectors/formsite/formsite.go +++ b/pkg/detectors/formsite/formsite.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/foursquare/foursquare.go b/pkg/detectors/foursquare/foursquare.go index 12c0a3e94..c5b424694 100644 --- a/pkg/detectors/foursquare/foursquare.go +++ b/pkg/detectors/foursquare/foursquare.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/frameio/frameio.go b/pkg/detectors/frameio/frameio.go index a257a5214..80bb3f174 100644 --- a/pkg/detectors/frameio/frameio.go +++ b/pkg/detectors/frameio/frameio.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/freshbooks/freshbooks.go b/pkg/detectors/freshbooks/freshbooks.go index e5a6b5311..0aabfa8cb 100644 --- a/pkg/detectors/freshbooks/freshbooks.go +++ b/pkg/detectors/freshbooks/freshbooks.go @@ -70,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if res.StatusCode >= 200 && res.StatusCode < 300 && strings.Contains(body, "Log In to FreshBooks") { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/freshdesk/freshdesk.go b/pkg/detectors/freshdesk/freshdesk.go index f46f601d4..35971bfc9 100644 --- a/pkg/detectors/freshdesk/freshdesk.go +++ b/pkg/detectors/freshdesk/freshdesk.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/front/front.go b/pkg/detectors/front/front.go index 40de6007d..515322b09 100644 --- a/pkg/detectors/front/front.go +++ b/pkg/detectors/front/front.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ftp/ftp.go b/pkg/detectors/ftp/ftp.go index 58c0d01eb..4a76d2441 100644 --- a/pkg/detectors/ftp/ftp.go +++ b/pkg/detectors/ftp/ftp.go @@ -3,12 +3,13 @@ package ftp import ( "context" "errors" - regexp "github.com/wasilibs/go-re2" "net/textproto" "net/url" "strings" "time" + regexp "github.com/wasilibs/go-re2" + "github.com/jlaffaye/ftp" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" diff --git a/pkg/detectors/fulcrum/fulcrum.go b/pkg/detectors/fulcrum/fulcrum.go index 8503dfa4a..c99a2bcd8 100644 --- a/pkg/detectors/fulcrum/fulcrum.go +++ b/pkg/detectors/fulcrum/fulcrum.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/fullstory/v1/fullstory.go b/pkg/detectors/fullstory/v1/fullstory.go index fafea2f5d..d051af0b6 100644 --- a/pkg/detectors/fullstory/v1/fullstory.go +++ b/pkg/detectors/fullstory/v1/fullstory.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/fullstory/v2/fullstory_v2.go b/pkg/detectors/fullstory/v2/fullstory_v2.go index 05c07d12e..0b9184d62 100644 --- a/pkg/detectors/fullstory/v2/fullstory_v2.go +++ b/pkg/detectors/fullstory/v2/fullstory_v2.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/fxmarket/fxmarket.go b/pkg/detectors/fxmarket/fxmarket.go index 12713622b..598858545 100644 --- a/pkg/detectors/fxmarket/fxmarket.go +++ b/pkg/detectors/fxmarket/fxmarket.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/geckoboard/geckoboard.go b/pkg/detectors/geckoboard/geckoboard.go index 39caa8c6d..2bd56e33f 100644 --- a/pkg/detectors/geckoboard/geckoboard.go +++ b/pkg/detectors/geckoboard/geckoboard.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/gemini/gemini.go b/pkg/detectors/gemini/gemini.go index 668763e6a..b51d3c364 100644 --- a/pkg/detectors/gemini/gemini.go +++ b/pkg/detectors/gemini/gemini.go @@ -76,10 +76,6 @@ func (s Scanner) FromData(_ context.Context, verify bool, data []byte) (results defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resSecretMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/generic/generic.go b/pkg/detectors/generic/generic.go index 9ef51da4c..4037a15aa 100644 --- a/pkg/detectors/generic/generic.go +++ b/pkg/detectors/generic/generic.go @@ -6,9 +6,10 @@ import ( "context" "encoding/base64" "fmt" - regexp "github.com/wasilibs/go-re2" "strings" + regexp "github.com/wasilibs/go-re2" + "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" ) @@ -113,26 +114,6 @@ func hasReMatch(matchers []*regexp.Regexp, token string) bool { return false } -// func hasDictWord(wordList []string, token string) bool { -// lower := strings.ToLower(token) -// for _, word := range wordList { -// if strings.Contains(lower, word) { -// return true -// } -// } -// return false -// } - -// func bytesToCleanWordList(data []byte) []string { -// words := []string{} -// for _, word := range strings.Split(string(data), "\n") { -// if strings.TrimSpace(word) != "" { -// words = append(words, strings.TrimSpace(strings.ToLower(word))) -// } -// } -// return words -// } - func (s Scanner) Type() detectorspb.DetectorType { return detectorspb.DetectorType_Generic } diff --git a/pkg/detectors/gengo/gengo.go b/pkg/detectors/gengo/gengo.go index e3c908b64..cea4083cf 100644 --- a/pkg/detectors/gengo/gengo.go +++ b/pkg/detectors/gengo/gengo.go @@ -87,15 +87,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if res.StatusCode >= 200 && res.StatusCode < 300 && response.OpStat == "ok" { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - - if detectors.IsKnownFalsePositive(resSecretMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/geoapify/geoapify.go b/pkg/detectors/geoapify/geoapify.go index 8dc27f81e..83c1d3cbc 100644 --- a/pkg/detectors/geoapify/geoapify.go +++ b/pkg/detectors/geoapify/geoapify.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/geocode/geocode.go b/pkg/detectors/geocode/geocode.go index ee5dabbc4..8d4c5c068 100644 --- a/pkg/detectors/geocode/geocode.go +++ b/pkg/detectors/geocode/geocode.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/geocodify/geocodify.go b/pkg/detectors/geocodify/geocodify.go index ff01b7aef..4cdd71af7 100644 --- a/pkg/detectors/geocodify/geocodify.go +++ b/pkg/detectors/geocodify/geocodify.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/geocodio/geocodio.go b/pkg/detectors/geocodio/geocodio.go index 917847e4a..578997e22 100644 --- a/pkg/detectors/geocodio/geocodio.go +++ b/pkg/detectors/geocodio/geocodio.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/geoipifi/geoipifi.go b/pkg/detectors/geoipifi/geoipifi.go index 1ffebd086..868ea260c 100644 --- a/pkg/detectors/geoipifi/geoipifi.go +++ b/pkg/detectors/geoipifi/geoipifi.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/getemail/getemail.go b/pkg/detectors/getemail/getemail.go index 5a4c0bf23..3f0b22499 100644 --- a/pkg/detectors/getemail/getemail.go +++ b/pkg/detectors/getemail/getemail.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = true } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/getemails/getemails.go b/pkg/detectors/getemails/getemails.go index ca40e0501..24d53a2cf 100644 --- a/pkg/detectors/getemails/getemails.go +++ b/pkg/detectors/getemails/getemails.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/getgeoapi/getgeoapi.go b/pkg/detectors/getgeoapi/getgeoapi.go index eae4b465c..c3cd69ebf 100644 --- a/pkg/detectors/getgeoapi/getgeoapi.go +++ b/pkg/detectors/getgeoapi/getgeoapi.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/getgist/getgist.go b/pkg/detectors/getgist/getgist.go index b3a985217..77daa21df 100644 --- a/pkg/detectors/getgist/getgist.go +++ b/pkg/detectors/getgist/getgist.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/getresponse/getresponse.go b/pkg/detectors/getresponse/getresponse.go index f58b13444..ee0573a44 100644 --- a/pkg/detectors/getresponse/getresponse.go +++ b/pkg/detectors/getresponse/getresponse.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/getsandbox/getsandbox.go b/pkg/detectors/getsandbox/getsandbox.go index f2eeff849..d8a13446e 100644 --- a/pkg/detectors/getsandbox/getsandbox.go +++ b/pkg/detectors/getsandbox/getsandbox.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/github/v1/github_old.go b/pkg/detectors/github/v1/github_old.go index a8ac717e6..6f7b56d26 100644 --- a/pkg/detectors/github/v1/github_old.go +++ b/pkg/detectors/github/v1/github_old.go @@ -98,10 +98,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(token, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/github_oauth2/github_oauth2.go b/pkg/detectors/github_oauth2/github_oauth2.go index ea70de7da..7a21053db 100644 --- a/pkg/detectors/github_oauth2/github_oauth2.go +++ b/pkg/detectors/github_oauth2/github_oauth2.go @@ -68,10 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.Verified = true } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/githubapp/githubapp.go b/pkg/detectors/githubapp/githubapp.go index ed27fdd92..8eb48d69f 100644 --- a/pkg/detectors/githubapp/githubapp.go +++ b/pkg/detectors/githubapp/githubapp.go @@ -2,8 +2,6 @@ package githubapp import ( "context" - - // b64 "encoding/base64" "fmt" regexp "github.com/wasilibs/go-re2" "net/http" diff --git a/pkg/detectors/gitlab/v1/gitlab.go b/pkg/detectors/gitlab/v1/gitlab.go index 703ef672c..c71836622 100644 --- a/pkg/detectors/gitlab/v1/gitlab.go +++ b/pkg/detectors/gitlab/v1/gitlab.go @@ -71,10 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/gitlab/v2/gitlab_v2.go b/pkg/detectors/gitlab/v2/gitlab_v2.go index 30ab43cc3..2cd0fd8d1 100644 --- a/pkg/detectors/gitlab/v2/gitlab_v2.go +++ b/pkg/detectors/gitlab/v2/gitlab_v2.go @@ -63,10 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/gitter/gitter.go b/pkg/detectors/gitter/gitter.go index 21c7d113a..a0924bf2c 100644 --- a/pkg/detectors/gitter/gitter.go +++ b/pkg/detectors/gitter/gitter.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/glassnode/glassnode.go b/pkg/detectors/glassnode/glassnode.go index ec1c42778..e20516c4d 100644 --- a/pkg/detectors/glassnode/glassnode.go +++ b/pkg/detectors/glassnode/glassnode.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/gocanvas/gocanvas.go b/pkg/detectors/gocanvas/gocanvas.go index e05336b26..2b4b4d8b2 100644 --- a/pkg/detectors/gocanvas/gocanvas.go +++ b/pkg/detectors/gocanvas/gocanvas.go @@ -82,11 +82,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if res.StatusCode >= 200 && res.StatusCode < 300 && response.Error == nil { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/gocardless/gocardless.go b/pkg/detectors/gocardless/gocardless.go index d98498622..3b139a20c 100644 --- a/pkg/detectors/gocardless/gocardless.go +++ b/pkg/detectors/gocardless/gocardless.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/goodday/goodday.go b/pkg/detectors/goodday/goodday.go index 1b637bc7a..e51f91faf 100644 --- a/pkg/detectors/goodday/goodday.go +++ b/pkg/detectors/goodday/goodday.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/googleoauth2/googleoauth2_access_token.go b/pkg/detectors/googleoauth2/googleoauth2_access_token.go index 193d1b836..b84795b91 100644 --- a/pkg/detectors/googleoauth2/googleoauth2_access_token.go +++ b/pkg/detectors/googleoauth2/googleoauth2_access_token.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(vErr) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(token, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } return diff --git a/pkg/detectors/grafana/grafana.go b/pkg/detectors/grafana/grafana.go index 9ca0431b2..182453af0 100644 --- a/pkg/detectors/grafana/grafana.go +++ b/pkg/detectors/grafana/grafana.go @@ -74,11 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/grafanaserviceaccount/grafanaserviceaccount.go b/pkg/detectors/grafanaserviceaccount/grafanaserviceaccount.go index 61d02c8c4..b450582ac 100644 --- a/pkg/detectors/grafanaserviceaccount/grafanaserviceaccount.go +++ b/pkg/detectors/grafanaserviceaccount/grafanaserviceaccount.go @@ -83,11 +83,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(key, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/graphcms/graphcms.go b/pkg/detectors/graphcms/graphcms.go index 63c17507a..46fcae8c4 100644 --- a/pkg/detectors/graphcms/graphcms.go +++ b/pkg/detectors/graphcms/graphcms.go @@ -74,12 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified { - if detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - } - results = append(results, s1) } } diff --git a/pkg/detectors/graphhopper/graphhopper.go b/pkg/detectors/graphhopper/graphhopper.go index 84c25ff88..363891894 100644 --- a/pkg/detectors/graphhopper/graphhopper.go +++ b/pkg/detectors/graphhopper/graphhopper.go @@ -53,11 +53,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/groovehq/groovehq.go b/pkg/detectors/groovehq/groovehq.go index c1bfa8dad..0dee1c3d6 100644 --- a/pkg/detectors/groovehq/groovehq.go +++ b/pkg/detectors/groovehq/groovehq.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/gtmetrix/gtmetrix.go b/pkg/detectors/gtmetrix/gtmetrix.go index e1a06782b..96ce3d282 100644 --- a/pkg/detectors/gtmetrix/gtmetrix.go +++ b/pkg/detectors/gtmetrix/gtmetrix.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/guardianapi/guardianapi.go b/pkg/detectors/guardianapi/guardianapi.go index 1c55c8f49..9da39d446 100644 --- a/pkg/detectors/guardianapi/guardianapi.go +++ b/pkg/detectors/guardianapi/guardianapi.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/gumroad/gumroad.go b/pkg/detectors/gumroad/gumroad.go index cd341d3b9..243f3204d 100644 --- a/pkg/detectors/gumroad/gumroad.go +++ b/pkg/detectors/gumroad/gumroad.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/guru/guru.go b/pkg/detectors/guru/guru.go index 8622faec9..315637852 100644 --- a/pkg/detectors/guru/guru.go +++ b/pkg/detectors/guru/guru.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(keyMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/gyazo/gyazo.go b/pkg/detectors/gyazo/gyazo.go index 5c908ebaf..a058d7b37 100644 --- a/pkg/detectors/gyazo/gyazo.go +++ b/pkg/detectors/gyazo/gyazo.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/happyscribe/happyscribe.go b/pkg/detectors/happyscribe/happyscribe.go index 7cf67309b..a5b49b1b2 100644 --- a/pkg/detectors/happyscribe/happyscribe.go +++ b/pkg/detectors/happyscribe/happyscribe.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/harvest/harvest.go b/pkg/detectors/harvest/harvest.go index 425205332..6f917485a 100644 --- a/pkg/detectors/harvest/harvest.go +++ b/pkg/detectors/harvest/harvest.go @@ -63,11 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/hellosign/hellosign.go b/pkg/detectors/hellosign/hellosign.go index 63c52e3c0..24b6548df 100644 --- a/pkg/detectors/hellosign/hellosign.go +++ b/pkg/detectors/hellosign/hellosign.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/helpcrunch/helpcrunch.go b/pkg/detectors/helpcrunch/helpcrunch.go index 93eaa7ef6..d8396c788 100644 --- a/pkg/detectors/helpcrunch/helpcrunch.go +++ b/pkg/detectors/helpcrunch/helpcrunch.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/helpscout/helpscout.go b/pkg/detectors/helpscout/helpscout.go index 1139c0030..842a6dece 100644 --- a/pkg/detectors/helpscout/helpscout.go +++ b/pkg/detectors/helpscout/helpscout.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/hereapi/hereapi.go b/pkg/detectors/hereapi/hereapi.go index 530f2d60e..bfb5e4811 100644 --- a/pkg/detectors/hereapi/hereapi.go +++ b/pkg/detectors/hereapi/hereapi.go @@ -55,11 +55,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/heroku/heroku.go b/pkg/detectors/heroku/heroku.go index d08cab603..e6ce180e4 100644 --- a/pkg/detectors/heroku/heroku.go +++ b/pkg/detectors/heroku/heroku.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/hive/hive.go b/pkg/detectors/hive/hive.go index f0e1bb0e8..c12bf1416 100644 --- a/pkg/detectors/hive/hive.go +++ b/pkg/detectors/hive/hive.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(keyMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/hiveage/hiveage.go b/pkg/detectors/hiveage/hiveage.go index c206e8c60..c797cbe30 100644 --- a/pkg/detectors/hiveage/hiveage.go +++ b/pkg/detectors/hiveage/hiveage.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/holidayapi/holidayapi.go b/pkg/detectors/holidayapi/holidayapi.go index 3ceac5b09..1e24be439 100644 --- a/pkg/detectors/holidayapi/holidayapi.go +++ b/pkg/detectors/holidayapi/holidayapi.go @@ -57,12 +57,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/holistic/holistic.go b/pkg/detectors/holistic/holistic.go index 5f08c5956..42fb87a5d 100644 --- a/pkg/detectors/holistic/holistic.go +++ b/pkg/detectors/holistic/holistic.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 && !errorResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/honeycomb/honeycomb.go b/pkg/detectors/honeycomb/honeycomb.go index ca9dcbd71..c52beae7b 100644 --- a/pkg/detectors/honeycomb/honeycomb.go +++ b/pkg/detectors/honeycomb/honeycomb.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/host/host.go b/pkg/detectors/host/host.go index eb627e742..416bb457f 100644 --- a/pkg/detectors/host/host.go +++ b/pkg/detectors/host/host.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/html2pdf/html2pdf.go b/pkg/detectors/html2pdf/html2pdf.go index 93a95843a..20f8328bd 100644 --- a/pkg/detectors/html2pdf/html2pdf.go +++ b/pkg/detectors/html2pdf/html2pdf.go @@ -63,11 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/hubspotapikey/hubspotapikey.go b/pkg/detectors/hubspotapikey/hubspotapikey.go index 74a7cd8c6..e912dea44 100644 --- a/pkg/detectors/hubspotapikey/hubspotapikey.go +++ b/pkg/detectors/hubspotapikey/hubspotapikey.go @@ -55,10 +55,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/huggingface/huggingface.go b/pkg/detectors/huggingface/huggingface.go index a6fa0a855..f836def20 100644 --- a/pkg/detectors/huggingface/huggingface.go +++ b/pkg/detectors/huggingface/huggingface.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/humanity/humanity.go b/pkg/detectors/humanity/humanity.go index e258b5671..57e987d95 100644 --- a/pkg/detectors/humanity/humanity.go +++ b/pkg/detectors/humanity/humanity.go @@ -65,12 +65,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if validResponse { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } - } } diff --git a/pkg/detectors/hunter/hunter.go b/pkg/detectors/hunter/hunter.go index ec7beba33..2c2949ab4 100644 --- a/pkg/detectors/hunter/hunter.go +++ b/pkg/detectors/hunter/hunter.go @@ -2,8 +2,6 @@ package hunter import ( "context" - // "fmt" - // "log" regexp "github.com/wasilibs/go-re2" "net/http" "strings" @@ -57,10 +55,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/hybiscus/hybiscus.go b/pkg/detectors/hybiscus/hybiscus.go index 6e0e8f040..1ccbade48 100644 --- a/pkg/detectors/hybiscus/hybiscus.go +++ b/pkg/detectors/hybiscus/hybiscus.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/hypertrack/hypertrack.go b/pkg/detectors/hypertrack/hypertrack.go index c70821196..6a257e546 100644 --- a/pkg/detectors/hypertrack/hypertrack.go +++ b/pkg/detectors/hypertrack/hypertrack.go @@ -67,15 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - - if detectors.IsKnownFalsePositive(resAccMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ibmclouduserkey/ibmclouduserkey.go b/pkg/detectors/ibmclouduserkey/ibmclouduserkey.go index 551453dfd..af8c57166 100644 --- a/pkg/detectors/ibmclouduserkey/ibmclouduserkey.go +++ b/pkg/detectors/ibmclouduserkey/ibmclouduserkey.go @@ -59,12 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/iconfinder/iconfinder.go b/pkg/detectors/iconfinder/iconfinder.go index c98e8acb6..08aef96f2 100644 --- a/pkg/detectors/iconfinder/iconfinder.go +++ b/pkg/detectors/iconfinder/iconfinder.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/iexapis/iexapis.go b/pkg/detectors/iexapis/iexapis.go index da15de37c..d4735f0d6 100644 --- a/pkg/detectors/iexapis/iexapis.go +++ b/pkg/detectors/iexapis/iexapis.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/iexcloud/iexcloud.go b/pkg/detectors/iexcloud/iexcloud.go index 6da807d4f..57ed64208 100644 --- a/pkg/detectors/iexcloud/iexcloud.go +++ b/pkg/detectors/iexcloud/iexcloud.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/imagekit/imagekit.go b/pkg/detectors/imagekit/imagekit.go index cb36a8614..549291a17 100644 --- a/pkg/detectors/imagekit/imagekit.go +++ b/pkg/detectors/imagekit/imagekit.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/imagga/imagga.go b/pkg/detectors/imagga/imagga.go index f63241bad..4c7130c65 100644 --- a/pkg/detectors/imagga/imagga.go +++ b/pkg/detectors/imagga/imagga.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/impala/impala.go b/pkg/detectors/impala/impala.go index dde3ca5c0..0705954d6 100644 --- a/pkg/detectors/impala/impala.go +++ b/pkg/detectors/impala/impala.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/infura/infura.go b/pkg/detectors/infura/infura.go index 1e54c7a48..653c51351 100644 --- a/pkg/detectors/infura/infura.go +++ b/pkg/detectors/infura/infura.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if strings.Contains(body, `"result"`) { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/insightly/insightly.go b/pkg/detectors/insightly/insightly.go index e77798045..1f298d847 100644 --- a/pkg/detectors/insightly/insightly.go +++ b/pkg/detectors/insightly/insightly.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/instabot/instabot.go b/pkg/detectors/instabot/instabot.go index 6ba73ac28..24b5b3b92 100644 --- a/pkg/detectors/instabot/instabot.go +++ b/pkg/detectors/instabot/instabot.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/instamojo/instamojo.go b/pkg/detectors/instamojo/instamojo.go index de281a18c..249405f42 100644 --- a/pkg/detectors/instamojo/instamojo.go +++ b/pkg/detectors/instamojo/instamojo.go @@ -90,10 +90,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/integromat/integromat.go b/pkg/detectors/integromat/integromat.go index 562e6d090..2ca972a1c 100644 --- a/pkg/detectors/integromat/integromat.go +++ b/pkg/detectors/integromat/integromat.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/intercom/intercom.go b/pkg/detectors/intercom/intercom.go index b4b7a0420..ad820bf7c 100644 --- a/pkg/detectors/intercom/intercom.go +++ b/pkg/detectors/intercom/intercom.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/intrinio/intrinio.go b/pkg/detectors/intrinio/intrinio.go index c881fe3a1..fb6a33bfc 100644 --- a/pkg/detectors/intrinio/intrinio.go +++ b/pkg/detectors/intrinio/intrinio.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/invoiceocean/invoiceocean.go b/pkg/detectors/invoiceocean/invoiceocean.go index b77a385dd..0669142ff 100644 --- a/pkg/detectors/invoiceocean/invoiceocean.go +++ b/pkg/detectors/invoiceocean/invoiceocean.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ip2location/ip2location.go b/pkg/detectors/ip2location/ip2location.go index c2fac406c..6dd8ed714 100644 --- a/pkg/detectors/ip2location/ip2location.go +++ b/pkg/detectors/ip2location/ip2location.go @@ -67,9 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(err, resMatch) } } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/ipapi/ipapi.go b/pkg/detectors/ipapi/ipapi.go index 3f686ea97..7c00fcb2f 100644 --- a/pkg/detectors/ipapi/ipapi.go +++ b/pkg/detectors/ipapi/ipapi.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ipgeolocation/ipgeolocation.go b/pkg/detectors/ipgeolocation/ipgeolocation.go index cc77f9000..c70162f79 100644 --- a/pkg/detectors/ipgeolocation/ipgeolocation.go +++ b/pkg/detectors/ipgeolocation/ipgeolocation.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ipinfo/ipinfo.go b/pkg/detectors/ipinfo/ipinfo.go index b28387a5e..f36abaae3 100644 --- a/pkg/detectors/ipinfo/ipinfo.go +++ b/pkg/detectors/ipinfo/ipinfo.go @@ -74,11 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/ipinfodb/ipinfodb.go b/pkg/detectors/ipinfodb/ipinfodb.go index 35f78246c..5773f8279 100644 --- a/pkg/detectors/ipinfodb/ipinfodb.go +++ b/pkg/detectors/ipinfodb/ipinfodb.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ipquality/ipquality.go b/pkg/detectors/ipquality/ipquality.go index d6546f742..dfa4b1a21 100644 --- a/pkg/detectors/ipquality/ipquality.go +++ b/pkg/detectors/ipquality/ipquality.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result validResponse := strings.Contains(body, "insufficient credits") || strings.Contains(body, `"success":true`) if (res.StatusCode >= 200 && res.StatusCode < 300) && validResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ipstack/ipstack.go b/pkg/detectors/ipstack/ipstack.go index 726c42eae..b09a0ab8d 100644 --- a/pkg/detectors/ipstack/ipstack.go +++ b/pkg/detectors/ipstack/ipstack.go @@ -63,10 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if validResponse { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } diff --git a/pkg/detectors/jdbc/jdbc.go b/pkg/detectors/jdbc/jdbc.go index 82120bd39..cc28db559 100644 --- a/pkg/detectors/jdbc/jdbc.go +++ b/pkg/detectors/jdbc/jdbc.go @@ -98,9 +98,7 @@ matchLoop: // TODO: specialized redaction } - if !s.Verified && detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, false) { - continue - } + results = append(results, s) } diff --git a/pkg/detectors/jiratoken/v1/jiratoken.go b/pkg/detectors/jiratoken/v1/jiratoken.go index ae174feb3..92e243f34 100644 --- a/pkg/detectors/jiratoken/v1/jiratoken.go +++ b/pkg/detectors/jiratoken/v1/jiratoken.go @@ -86,10 +86,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resToken) } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/jiratoken/v2/jiratoken_v2.go b/pkg/detectors/jiratoken/v2/jiratoken_v2.go index 04f08953e..c356c16a7 100644 --- a/pkg/detectors/jiratoken/v2/jiratoken_v2.go +++ b/pkg/detectors/jiratoken/v2/jiratoken_v2.go @@ -87,10 +87,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resToken) } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/jotform/jotform.go b/pkg/detectors/jotform/jotform.go index 1504e1181..d8005be54 100644 --- a/pkg/detectors/jotform/jotform.go +++ b/pkg/detectors/jotform/jotform.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/jumpcloud/jumpcloud.go b/pkg/detectors/jumpcloud/jumpcloud.go index 0f8186097..cbd5b0ef2 100644 --- a/pkg/detectors/jumpcloud/jumpcloud.go +++ b/pkg/detectors/jumpcloud/jumpcloud.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/juro/juro.go b/pkg/detectors/juro/juro.go index 7ccd9adfd..c35dac3e4 100644 --- a/pkg/detectors/juro/juro.go +++ b/pkg/detectors/juro/juro.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/kanban/kanban.go b/pkg/detectors/kanban/kanban.go index 96a695e21..dabd5561e 100644 --- a/pkg/detectors/kanban/kanban.go +++ b/pkg/detectors/kanban/kanban.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/kanbantool/kanbantool.go b/pkg/detectors/kanbantool/kanbantool.go index 3385e45df..b2a32f579 100644 --- a/pkg/detectors/kanbantool/kanbantool.go +++ b/pkg/detectors/kanbantool/kanbantool.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/karmacrm/karmacrm.go b/pkg/detectors/karmacrm/karmacrm.go index 7b93983ce..0fb783f27 100644 --- a/pkg/detectors/karmacrm/karmacrm.go +++ b/pkg/detectors/karmacrm/karmacrm.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/keenio/keenio.go b/pkg/detectors/keenio/keenio.go index e0b89deb4..0ff37ba09 100644 --- a/pkg/detectors/keenio/keenio.go +++ b/pkg/detectors/keenio/keenio.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/klaviyo/klaviyo.go b/pkg/detectors/klaviyo/klaviyo.go index 6019d775c..404956042 100644 --- a/pkg/detectors/klaviyo/klaviyo.go +++ b/pkg/detectors/klaviyo/klaviyo.go @@ -104,11 +104,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/klipfolio/klipfolio.go b/pkg/detectors/klipfolio/klipfolio.go index 5824f1764..b6d1078d2 100644 --- a/pkg/detectors/klipfolio/klipfolio.go +++ b/pkg/detectors/klipfolio/klipfolio.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/knapsackpro/knapsackpro.go b/pkg/detectors/knapsackpro/knapsackpro.go index ba68a522e..fa37e0ba5 100644 --- a/pkg/detectors/knapsackpro/knapsackpro.go +++ b/pkg/detectors/knapsackpro/knapsackpro.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/kontent/kontent.go b/pkg/detectors/kontent/kontent.go index 7166835ee..af97f7ed9 100644 --- a/pkg/detectors/kontent/kontent.go +++ b/pkg/detectors/kontent/kontent.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/kraken/kraken.go b/pkg/detectors/kraken/kraken.go index 0a0693d14..b9cdf814b 100644 --- a/pkg/detectors/kraken/kraken.go +++ b/pkg/detectors/kraken/kraken.go @@ -89,11 +89,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result out, _ := io.ReadAll(res.Body) if !strings.Contains(string(out), "Invalid key") { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/kucoin/kucoin.go b/pkg/detectors/kucoin/kucoin.go index 0f68a3946..176d6429d 100644 --- a/pkg/detectors/kucoin/kucoin.go +++ b/pkg/detectors/kucoin/kucoin.go @@ -94,15 +94,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resKeyMatch, detectors.DefaultFalsePositives, true) { - continue - } - - if detectors.IsKnownFalsePositive(resSecretMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/kylas/kylas.go b/pkg/detectors/kylas/kylas.go index 815ea5256..c81235da6 100644 --- a/pkg/detectors/kylas/kylas.go +++ b/pkg/detectors/kylas/kylas.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/languagelayer/languagelayer.go b/pkg/detectors/languagelayer/languagelayer.go index 68e5e8e14..5f3c856b5 100644 --- a/pkg/detectors/languagelayer/languagelayer.go +++ b/pkg/detectors/languagelayer/languagelayer.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/launchdarkly/launchdarkly.go b/pkg/detectors/launchdarkly/launchdarkly.go index 6bafc25d9..10f1a1a0c 100644 --- a/pkg/detectors/launchdarkly/launchdarkly.go +++ b/pkg/detectors/launchdarkly/launchdarkly.go @@ -101,11 +101,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/leadfeeder/leadfeeder.go b/pkg/detectors/leadfeeder/leadfeeder.go index b643a070d..44ca3feb3 100644 --- a/pkg/detectors/leadfeeder/leadfeeder.go +++ b/pkg/detectors/leadfeeder/leadfeeder.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/lemlist/lemlist.go b/pkg/detectors/lemlist/lemlist.go index d76a1b5ea..af21db0b9 100644 --- a/pkg/detectors/lemlist/lemlist.go +++ b/pkg/detectors/lemlist/lemlist.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/lemonsqueezy/lemonsqueezy.go b/pkg/detectors/lemonsqueezy/lemonsqueezy.go index ee04f1ab3..498af18dc 100644 --- a/pkg/detectors/lemonsqueezy/lemonsqueezy.go +++ b/pkg/detectors/lemonsqueezy/lemonsqueezy.go @@ -74,11 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/lessannoyingcrm/lessannoyingcrm.go b/pkg/detectors/lessannoyingcrm/lessannoyingcrm.go index f894acedc..4c475bcb5 100644 --- a/pkg/detectors/lessannoyingcrm/lessannoyingcrm.go +++ b/pkg/detectors/lessannoyingcrm/lessannoyingcrm.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/lexigram/lexigram.go b/pkg/detectors/lexigram/lexigram.go index 1f4209ce8..4af5b9b6b 100644 --- a/pkg/detectors/lexigram/lexigram.go +++ b/pkg/detectors/lexigram/lexigram.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/linearapi/linearapi.go b/pkg/detectors/linearapi/linearapi.go index 69d29747c..d17194cc7 100644 --- a/pkg/detectors/linearapi/linearapi.go +++ b/pkg/detectors/linearapi/linearapi.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if res.StatusCode >= 200 && res.StatusCode < 300 && strings.Contains(body, `"data":`) { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/linemessaging/linemessaging.go b/pkg/detectors/linemessaging/linemessaging.go index 2f0ca3b6a..c5405c06a 100644 --- a/pkg/detectors/linemessaging/linemessaging.go +++ b/pkg/detectors/linemessaging/linemessaging.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/linenotify/linenotify.go b/pkg/detectors/linenotify/linenotify.go index 4669865d7..2fd52104c 100644 --- a/pkg/detectors/linenotify/linenotify.go +++ b/pkg/detectors/linenotify/linenotify.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/linkpreview/linkpreview.go b/pkg/detectors/linkpreview/linkpreview.go index 66d00ac13..75cd7891c 100644 --- a/pkg/detectors/linkpreview/linkpreview.go +++ b/pkg/detectors/linkpreview/linkpreview.go @@ -55,11 +55,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/liveagent/liveagent.go b/pkg/detectors/liveagent/liveagent.go index c81ad2d89..314845c6b 100644 --- a/pkg/detectors/liveagent/liveagent.go +++ b/pkg/detectors/liveagent/liveagent.go @@ -84,11 +84,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if r.Message == "You do not have sufficient privileges" { s1.Verified = true } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/livestorm/livestorm.go b/pkg/detectors/livestorm/livestorm.go index f1767d03f..d0bedbcd7 100644 --- a/pkg/detectors/livestorm/livestorm.go +++ b/pkg/detectors/livestorm/livestorm.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/loadmill/loadmill.go b/pkg/detectors/loadmill/loadmill.go index 61ccc54d2..b2a5dbb65 100644 --- a/pkg/detectors/loadmill/loadmill.go +++ b/pkg/detectors/loadmill/loadmill.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/lob/lob.go b/pkg/detectors/lob/lob.go index 0a27c0e8b..438fcc010 100644 --- a/pkg/detectors/lob/lob.go +++ b/pkg/detectors/lob/lob.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/locationiq/locationiq.go b/pkg/detectors/locationiq/locationiq.go index 750cd168e..5c96ecb73 100644 --- a/pkg/detectors/locationiq/locationiq.go +++ b/pkg/detectors/locationiq/locationiq.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/loggly/loggly.go b/pkg/detectors/loggly/loggly.go index 453bc3aa2..9ed2c60cb 100644 --- a/pkg/detectors/loggly/loggly.go +++ b/pkg/detectors/loggly/loggly.go @@ -84,11 +84,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(key, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/loginradius/loginradius.go b/pkg/detectors/loginradius/loginradius.go index 05c2f425e..0e26b57f0 100644 --- a/pkg/detectors/loginradius/loginradius.go +++ b/pkg/detectors/loginradius/loginradius.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/logzio/logzio.go b/pkg/detectors/logzio/logzio.go index 1addc3b5e..58b8f4f47 100644 --- a/pkg/detectors/logzio/logzio.go +++ b/pkg/detectors/logzio/logzio.go @@ -75,11 +75,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/lokalisetoken/lokalisetoken.go b/pkg/detectors/lokalisetoken/lokalisetoken.go index b109e4059..213890bdb 100644 --- a/pkg/detectors/lokalisetoken/lokalisetoken.go +++ b/pkg/detectors/lokalisetoken/lokalisetoken.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/loyverse/loyverse.go b/pkg/detectors/loyverse/loyverse.go index 4fa28b51e..2ec507695 100644 --- a/pkg/detectors/loyverse/loyverse.go +++ b/pkg/detectors/loyverse/loyverse.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/lunchmoney/lunchmoney.go b/pkg/detectors/lunchmoney/lunchmoney.go index 98a53b291..44b4aa7ab 100644 --- a/pkg/detectors/lunchmoney/lunchmoney.go +++ b/pkg/detectors/lunchmoney/lunchmoney.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/luno/luno.go b/pkg/detectors/luno/luno.go index d8af86bad..af9798b32 100644 --- a/pkg/detectors/luno/luno.go +++ b/pkg/detectors/luno/luno.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/m3o/m3o.go b/pkg/detectors/m3o/m3o.go index f55a65d81..2ec5ca4c4 100644 --- a/pkg/detectors/m3o/m3o.go +++ b/pkg/detectors/m3o/m3o.go @@ -63,11 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/madkudu/madkudu.go b/pkg/detectors/madkudu/madkudu.go index b0f80424d..398514891 100644 --- a/pkg/detectors/madkudu/madkudu.go +++ b/pkg/detectors/madkudu/madkudu.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/magicbell/magicbell.go b/pkg/detectors/magicbell/magicbell.go index 730b59b27..65332d0fc 100644 --- a/pkg/detectors/magicbell/magicbell.go +++ b/pkg/detectors/magicbell/magicbell.go @@ -49,10 +49,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } emailRes := strings.TrimSpace(emailMatch[1]) - if detectors.IsKnownFalsePositive(apiKeyRes, detectors.DefaultFalsePositives, true) { // wait- (apiKeyRes, email) might be false positive does not mean (apiKeyRes, another_email) is ? - continue - } - s1 := detectors.Result{ DetectorType: detectorspb.DetectorType_MagicBell, Raw: []byte(apiKeyRes), @@ -70,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(apiKeyRes, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/magnetic/magnetic.go b/pkg/detectors/magnetic/magnetic.go index aa2867c00..d6b1f1ef7 100644 --- a/pkg/detectors/magnetic/magnetic.go +++ b/pkg/detectors/magnetic/magnetic.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } @@ -70,7 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result return results, nil } - func (s Scanner) Type() detectorspb.DetectorType { return detectorspb.DetectorType_Magnetic } diff --git a/pkg/detectors/mailboxlayer/mailboxlayer.go b/pkg/detectors/mailboxlayer/mailboxlayer.go index 57d1ea402..dd4112b5b 100644 --- a/pkg/detectors/mailboxlayer/mailboxlayer.go +++ b/pkg/detectors/mailboxlayer/mailboxlayer.go @@ -2,11 +2,12 @@ package mailboxlayer import ( "context" - regexp "github.com/wasilibs/go-re2" "io" "net/http" "strings" + regexp "github.com/wasilibs/go-re2" + "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" @@ -68,10 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if validResponse { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } diff --git a/pkg/detectors/mailchimp/mailchimp.go b/pkg/detectors/mailchimp/mailchimp.go index 852062f17..ba70c1758 100644 --- a/pkg/detectors/mailchimp/mailchimp.go +++ b/pkg/detectors/mailchimp/mailchimp.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(match, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mailerlite/mailerlite.go b/pkg/detectors/mailerlite/mailerlite.go index cac7e1428..bf757bff5 100644 --- a/pkg/detectors/mailerlite/mailerlite.go +++ b/pkg/detectors/mailerlite/mailerlite.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mailgun/mailgun.go b/pkg/detectors/mailgun/mailgun.go index 7f129cd58..991b7f2f0 100644 --- a/pkg/detectors/mailgun/mailgun.go +++ b/pkg/detectors/mailgun/mailgun.go @@ -68,10 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } diff --git a/pkg/detectors/mailjetbasicauth/mailjetbasicauth.go b/pkg/detectors/mailjetbasicauth/mailjetbasicauth.go index 6faabbb34..6eca7efb0 100644 --- a/pkg/detectors/mailjetbasicauth/mailjetbasicauth.go +++ b/pkg/detectors/mailjetbasicauth/mailjetbasicauth.go @@ -57,10 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mailjetsms/mailjetsms.go b/pkg/detectors/mailjetsms/mailjetsms.go index 82bdc3c27..0118f2ff6 100644 --- a/pkg/detectors/mailjetsms/mailjetsms.go +++ b/pkg/detectors/mailjetsms/mailjetsms.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mailmodo/mailmodo.go b/pkg/detectors/mailmodo/mailmodo.go index 0fdf69feb..0c8081ca0 100644 --- a/pkg/detectors/mailmodo/mailmodo.go +++ b/pkg/detectors/mailmodo/mailmodo.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mailsac/mailsac.go b/pkg/detectors/mailsac/mailsac.go index 97ee69af6..c758c173f 100644 --- a/pkg/detectors/mailsac/mailsac.go +++ b/pkg/detectors/mailsac/mailsac.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mandrill/mandrill.go b/pkg/detectors/mandrill/mandrill.go index be0a496bf..df33889be 100644 --- a/pkg/detectors/mandrill/mandrill.go +++ b/pkg/detectors/mandrill/mandrill.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/manifest/manifest.go b/pkg/detectors/manifest/manifest.go index e74cbf3fc..6a11688a5 100644 --- a/pkg/detectors/manifest/manifest.go +++ b/pkg/detectors/manifest/manifest.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mapbox/mapbox.go b/pkg/detectors/mapbox/mapbox.go index bbeb059e8..a1341c4e1 100644 --- a/pkg/detectors/mapbox/mapbox.go +++ b/pkg/detectors/mapbox/mapbox.go @@ -2,7 +2,6 @@ package mapbox import ( "context" - // "log" regexp "github.com/wasilibs/go-re2" "net/http" "strings" @@ -60,10 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mapquest/mapquest.go b/pkg/detectors/mapquest/mapquest.go index 640896264..78807166f 100644 --- a/pkg/detectors/mapquest/mapquest.go +++ b/pkg/detectors/mapquest/mapquest.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/marketstack/marketstack.go b/pkg/detectors/marketstack/marketstack.go index e3eb5ac76..903f750bf 100644 --- a/pkg/detectors/marketstack/marketstack.go +++ b/pkg/detectors/marketstack/marketstack.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mattermostpersonaltoken/mattermostpersonaltoken.go b/pkg/detectors/mattermostpersonaltoken/mattermostpersonaltoken.go index ca5c65ba2..80c6627cf 100644 --- a/pkg/detectors/mattermostpersonaltoken/mattermostpersonaltoken.go +++ b/pkg/detectors/mattermostpersonaltoken/mattermostpersonaltoken.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mavenlink/mavenlink.go b/pkg/detectors/mavenlink/mavenlink.go index 6897cc1de..b6f6296f2 100644 --- a/pkg/detectors/mavenlink/mavenlink.go +++ b/pkg/detectors/mavenlink/mavenlink.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/maxmindlicense/v1/maxmindlicense.go b/pkg/detectors/maxmindlicense/v1/maxmindlicense.go index 0e20c158b..6a2ac4119 100644 --- a/pkg/detectors/maxmindlicense/v1/maxmindlicense.go +++ b/pkg/detectors/maxmindlicense/v1/maxmindlicense.go @@ -70,10 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(keyRes, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/meaningcloud/meaningcloud.go b/pkg/detectors/meaningcloud/meaningcloud.go index 5d4eb584c..50ce02f65 100644 --- a/pkg/detectors/meaningcloud/meaningcloud.go +++ b/pkg/detectors/meaningcloud/meaningcloud.go @@ -91,11 +91,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if r.DeepTime > 0 { s1.Verified = true } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mediastack/mediastack.go b/pkg/detectors/mediastack/mediastack.go index 0cd9ab3cc..d8116e0e4 100644 --- a/pkg/detectors/mediastack/mediastack.go +++ b/pkg/detectors/mediastack/mediastack.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/meistertask/meistertask.go b/pkg/detectors/meistertask/meistertask.go index 3219747b0..205ac3b03 100644 --- a/pkg/detectors/meistertask/meistertask.go +++ b/pkg/detectors/meistertask/meistertask.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mesibo/mesibo.go b/pkg/detectors/mesibo/mesibo.go index 81a5c9ae5..e2daed884 100644 --- a/pkg/detectors/mesibo/mesibo.go +++ b/pkg/detectors/mesibo/mesibo.go @@ -63,12 +63,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if !strings.Contains(body, "AUTHFAIL") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } - } } diff --git a/pkg/detectors/messagebird/messagebird.go b/pkg/detectors/messagebird/messagebird.go index 56e42cc06..5bc2f8485 100644 --- a/pkg/detectors/messagebird/messagebird.go +++ b/pkg/detectors/messagebird/messagebird.go @@ -57,10 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/metaapi/metaapi.go b/pkg/detectors/metaapi/metaapi.go index e5ee72722..121c78b8b 100644 --- a/pkg/detectors/metaapi/metaapi.go +++ b/pkg/detectors/metaapi/metaapi.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if res.StatusCode >= 200 && res.StatusCode < 300 && strings.Contains(bodyStr, `"success":true`) { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/metabase/metabase.go b/pkg/detectors/metabase/metabase.go index 53f11c9f3..852e671fc 100644 --- a/pkg/detectors/metabase/metabase.go +++ b/pkg/detectors/metabase/metabase.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } if res.StatusCode == http.StatusOK && json.Valid(body) { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/metrilo/metrilo.go b/pkg/detectors/metrilo/metrilo.go index a25a16875..cee0e2bc4 100644 --- a/pkg/detectors/metrilo/metrilo.go +++ b/pkg/detectors/metrilo/metrilo.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/microsoftteamswebhook/microsoftteamswebhook.go b/pkg/detectors/microsoftteamswebhook/microsoftteamswebhook.go index cda30abda..7175f7fbc 100644 --- a/pkg/detectors/microsoftteamswebhook/microsoftteamswebhook.go +++ b/pkg/detectors/microsoftteamswebhook/microsoftteamswebhook.go @@ -65,10 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, false) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/mindmeister/mindmeister.go b/pkg/detectors/mindmeister/mindmeister.go index 28c5b8453..f11ed882f 100644 --- a/pkg/detectors/mindmeister/mindmeister.go +++ b/pkg/detectors/mindmeister/mindmeister.go @@ -67,12 +67,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } } diff --git a/pkg/detectors/miro/miro.go b/pkg/detectors/miro/miro.go index aad280cab..3e5bd2cfb 100644 --- a/pkg/detectors/miro/miro.go +++ b/pkg/detectors/miro/miro.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mite/mite.go b/pkg/detectors/mite/mite.go index 2a027b257..067d9a470 100644 --- a/pkg/detectors/mite/mite.go +++ b/pkg/detectors/mite/mite.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mixmax/mixmax.go b/pkg/detectors/mixmax/mixmax.go index d2c733989..9bc4d6228 100644 --- a/pkg/detectors/mixmax/mixmax.go +++ b/pkg/detectors/mixmax/mixmax.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mixpanel/mixpanel.go b/pkg/detectors/mixpanel/mixpanel.go index a28c4c626..6e9110a3c 100644 --- a/pkg/detectors/mixpanel/mixpanel.go +++ b/pkg/detectors/mixpanel/mixpanel.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mockaroo/mockaroo.go b/pkg/detectors/mockaroo/mockaroo.go index 7c18ace57..0fe00c1b1 100644 --- a/pkg/detectors/mockaroo/mockaroo.go +++ b/pkg/detectors/mockaroo/mockaroo.go @@ -62,12 +62,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if err == nil && len(t.Types) > 0 { s1.Verified = true } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/moderation/moderation.go b/pkg/detectors/moderation/moderation.go index 1a54841f8..49c230756 100644 --- a/pkg/detectors/moderation/moderation.go +++ b/pkg/detectors/moderation/moderation.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/monday/monday.go b/pkg/detectors/monday/monday.go index fe57e2c0f..e319fa763 100644 --- a/pkg/detectors/monday/monday.go +++ b/pkg/detectors/monday/monday.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/monkeylearn/monkeylearn.go b/pkg/detectors/monkeylearn/monkeylearn.go index 4a1c52f73..773fc7f48 100644 --- a/pkg/detectors/monkeylearn/monkeylearn.go +++ b/pkg/detectors/monkeylearn/monkeylearn.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/moonclerk/moonclerk.go b/pkg/detectors/moonclerk/moonclerk.go index e04384d66..083f3bc2f 100644 --- a/pkg/detectors/moonclerk/moonclerk.go +++ b/pkg/detectors/moonclerk/moonclerk.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/moosend/moosend.go b/pkg/detectors/moosend/moosend.go index 8ac552832..cbbb70794 100644 --- a/pkg/detectors/moosend/moosend.go +++ b/pkg/detectors/moosend/moosend.go @@ -62,12 +62,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if strings.Contains(body, "CreatedOn") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } - } } diff --git a/pkg/detectors/moralis/moralis.go b/pkg/detectors/moralis/moralis.go index 5c6c2d176..59a647ff7 100644 --- a/pkg/detectors/moralis/moralis.go +++ b/pkg/detectors/moralis/moralis.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mrticktock/mrticktock.go b/pkg/detectors/mrticktock/mrticktock.go index 75edeb164..c2fb5737f 100644 --- a/pkg/detectors/mrticktock/mrticktock.go +++ b/pkg/detectors/mrticktock/mrticktock.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if res.StatusCode >= 200 && res.StatusCode < 300 && strings.Contains(body, `"errors":[]`) { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/mux/mux.go b/pkg/detectors/mux/mux.go index 98c5159fa..ef2679da0 100644 --- a/pkg/detectors/mux/mux.go +++ b/pkg/detectors/mux/mux.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/myfreshworks/myfreshworks.go b/pkg/detectors/myfreshworks/myfreshworks.go index db93da3aa..c29801306 100644 --- a/pkg/detectors/myfreshworks/myfreshworks.go +++ b/pkg/detectors/myfreshworks/myfreshworks.go @@ -64,10 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/myintervals/myintervals.go b/pkg/detectors/myintervals/myintervals.go index 00c6dec4c..2bac40d34 100644 --- a/pkg/detectors/myintervals/myintervals.go +++ b/pkg/detectors/myintervals/myintervals.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/nasdaqdatalink/nasdaqdatalink.go b/pkg/detectors/nasdaqdatalink/nasdaqdatalink.go index db1fdc828..877373e90 100644 --- a/pkg/detectors/nasdaqdatalink/nasdaqdatalink.go +++ b/pkg/detectors/nasdaqdatalink/nasdaqdatalink.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/nethunt/nethunt.go b/pkg/detectors/nethunt/nethunt.go index ff23d922e..5e5ebdc04 100644 --- a/pkg/detectors/nethunt/nethunt.go +++ b/pkg/detectors/nethunt/nethunt.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/netlify/netlify.go b/pkg/detectors/netlify/netlify.go index b6ad55f4a..fdfde21ab 100644 --- a/pkg/detectors/netlify/netlify.go +++ b/pkg/detectors/netlify/netlify.go @@ -60,10 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/neutrinoapi/neutrinoapi.go b/pkg/detectors/neutrinoapi/neutrinoapi.go index 1ddf6f001..d5bc2da97 100644 --- a/pkg/detectors/neutrinoapi/neutrinoapi.go +++ b/pkg/detectors/neutrinoapi/neutrinoapi.go @@ -81,11 +81,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/newrelicpersonalapikey/newrelicpersonalapikey.go b/pkg/detectors/newrelicpersonalapikey/newrelicpersonalapikey.go index a024d2d95..c5e702545 100644 --- a/pkg/detectors/newrelicpersonalapikey/newrelicpersonalapikey.go +++ b/pkg/detectors/newrelicpersonalapikey/newrelicpersonalapikey.go @@ -62,21 +62,11 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, false) { - continue - } } } else if errEU == nil { defer resEU.Body.Close() if resEU.StatusCode >= 200 && resEU.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, false) { - continue - } } } } diff --git a/pkg/detectors/newsapi/newsapi.go b/pkg/detectors/newsapi/newsapi.go index e344e34a1..1864376b7 100644 --- a/pkg/detectors/newsapi/newsapi.go +++ b/pkg/detectors/newsapi/newsapi.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/newscatcher/newscatcher.go b/pkg/detectors/newscatcher/newscatcher.go index 8d0f49b6d..ccddc5b9c 100644 --- a/pkg/detectors/newscatcher/newscatcher.go +++ b/pkg/detectors/newscatcher/newscatcher.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/nexmoapikey/nexmoapikey.go b/pkg/detectors/nexmoapikey/nexmoapikey.go index 3012be318..19bdc4c9f 100644 --- a/pkg/detectors/nexmoapikey/nexmoapikey.go +++ b/pkg/detectors/nexmoapikey/nexmoapikey.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/nftport/nftport.go b/pkg/detectors/nftport/nftport.go index 3241d11a2..820392cd4 100644 --- a/pkg/detectors/nftport/nftport.go +++ b/pkg/detectors/nftport/nftport.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ngc/ngc.go b/pkg/detectors/ngc/ngc.go index ffd4bd3ec..8f707cb5d 100644 --- a/pkg/detectors/ngc/ngc.go +++ b/pkg/detectors/ngc/ngc.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ngrok/ngrok.go b/pkg/detectors/ngrok/ngrok.go index 52523ce6a..752882daa 100644 --- a/pkg/detectors/ngrok/ngrok.go +++ b/pkg/detectors/ngrok/ngrok.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/nicereply/nicereply.go b/pkg/detectors/nicereply/nicereply.go index aa8de838e..12bb87cb7 100644 --- a/pkg/detectors/nicereply/nicereply.go +++ b/pkg/detectors/nicereply/nicereply.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/nightfall/nightfall.go b/pkg/detectors/nightfall/nightfall.go index 105eed1fd..3fc22196e 100644 --- a/pkg/detectors/nightfall/nightfall.go +++ b/pkg/detectors/nightfall/nightfall.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/nimble/nimble.go b/pkg/detectors/nimble/nimble.go index 6f3fc1a0b..dab1a194a 100644 --- a/pkg/detectors/nimble/nimble.go +++ b/pkg/detectors/nimble/nimble.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/noticeable/noticeable.go b/pkg/detectors/noticeable/noticeable.go index 13331ab12..52aa4ab6b 100644 --- a/pkg/detectors/noticeable/noticeable.go +++ b/pkg/detectors/noticeable/noticeable.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/notion/notion.go b/pkg/detectors/notion/notion.go index 2d599f50f..dea8a9ea2 100644 --- a/pkg/detectors/notion/notion.go +++ b/pkg/detectors/notion/notion.go @@ -3,10 +3,11 @@ package notion import ( "context" "fmt" - regexp "github.com/wasilibs/go-re2" "net/http" "strings" + regexp "github.com/wasilibs/go-re2" + "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" @@ -63,14 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result // /v1/search, /v1/databases/*, etc. may work. s1.Verified = true - } else if res.StatusCode == 401 { - // The secret is determinately not verified (nothing to do) - // Nothing returns 401 on all requests not containing a api key. - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } else { s1.SetVerificationError(err, resMatch) diff --git a/pkg/detectors/nozbeteams/nozbeteams.go b/pkg/detectors/nozbeteams/nozbeteams.go index d2e230ba9..3282cdc9c 100644 --- a/pkg/detectors/nozbeteams/nozbeteams.go +++ b/pkg/detectors/nozbeteams/nozbeteams.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/npmtoken/npmtoken.go b/pkg/detectors/npmtoken/npmtoken.go index 06b5fb709..73a0f9800 100644 --- a/pkg/detectors/npmtoken/npmtoken.go +++ b/pkg/detectors/npmtoken/npmtoken.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/npmtokenv2/npmtokenv2.go b/pkg/detectors/npmtokenv2/npmtokenv2.go index e7eda9b96..15d54ba66 100644 --- a/pkg/detectors/npmtokenv2/npmtokenv2.go +++ b/pkg/detectors/npmtokenv2/npmtokenv2.go @@ -63,11 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/nugetapikey/nugetapikey.go b/pkg/detectors/nugetapikey/nugetapikey.go index f7d071063..4a7c6af99 100644 --- a/pkg/detectors/nugetapikey/nugetapikey.go +++ b/pkg/detectors/nugetapikey/nugetapikey.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result // we can either match on response code "400" or "Bad Request" response if res.StatusCode == 400 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/numverify/numverify.go b/pkg/detectors/numverify/numverify.go index cb13b7093..420668491 100644 --- a/pkg/detectors/numverify/numverify.go +++ b/pkg/detectors/numverify/numverify.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/nutritionix/nutritionix.go b/pkg/detectors/nutritionix/nutritionix.go index 9e038353d..8594761f1 100644 --- a/pkg/detectors/nutritionix/nutritionix.go +++ b/pkg/detectors/nutritionix/nutritionix.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/nylas/nylas.go b/pkg/detectors/nylas/nylas.go index 323eef573..c05e53460 100644 --- a/pkg/detectors/nylas/nylas.go +++ b/pkg/detectors/nylas/nylas.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/oanda/oanda.go b/pkg/detectors/oanda/oanda.go index c2f47a582..de31ae0c0 100644 --- a/pkg/detectors/oanda/oanda.go +++ b/pkg/detectors/oanda/oanda.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/okta/okta.go b/pkg/detectors/okta/okta.go index 165f603e8..a3a3d9785 100644 --- a/pkg/detectors/okta/okta.go +++ b/pkg/detectors/okta/okta.go @@ -75,12 +75,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified { - if detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, true) { - continue - } - } - results = append(results, s) } } diff --git a/pkg/detectors/omnisend/omnisend.go b/pkg/detectors/omnisend/omnisend.go index 8654d5523..c058f07b7 100644 --- a/pkg/detectors/omnisend/omnisend.go +++ b/pkg/detectors/omnisend/omnisend.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/onedesk/onedesk.go b/pkg/detectors/onedesk/onedesk.go index 4c71b6132..621e78f69 100644 --- a/pkg/detectors/onedesk/onedesk.go +++ b/pkg/detectors/onedesk/onedesk.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if res.StatusCode >= 200 && res.StatusCode < 300 && strings.Contains(body, `"code":"SUCCESS"`) { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/onelogin/onelogin.go b/pkg/detectors/onelogin/onelogin.go index f280a0481..d77a674a2 100644 --- a/pkg/detectors/onelogin/onelogin.go +++ b/pkg/detectors/onelogin/onelogin.go @@ -74,10 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified && detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s) } } diff --git a/pkg/detectors/onepagecrm/onepagecrm.go b/pkg/detectors/onepagecrm/onepagecrm.go index ee3df783e..d6e43e8c5 100644 --- a/pkg/detectors/onepagecrm/onepagecrm.go +++ b/pkg/detectors/onepagecrm/onepagecrm.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/onesignal/onesignal.go b/pkg/detectors/onesignal/onesignal.go index 259558167..1829a2188 100644 --- a/pkg/detectors/onesignal/onesignal.go +++ b/pkg/detectors/onesignal/onesignal.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/onwaterio/onwaterio.go b/pkg/detectors/onwaterio/onwaterio.go index 2c12fa389..725451a45 100644 --- a/pkg/detectors/onwaterio/onwaterio.go +++ b/pkg/detectors/onwaterio/onwaterio.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/oopspam/oopspam.go b/pkg/detectors/oopspam/oopspam.go index b3bebe57e..0199c2b46 100644 --- a/pkg/detectors/oopspam/oopspam.go +++ b/pkg/detectors/oopspam/oopspam.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/openai/openai.go b/pkg/detectors/openai/openai.go index 7b28b05b6..5e4442786 100644 --- a/pkg/detectors/openai/openai.go +++ b/pkg/detectors/openai/openai.go @@ -97,10 +97,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/opencagedata/opencagedata.go b/pkg/detectors/opencagedata/opencagedata.go index 110886d93..9b21e81e8 100644 --- a/pkg/detectors/opencagedata/opencagedata.go +++ b/pkg/detectors/opencagedata/opencagedata.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/openuv/openuv.go b/pkg/detectors/openuv/openuv.go index 1d0a0b512..1a9f4bb8f 100644 --- a/pkg/detectors/openuv/openuv.go +++ b/pkg/detectors/openuv/openuv.go @@ -57,12 +57,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/openvpn/openvpn.go b/pkg/detectors/openvpn/openvpn.go index 1bec5b2ff..ae229809e 100644 --- a/pkg/detectors/openvpn/openvpn.go +++ b/pkg/detectors/openvpn/openvpn.go @@ -89,10 +89,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(err, clientSecretRes) } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(clientSecretRes, detectors.DefaultFalsePositives, true) { - continue - } + results = append(results, s1) } } diff --git a/pkg/detectors/openweather/openweather.go b/pkg/detectors/openweather/openweather.go index 34d82de4c..747a37319 100644 --- a/pkg/detectors/openweather/openweather.go +++ b/pkg/detectors/openweather/openweather.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/opsgenie/opsgenie.go b/pkg/detectors/opsgenie/opsgenie.go index 020856aa1..5f2938c13 100644 --- a/pkg/detectors/opsgenie/opsgenie.go +++ b/pkg/detectors/opsgenie/opsgenie.go @@ -2,12 +2,13 @@ package opsgenie import ( "context" - "fmt" - regexp "github.com/wasilibs/go-re2" - "net/http" "encoding/json" + "fmt" + "net/http" "strings" + regexp "github.com/wasilibs/go-re2" + "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" "github.com/trufflesecurity/trufflehog/v3/pkg/pb/detectorspb" @@ -52,43 +53,43 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result Raw: []byte(resMatch), } - if verify { - // Check for false positives - if detectors.IsKnownFalsePositive(match[0], append(detectors.DefaultFalsePositives, "opsgenie.com/alert/detail/"), true) { - continue - } - req, err := http.NewRequestWithContext(ctx, "GET", "https://api.opsgenie.com/v2/alerts", nil) - if err != nil { + if strings.Contains(match[0], "opsgenie.com/alert/detail/") { continue - } - req.Header.Add("Authorization", fmt.Sprintf("GenieKey %s", resMatch)) - res, err := client.Do(req) - if err != nil { - continue - } - defer res.Body.Close() - - // Check for 200 status code - if res.StatusCode == 200 { - var data map[string]interface{} - err := json.NewDecoder(res.Body).Decode(&data) - if err != nil { - s1.Verified = false - continue - } - - // Check if "data" is one of the top-level attributes - if _, ok := data["data"]; ok { - s1.Verified = true - } else { - s1.Verified = false - } - } else { - s1.Verified = false - - } } + if verify { + + req, err := http.NewRequestWithContext(ctx, "GET", "https://api.opsgenie.com/v2/alerts", nil) + if err != nil { + continue + } + req.Header.Add("Authorization", fmt.Sprintf("GenieKey %s", resMatch)) + res, err := client.Do(req) + if err != nil { + continue + } + defer res.Body.Close() + + // Check for 200 status code + if res.StatusCode == 200 { + var data map[string]interface{} + err := json.NewDecoder(res.Body).Decode(&data) + if err != nil { + s1.Verified = false + continue + } + + // Check if "data" is one of the top-level attributes + if _, ok := data["data"]; ok { + s1.Verified = true + } else { + s1.Verified = false + } + } else { + s1.Verified = false + + } + } results = append(results, s1) } diff --git a/pkg/detectors/optimizely/optimizely.go b/pkg/detectors/optimizely/optimizely.go index 7601db444..f3a90e2b3 100644 --- a/pkg/detectors/optimizely/optimizely.go +++ b/pkg/detectors/optimizely/optimizely.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/overloop/overloop.go b/pkg/detectors/overloop/overloop.go index fcb583dca..61310545c 100644 --- a/pkg/detectors/overloop/overloop.go +++ b/pkg/detectors/overloop/overloop.go @@ -74,11 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/owlbot/owlbot.go b/pkg/detectors/owlbot/owlbot.go index abba80bba..d8ca5fea1 100644 --- a/pkg/detectors/owlbot/owlbot.go +++ b/pkg/detectors/owlbot/owlbot.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/packagecloud/packagecloud.go b/pkg/detectors/packagecloud/packagecloud.go index a03e27ccf..f7ec0ffb0 100644 --- a/pkg/detectors/packagecloud/packagecloud.go +++ b/pkg/detectors/packagecloud/packagecloud.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pagerdutyapikey/pagerdutyapikey.go b/pkg/detectors/pagerdutyapikey/pagerdutyapikey.go index 7b0c7b5ce..815641c7a 100644 --- a/pkg/detectors/pagerdutyapikey/pagerdutyapikey.go +++ b/pkg/detectors/pagerdutyapikey/pagerdutyapikey.go @@ -56,9 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/pandadoc/pandadoc.go b/pkg/detectors/pandadoc/pandadoc.go index ef8b1ff21..2c8a579c6 100644 --- a/pkg/detectors/pandadoc/pandadoc.go +++ b/pkg/detectors/pandadoc/pandadoc.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/paperform/paperform.go b/pkg/detectors/paperform/paperform.go index 558d14459..06e364a5c 100644 --- a/pkg/detectors/paperform/paperform.go +++ b/pkg/detectors/paperform/paperform.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/paralleldots/paralleldots.go b/pkg/detectors/paralleldots/paralleldots.go index c0e5cd17d..1af81ee28 100644 --- a/pkg/detectors/paralleldots/paralleldots.go +++ b/pkg/detectors/paralleldots/paralleldots.go @@ -84,11 +84,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if (res.StatusCode >= 200 && res.StatusCode < 300) && strings.Contains(body, "intent") { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/parsehub/parsehub.go b/pkg/detectors/parsehub/parsehub.go index 886497fd7..7da8861ae 100644 --- a/pkg/detectors/parsehub/parsehub.go +++ b/pkg/detectors/parsehub/parsehub.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/parsers/parsers.go b/pkg/detectors/parsers/parsers.go index 2885610e6..311428341 100644 --- a/pkg/detectors/parsers/parsers.go +++ b/pkg/detectors/parsers/parsers.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/parseur/parseur.go b/pkg/detectors/parseur/parseur.go index 206cc5617..f0e7dce37 100644 --- a/pkg/detectors/parseur/parseur.go +++ b/pkg/detectors/parseur/parseur.go @@ -57,13 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - if !s1.Verified { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } - results = append(results, s1) } diff --git a/pkg/detectors/partnerstack/partnerstack.go b/pkg/detectors/partnerstack/partnerstack.go index 6d15c8850..a0a81cc0b 100644 --- a/pkg/detectors/partnerstack/partnerstack.go +++ b/pkg/detectors/partnerstack/partnerstack.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pastebin/pastebin.go b/pkg/detectors/pastebin/pastebin.go index 70723d807..7e1abaace 100644 --- a/pkg/detectors/pastebin/pastebin.go +++ b/pkg/detectors/pastebin/pastebin.go @@ -87,11 +87,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/paydirtapp/paydirtapp.go b/pkg/detectors/paydirtapp/paydirtapp.go index ade5e315a..d74acd9d2 100644 --- a/pkg/detectors/paydirtapp/paydirtapp.go +++ b/pkg/detectors/paydirtapp/paydirtapp.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/paymoapp/paymoapp.go b/pkg/detectors/paymoapp/paymoapp.go index b59397ae9..13a9f4b41 100644 --- a/pkg/detectors/paymoapp/paymoapp.go +++ b/pkg/detectors/paymoapp/paymoapp.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/paymongo/paymongo.go b/pkg/detectors/paymongo/paymongo.go index f3c54f806..4ff0ab7b8 100644 --- a/pkg/detectors/paymongo/paymongo.go +++ b/pkg/detectors/paymongo/paymongo.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/paypaloauth/paypaloauth.go b/pkg/detectors/paypaloauth/paypaloauth.go index 1a9c58bf5..c52de5d51 100644 --- a/pkg/detectors/paypaloauth/paypaloauth.go +++ b/pkg/detectors/paypaloauth/paypaloauth.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resIDMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/paystack/paystack.go b/pkg/detectors/paystack/paystack.go index c470093a9..f7ee3c37d 100644 --- a/pkg/detectors/paystack/paystack.go +++ b/pkg/detectors/paystack/paystack.go @@ -57,10 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, false) { - continue - } } } } diff --git a/pkg/detectors/pdflayer/pdflayer.go b/pkg/detectors/pdflayer/pdflayer.go index 3caf35c36..e83d98957 100644 --- a/pkg/detectors/pdflayer/pdflayer.go +++ b/pkg/detectors/pdflayer/pdflayer.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pdfshift/pdfshift.go b/pkg/detectors/pdfshift/pdfshift.go index 218c5d764..9b480bcad 100644 --- a/pkg/detectors/pdfshift/pdfshift.go +++ b/pkg/detectors/pdfshift/pdfshift.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/peopledatalabs/peopledatalabs.go b/pkg/detectors/peopledatalabs/peopledatalabs.go index 6b8bf1a6f..bb406e373 100644 --- a/pkg/detectors/peopledatalabs/peopledatalabs.go +++ b/pkg/detectors/peopledatalabs/peopledatalabs.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pepipost/pepipost.go b/pkg/detectors/pepipost/pepipost.go index 3ecc2caa0..7a62e6804 100644 --- a/pkg/detectors/pepipost/pepipost.go +++ b/pkg/detectors/pepipost/pepipost.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/percy/percy.go b/pkg/detectors/percy/percy.go index 5c5c26a5d..ca6e64ae7 100644 --- a/pkg/detectors/percy/percy.go +++ b/pkg/detectors/percy/percy.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pinata/pinata.go b/pkg/detectors/pinata/pinata.go index f67c4924c..5103a2348 100644 --- a/pkg/detectors/pinata/pinata.go +++ b/pkg/detectors/pinata/pinata.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pipedream/pipedream.go b/pkg/detectors/pipedream/pipedream.go index f299366d0..e6d692b4b 100644 --- a/pkg/detectors/pipedream/pipedream.go +++ b/pkg/detectors/pipedream/pipedream.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pipedrive/pipedrive.go b/pkg/detectors/pipedrive/pipedrive.go index d78f66f4f..09ef200ba 100644 --- a/pkg/detectors/pipedrive/pipedrive.go +++ b/pkg/detectors/pipedrive/pipedrive.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pivotaltracker/pivotaltracker.go b/pkg/detectors/pivotaltracker/pivotaltracker.go index efe177d66..d0e37ce4f 100644 --- a/pkg/detectors/pivotaltracker/pivotaltracker.go +++ b/pkg/detectors/pivotaltracker/pivotaltracker.go @@ -65,10 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified && detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s) } diff --git a/pkg/detectors/pixabay/pixabay.go b/pkg/detectors/pixabay/pixabay.go index df7c38a59..df09f2f05 100644 --- a/pkg/detectors/pixabay/pixabay.go +++ b/pkg/detectors/pixabay/pixabay.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/plaidkey/plaidkey.go b/pkg/detectors/plaidkey/plaidkey.go index 1158145fc..365ac7daf 100644 --- a/pkg/detectors/plaidkey/plaidkey.go +++ b/pkg/detectors/plaidkey/plaidkey.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true s1.ExtraData = map[string]string{"environment": fmt.Sprintf("https://%s.plaid.com", env)} - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/planviewleankit/planviewleankit.go b/pkg/detectors/planviewleankit/planviewleankit.go index 82b52b871..079e38b12 100644 --- a/pkg/detectors/planviewleankit/planviewleankit.go +++ b/pkg/detectors/planviewleankit/planviewleankit.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/planyo/planyo.go b/pkg/detectors/planyo/planyo.go index 447a0c132..e5a33be83 100644 --- a/pkg/detectors/planyo/planyo.go +++ b/pkg/detectors/planyo/planyo.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result validResponse := strings.Contains(body, "data") || strings.Contains(body, "Your Planyo site has expired") if res.StatusCode >= 200 && res.StatusCode < 300 && validResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/plivo/plivo.go b/pkg/detectors/plivo/plivo.go index 827a5129e..28fd635ab 100644 --- a/pkg/detectors/plivo/plivo.go +++ b/pkg/detectors/plivo/plivo.go @@ -68,10 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/podio/podio.go b/pkg/detectors/podio/podio.go index 5dfd16b99..3978c4266 100644 --- a/pkg/detectors/podio/podio.go +++ b/pkg/detectors/podio/podio.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pollsapi/pollsapi.go b/pkg/detectors/pollsapi/pollsapi.go index 3152f3332..6d305def6 100644 --- a/pkg/detectors/pollsapi/pollsapi.go +++ b/pkg/detectors/pollsapi/pollsapi.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/poloniex/poloniex.go b/pkg/detectors/poloniex/poloniex.go index f79d706e3..8c7a0c359 100644 --- a/pkg/detectors/poloniex/poloniex.go +++ b/pkg/detectors/poloniex/poloniex.go @@ -83,15 +83,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - - if detectors.IsKnownFalsePositive(resSecretMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/polygon/polygon.go b/pkg/detectors/polygon/polygon.go index 670a9440c..d3da6a4ce 100644 --- a/pkg/detectors/polygon/polygon.go +++ b/pkg/detectors/polygon/polygon.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/portainer/portainer.go b/pkg/detectors/portainer/portainer.go index 6cf41f46a..fa93bc65e 100644 --- a/pkg/detectors/portainer/portainer.go +++ b/pkg/detectors/portainer/portainer.go @@ -80,9 +80,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } + if len(endpointMatches) > 0 { results = append(results, s1) diff --git a/pkg/detectors/portainertoken/portainertoken.go b/pkg/detectors/portainertoken/portainertoken.go index 74edd57e9..f3925a6ed 100644 --- a/pkg/detectors/portainertoken/portainertoken.go +++ b/pkg/detectors/portainertoken/portainertoken.go @@ -83,10 +83,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - if len(endpointMatches) > 0 { results = append(results, s1) } diff --git a/pkg/detectors/positionstack/positionstack.go b/pkg/detectors/positionstack/positionstack.go index 4e7c79425..7001be451 100644 --- a/pkg/detectors/positionstack/positionstack.go +++ b/pkg/detectors/positionstack/positionstack.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/postageapp/postageapp.go b/pkg/detectors/postageapp/postageapp.go index af37f42d0..3f119e824 100644 --- a/pkg/detectors/postageapp/postageapp.go +++ b/pkg/detectors/postageapp/postageapp.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/postbacks/postbacks.go b/pkg/detectors/postbacks/postbacks.go index dff601eb4..8c4c00f22 100644 --- a/pkg/detectors/postbacks/postbacks.go +++ b/pkg/detectors/postbacks/postbacks.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/postgres/postgres.go b/pkg/detectors/postgres/postgres.go index a5b2cae3e..09ec98d92 100644 --- a/pkg/detectors/postgres/postgres.go +++ b/pkg/detectors/postgres/postgres.go @@ -138,9 +138,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) ([]dete pg_sslmode: sslmode, } - if !result.Verified && detectors.IsKnownFalsePositive(password, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, result) } diff --git a/pkg/detectors/posthog/posthog.go b/pkg/detectors/posthog/posthog.go index 0ca7970d0..ca47572c4 100644 --- a/pkg/detectors/posthog/posthog.go +++ b/pkg/detectors/posthog/posthog.go @@ -68,17 +68,8 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/postman/postman.go b/pkg/detectors/postman/postman.go index 068458259..bc25323f4 100644 --- a/pkg/detectors/postman/postman.go +++ b/pkg/detectors/postman/postman.go @@ -58,9 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/postmark/postmark.go b/pkg/detectors/postmark/postmark.go index 82a0c0c5e..1ffe18df0 100644 --- a/pkg/detectors/postmark/postmark.go +++ b/pkg/detectors/postmark/postmark.go @@ -58,10 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/powrbot/powrbot.go b/pkg/detectors/powrbot/powrbot.go index fcc713cab..16b7790fd 100644 --- a/pkg/detectors/powrbot/powrbot.go +++ b/pkg/detectors/powrbot/powrbot.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/prefect/prefect.go b/pkg/detectors/prefect/prefect.go index 6e8f099b6..c9d6dc0a2 100644 --- a/pkg/detectors/prefect/prefect.go +++ b/pkg/detectors/prefect/prefect.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/privacy/privacy.go b/pkg/detectors/privacy/privacy.go index 0818e9544..f85a3ad62 100644 --- a/pkg/detectors/privacy/privacy.go +++ b/pkg/detectors/privacy/privacy.go @@ -74,11 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/prodpad/prodpad.go b/pkg/detectors/prodpad/prodpad.go index 72768713b..384ff3e21 100644 --- a/pkg/detectors/prodpad/prodpad.go +++ b/pkg/detectors/prodpad/prodpad.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/prospectcrm/prospectcrm.go b/pkg/detectors/prospectcrm/prospectcrm.go index fd86a61f3..fcfeb4629 100644 --- a/pkg/detectors/prospectcrm/prospectcrm.go +++ b/pkg/detectors/prospectcrm/prospectcrm.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/protocolsio/protocolsio.go b/pkg/detectors/protocolsio/protocolsio.go index 590770e96..4ffa176e8 100644 --- a/pkg/detectors/protocolsio/protocolsio.go +++ b/pkg/detectors/protocolsio/protocolsio.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/proxycrawl/proxycrawl.go b/pkg/detectors/proxycrawl/proxycrawl.go index 30ab7d8ac..86b56ebb2 100644 --- a/pkg/detectors/proxycrawl/proxycrawl.go +++ b/pkg/detectors/proxycrawl/proxycrawl.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pubnubpublishkey/pubnubpublishkey.go b/pkg/detectors/pubnubpublishkey/pubnubpublishkey.go index a672dc132..656637799 100644 --- a/pkg/detectors/pubnubpublishkey/pubnubpublishkey.go +++ b/pkg/detectors/pubnubpublishkey/pubnubpublishkey.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key - // appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } } diff --git a/pkg/detectors/pubnubsubscriptionkey/pubnubsubscriptionkey.go b/pkg/detectors/pubnubsubscriptionkey/pubnubsubscriptionkey.go index 72f80ff73..f5017000f 100644 --- a/pkg/detectors/pubnubsubscriptionkey/pubnubsubscriptionkey.go +++ b/pkg/detectors/pubnubsubscriptionkey/pubnubsubscriptionkey.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pulumi/pulumi.go b/pkg/detectors/pulumi/pulumi.go index ebaa574fc..27ce74f78 100644 --- a/pkg/detectors/pulumi/pulumi.go +++ b/pkg/detectors/pulumi/pulumi.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/purestake/purestake.go b/pkg/detectors/purestake/purestake.go index 5e35637a1..831fa5b18 100644 --- a/pkg/detectors/purestake/purestake.go +++ b/pkg/detectors/purestake/purestake.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pushbulletapikey/pushbulletapikey.go b/pkg/detectors/pushbulletapikey/pushbulletapikey.go index 6aec6262f..715c6c49f 100644 --- a/pkg/detectors/pushbulletapikey/pushbulletapikey.go +++ b/pkg/detectors/pushbulletapikey/pushbulletapikey.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/pusherchannelkey/pusherchannelkey.go b/pkg/detectors/pusherchannelkey/pusherchannelkey.go index b97506c99..1e56891da 100644 --- a/pkg/detectors/pusherchannelkey/pusherchannelkey.go +++ b/pkg/detectors/pusherchannelkey/pusherchannelkey.go @@ -111,11 +111,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(ressecretMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/qase/qase.go b/pkg/detectors/qase/qase.go index 64d17dfbb..d4eaf50df 100644 --- a/pkg/detectors/qase/qase.go +++ b/pkg/detectors/qase/qase.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/qualaroo/qualaroo.go b/pkg/detectors/qualaroo/qualaroo.go index c92d6bb40..2a5341d34 100644 --- a/pkg/detectors/qualaroo/qualaroo.go +++ b/pkg/detectors/qualaroo/qualaroo.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/qubole/qubole.go b/pkg/detectors/qubole/qubole.go index 6725cd6de..39932a72a 100644 --- a/pkg/detectors/qubole/qubole.go +++ b/pkg/detectors/qubole/qubole.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/rabbitmq/rabbitmq.go b/pkg/detectors/rabbitmq/rabbitmq.go index 6526252fc..9528ec15a 100644 --- a/pkg/detectors/rabbitmq/rabbitmq.go +++ b/pkg/detectors/rabbitmq/rabbitmq.go @@ -76,10 +76,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified && detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, false) { - continue - } - results = append(results, s) } diff --git a/pkg/detectors/ramp/ramp.go b/pkg/detectors/ramp/ramp.go index 2437abb23..fb03a0ac2 100644 --- a/pkg/detectors/ramp/ramp.go +++ b/pkg/detectors/ramp/ramp.go @@ -93,11 +93,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/rapidapi/rapidapi.go b/pkg/detectors/rapidapi/rapidapi.go index 19a0e8f96..38ee1791d 100644 --- a/pkg/detectors/rapidapi/rapidapi.go +++ b/pkg/detectors/rapidapi/rapidapi.go @@ -56,10 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/raven/raven.go b/pkg/detectors/raven/raven.go index 3b6fadebf..92bce8be0 100644 --- a/pkg/detectors/raven/raven.go +++ b/pkg/detectors/raven/raven.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/rawg/rawg.go b/pkg/detectors/rawg/rawg.go index 5311b4c5c..464e0eca0 100644 --- a/pkg/detectors/rawg/rawg.go +++ b/pkg/detectors/rawg/rawg.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/razorpay/razorpay.go b/pkg/detectors/razorpay/razorpay.go index 441609f41..4a7819aba 100644 --- a/pkg/detectors/razorpay/razorpay.go +++ b/pkg/detectors/razorpay/razorpay.go @@ -70,10 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(key, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/reachmail/reachmail.go b/pkg/detectors/reachmail/reachmail.go index ebf2c3c07..7756c5099 100644 --- a/pkg/detectors/reachmail/reachmail.go +++ b/pkg/detectors/reachmail/reachmail.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/readme/readme.go b/pkg/detectors/readme/readme.go index 4d40c89fd..ecb4826f5 100644 --- a/pkg/detectors/readme/readme.go +++ b/pkg/detectors/readme/readme.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/reallysimplesystems/reallysimplesystems.go b/pkg/detectors/reallysimplesystems/reallysimplesystems.go index ab66106ce..a8eb0cbe7 100644 --- a/pkg/detectors/reallysimplesystems/reallysimplesystems.go +++ b/pkg/detectors/reallysimplesystems/reallysimplesystems.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/rebrandly/rebrandly.go b/pkg/detectors/rebrandly/rebrandly.go index 61a4232e4..16057153b 100644 --- a/pkg/detectors/rebrandly/rebrandly.go +++ b/pkg/detectors/rebrandly/rebrandly.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/rechargepayments/rechargepayments.go b/pkg/detectors/rechargepayments/rechargepayments.go index c55351096..53f2a3f21 100644 --- a/pkg/detectors/rechargepayments/rechargepayments.go +++ b/pkg/detectors/rechargepayments/rechargepayments.go @@ -62,10 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified && detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s) } } diff --git a/pkg/detectors/redis/redis.go b/pkg/detectors/redis/redis.go index 810da6849..044305d27 100644 --- a/pkg/detectors/redis/redis.go +++ b/pkg/detectors/redis/redis.go @@ -73,10 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified && detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, false) { - continue - } - results = append(results, s) } @@ -116,10 +112,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified && detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, false) { - continue - } - results = append(results, s) } diff --git a/pkg/detectors/refiner/refiner.go b/pkg/detectors/refiner/refiner.go index 6736f689a..924fc000b 100644 --- a/pkg/detectors/refiner/refiner.go +++ b/pkg/detectors/refiner/refiner.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/rentman/rentman.go b/pkg/detectors/rentman/rentman.go index adabbc285..d7f23577f 100644 --- a/pkg/detectors/rentman/rentman.go +++ b/pkg/detectors/rentman/rentman.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/repairshopr/repairshopr.go b/pkg/detectors/repairshopr/repairshopr.go index 34e3516ac..37f9182be 100644 --- a/pkg/detectors/repairshopr/repairshopr.go +++ b/pkg/detectors/repairshopr/repairshopr.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/replicate/replicate.go b/pkg/detectors/replicate/replicate.go index 893b56867..229083ef5 100644 --- a/pkg/detectors/replicate/replicate.go +++ b/pkg/detectors/replicate/replicate.go @@ -70,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/replyio/replyio.go b/pkg/detectors/replyio/replyio.go index 9583529fe..4d1164a1b 100644 --- a/pkg/detectors/replyio/replyio.go +++ b/pkg/detectors/replyio/replyio.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/requestfinance/requestfinance.go b/pkg/detectors/requestfinance/requestfinance.go index 462112c29..815362520 100644 --- a/pkg/detectors/requestfinance/requestfinance.go +++ b/pkg/detectors/requestfinance/requestfinance.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/restpack/restpack.go b/pkg/detectors/restpack/restpack.go index e53bb862c..2f2e43804 100644 --- a/pkg/detectors/restpack/restpack.go +++ b/pkg/detectors/restpack/restpack.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/restpackhtmltopdfapi/restpackhtmltopdfapi.go b/pkg/detectors/restpackhtmltopdfapi/restpackhtmltopdfapi.go index 00683d584..2935df586 100644 --- a/pkg/detectors/restpackhtmltopdfapi/restpackhtmltopdfapi.go +++ b/pkg/detectors/restpackhtmltopdfapi/restpackhtmltopdfapi.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/restpackscreenshotapi/restpackscreenshotapi.go b/pkg/detectors/restpackscreenshotapi/restpackscreenshotapi.go index 63d0eaa55..2e62c04cf 100644 --- a/pkg/detectors/restpackscreenshotapi/restpackscreenshotapi.go +++ b/pkg/detectors/restpackscreenshotapi/restpackscreenshotapi.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/rev/rev.go b/pkg/detectors/rev/rev.go index 708c4ebc2..8ca7a4979 100644 --- a/pkg/detectors/rev/rev.go +++ b/pkg/detectors/rev/rev.go @@ -66,15 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resUserMatch, detectors.DefaultFalsePositives, true) { - continue - } - - if detectors.IsKnownFalsePositive(resClientMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/revampcrm/revampcrm.go b/pkg/detectors/revampcrm/revampcrm.go index fc5ee627d..2c9d2ca84 100644 --- a/pkg/detectors/revampcrm/revampcrm.go +++ b/pkg/detectors/revampcrm/revampcrm.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ringcentral/ringcentral.go b/pkg/detectors/ringcentral/ringcentral.go index 97522725b..f20268656 100644 --- a/pkg/detectors/ringcentral/ringcentral.go +++ b/pkg/detectors/ringcentral/ringcentral.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ritekit/ritekit.go b/pkg/detectors/ritekit/ritekit.go index 0bd17af69..5fdd7d241 100644 --- a/pkg/detectors/ritekit/ritekit.go +++ b/pkg/detectors/ritekit/ritekit.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/roaring/roaring.go b/pkg/detectors/roaring/roaring.go index ca25056f3..356d0914a 100644 --- a/pkg/detectors/roaring/roaring.go +++ b/pkg/detectors/roaring/roaring.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resSecret, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/rocketreach/rocketreach.go b/pkg/detectors/rocketreach/rocketreach.go index 19cff56c5..f706e791b 100644 --- a/pkg/detectors/rocketreach/rocketreach.go +++ b/pkg/detectors/rocketreach/rocketreach.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/rockset/rockset.go b/pkg/detectors/rockset/rockset.go index 459b19a0c..de3baa507 100644 --- a/pkg/detectors/rockset/rockset.go +++ b/pkg/detectors/rockset/rockset.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/roninapp/roninapp.go b/pkg/detectors/roninapp/roninapp.go index 44c30e05b..020af6450 100644 --- a/pkg/detectors/roninapp/roninapp.go +++ b/pkg/detectors/roninapp/roninapp.go @@ -70,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/route4me/route4me.go b/pkg/detectors/route4me/route4me.go index 3668f7d48..dbebd5130 100644 --- a/pkg/detectors/route4me/route4me.go +++ b/pkg/detectors/route4me/route4me.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/rownd/rownd.go b/pkg/detectors/rownd/rownd.go index ec71e141d..67aab70b2 100644 --- a/pkg/detectors/rownd/rownd.go +++ b/pkg/detectors/rownd/rownd.go @@ -77,11 +77,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(keyMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/rubygems/rubygems.go b/pkg/detectors/rubygems/rubygems.go index 56f8702a0..c90da120c 100644 --- a/pkg/detectors/rubygems/rubygems.go +++ b/pkg/detectors/rubygems/rubygems.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 || res.StatusCode == http.StatusForbidden { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/runrunit/runrunit.go b/pkg/detectors/runrunit/runrunit.go index 5587d2fd7..4df932dbd 100644 --- a/pkg/detectors/runrunit/runrunit.go +++ b/pkg/detectors/runrunit/runrunit.go @@ -66,15 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - - if detectors.IsKnownFalsePositive(resUserTokenMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/salesblink/salesblink.go b/pkg/detectors/salesblink/salesblink.go index 86786c7f9..0a8a07633 100644 --- a/pkg/detectors/salesblink/salesblink.go +++ b/pkg/detectors/salesblink/salesblink.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/salescookie/salescookie.go b/pkg/detectors/salescookie/salescookie.go index aadf992ec..9cd4a071a 100644 --- a/pkg/detectors/salescookie/salescookie.go +++ b/pkg/detectors/salescookie/salescookie.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/salesflare/salesflare.go b/pkg/detectors/salesflare/salesflare.go index 6c3f9bbd2..ee62c241a 100644 --- a/pkg/detectors/salesflare/salesflare.go +++ b/pkg/detectors/salesflare/salesflare.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/salesmate/salesmate.go b/pkg/detectors/salesmate/salesmate.go index 1c5a17e8a..273928a2c 100644 --- a/pkg/detectors/salesmate/salesmate.go +++ b/pkg/detectors/salesmate/salesmate.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/satismeterprojectkey/satismeterprojectkey.go b/pkg/detectors/satismeterprojectkey/satismeterprojectkey.go index c9a7ae4a7..01bcdb9d3 100644 --- a/pkg/detectors/satismeterprojectkey/satismeterprojectkey.go +++ b/pkg/detectors/satismeterprojectkey/satismeterprojectkey.go @@ -80,11 +80,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/satismeterwritekey/satismeterwritekey.go b/pkg/detectors/satismeterwritekey/satismeterwritekey.go index 0435ee7e6..d49aa91b9 100644 --- a/pkg/detectors/satismeterwritekey/satismeterwritekey.go +++ b/pkg/detectors/satismeterwritekey/satismeterwritekey.go @@ -63,11 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/saucelabs/saucelabs.go b/pkg/detectors/saucelabs/saucelabs.go index 40114bfcf..9544a0cbd 100644 --- a/pkg/detectors/saucelabs/saucelabs.go +++ b/pkg/detectors/saucelabs/saucelabs.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(keyMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/scalewaykey/scalewaykey.go b/pkg/detectors/scalewaykey/scalewaykey.go index 6946c690c..daaf76d20 100644 --- a/pkg/detectors/scalewaykey/scalewaykey.go +++ b/pkg/detectors/scalewaykey/scalewaykey.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, false) { - continue - } } } } diff --git a/pkg/detectors/scalr/scalr.go b/pkg/detectors/scalr/scalr.go index 76e53cd9b..a2a80c39f 100644 --- a/pkg/detectors/scalr/scalr.go +++ b/pkg/detectors/scalr/scalr.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/scrapeowl/scrapeowl.go b/pkg/detectors/scrapeowl/scrapeowl.go index ad9d0dfe2..566383b00 100644 --- a/pkg/detectors/scrapeowl/scrapeowl.go +++ b/pkg/detectors/scrapeowl/scrapeowl.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/scraperapi/scraperapi.go b/pkg/detectors/scraperapi/scraperapi.go index 75add0eae..a69374868 100644 --- a/pkg/detectors/scraperapi/scraperapi.go +++ b/pkg/detectors/scraperapi/scraperapi.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/scraperbox/scraperbox.go b/pkg/detectors/scraperbox/scraperbox.go index 0f3b9de81..1d5439f8d 100644 --- a/pkg/detectors/scraperbox/scraperbox.go +++ b/pkg/detectors/scraperbox/scraperbox.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/scrapestack/scrapestack.go b/pkg/detectors/scrapestack/scrapestack.go index 2407d8806..4f57b751e 100644 --- a/pkg/detectors/scrapestack/scrapestack.go +++ b/pkg/detectors/scrapestack/scrapestack.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/scrapfly/scrapfly.go b/pkg/detectors/scrapfly/scrapfly.go index cd0059b0f..ce97f374a 100644 --- a/pkg/detectors/scrapfly/scrapfly.go +++ b/pkg/detectors/scrapfly/scrapfly.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/scrapingant/scrapingant.go b/pkg/detectors/scrapingant/scrapingant.go index f838affe5..5aba39bfa 100644 --- a/pkg/detectors/scrapingant/scrapingant.go +++ b/pkg/detectors/scrapingant/scrapingant.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/scrapingbee/scrapingbee.go b/pkg/detectors/scrapingbee/scrapingbee.go index 1aa17c65a..9f9c654bd 100644 --- a/pkg/detectors/scrapingbee/scrapingbee.go +++ b/pkg/detectors/scrapingbee/scrapingbee.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/screenshotapi/screenshotapi.go b/pkg/detectors/screenshotapi/screenshotapi.go index b330ea55e..dfbbef53c 100644 --- a/pkg/detectors/screenshotapi/screenshotapi.go +++ b/pkg/detectors/screenshotapi/screenshotapi.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } if res.StatusCode >= 200 && res.StatusCode < 300 && r.Screenshot != "" { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/screenshotlayer/screenshotlayer.go b/pkg/detectors/screenshotlayer/screenshotlayer.go index e04d645d6..39c174e27 100644 --- a/pkg/detectors/screenshotlayer/screenshotlayer.go +++ b/pkg/detectors/screenshotlayer/screenshotlayer.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/scrutinizerci/scrutinizerci.go b/pkg/detectors/scrutinizerci/scrutinizerci.go index 7f832df3c..b662b331a 100644 --- a/pkg/detectors/scrutinizerci/scrutinizerci.go +++ b/pkg/detectors/scrutinizerci/scrutinizerci.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/securitytrails/securitytrails.go b/pkg/detectors/securitytrails/securitytrails.go index 401a14391..84bfe0ba6 100644 --- a/pkg/detectors/securitytrails/securitytrails.go +++ b/pkg/detectors/securitytrails/securitytrails.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/segmentapikey/segmentapikey.go b/pkg/detectors/segmentapikey/segmentapikey.go index 3f0ff5d3d..f3d2ba891 100644 --- a/pkg/detectors/segmentapikey/segmentapikey.go +++ b/pkg/detectors/segmentapikey/segmentapikey.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/selectpdf/selectpdf.go b/pkg/detectors/selectpdf/selectpdf.go index a4b8cc807..e3993a03e 100644 --- a/pkg/detectors/selectpdf/selectpdf.go +++ b/pkg/detectors/selectpdf/selectpdf.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/semaphore/semaphore.go b/pkg/detectors/semaphore/semaphore.go index 1dbe1d68a..098d71bdd 100644 --- a/pkg/detectors/semaphore/semaphore.go +++ b/pkg/detectors/semaphore/semaphore.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if res.StatusCode >= 200 && res.StatusCode < 300 && strings.Contains(body, "account_id") { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/sendbird/sendbird.go b/pkg/detectors/sendbird/sendbird.go index dce9dd082..51fe9165a 100644 --- a/pkg/detectors/sendbird/sendbird.go +++ b/pkg/detectors/sendbird/sendbird.go @@ -104,10 +104,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } } diff --git a/pkg/detectors/sendbirdorganizationapi/sendbirdorganizationapi.go b/pkg/detectors/sendbirdorganizationapi/sendbirdorganizationapi.go index 74f846f20..6bc71aa0f 100644 --- a/pkg/detectors/sendbirdorganizationapi/sendbirdorganizationapi.go +++ b/pkg/detectors/sendbirdorganizationapi/sendbirdorganizationapi.go @@ -74,10 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/sendgrid/sendgrid.go b/pkg/detectors/sendgrid/sendgrid.go index 661e9053f..e00cb2a2e 100644 --- a/pkg/detectors/sendgrid/sendgrid.go +++ b/pkg/detectors/sendgrid/sendgrid.go @@ -85,10 +85,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/sendinbluev2/sendinbluev2.go b/pkg/detectors/sendinbluev2/sendinbluev2.go index b7c6aa41d..e33eac6c7 100644 --- a/pkg/detectors/sendinbluev2/sendinbluev2.go +++ b/pkg/detectors/sendinbluev2/sendinbluev2.go @@ -56,10 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, false) { - continue - } } } } diff --git a/pkg/detectors/sentrytoken/sentrytoken.go b/pkg/detectors/sentrytoken/sentrytoken.go index 0e32137af..ce73fdd65 100644 --- a/pkg/detectors/sentrytoken/sentrytoken.go +++ b/pkg/detectors/sentrytoken/sentrytoken.go @@ -70,9 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/detectors/serphouse/serphouse.go b/pkg/detectors/serphouse/serphouse.go index b3fb4ed37..7dfd7ba01 100644 --- a/pkg/detectors/serphouse/serphouse.go +++ b/pkg/detectors/serphouse/serphouse.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/serpstack/serpstack.go b/pkg/detectors/serpstack/serpstack.go index b1a048c4d..fb92a530a 100644 --- a/pkg/detectors/serpstack/serpstack.go +++ b/pkg/detectors/serpstack/serpstack.go @@ -69,11 +69,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/sheety/sheety.go b/pkg/detectors/sheety/sheety.go index bd32c4521..5f990d1a5 100644 --- a/pkg/detectors/sheety/sheety.go +++ b/pkg/detectors/sheety/sheety.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/sherpadesk/sherpadesk.go b/pkg/detectors/sherpadesk/sherpadesk.go index b4d5215cc..79bcee05b 100644 --- a/pkg/detectors/sherpadesk/sherpadesk.go +++ b/pkg/detectors/sherpadesk/sherpadesk.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/shipday/shipday.go b/pkg/detectors/shipday/shipday.go index cbdf31374..97474c345 100644 --- a/pkg/detectors/shipday/shipday.go +++ b/pkg/detectors/shipday/shipday.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/shodankey/shodankey.go b/pkg/detectors/shodankey/shodankey.go index eefb364c7..58a66b015 100644 --- a/pkg/detectors/shodankey/shodankey.go +++ b/pkg/detectors/shodankey/shodankey.go @@ -51,9 +51,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if verify { s1.Verified = verifyToken(ctx, client, resMatch) - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } results = append(results, s1) } diff --git a/pkg/detectors/shopify/shopify.go b/pkg/detectors/shopify/shopify.go index a86151e15..187889f17 100644 --- a/pkg/detectors/shopify/shopify.go +++ b/pkg/detectors/shopify/shopify.go @@ -74,11 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } res.Body.Close() } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(key, detectors.DefaultFalsePositives, true) { - continue - } } } diff --git a/pkg/detectors/shortcut/shortcut.go b/pkg/detectors/shortcut/shortcut.go index 33ea6e3f9..764e548ef 100644 --- a/pkg/detectors/shortcut/shortcut.go +++ b/pkg/detectors/shortcut/shortcut.go @@ -51,13 +51,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - if !s1.Verified { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } - results = append(results, s1) } return results, nil diff --git a/pkg/detectors/shotstack/shotstack.go b/pkg/detectors/shotstack/shotstack.go index daf5420ec..b3d46f752 100644 --- a/pkg/detectors/shotstack/shotstack.go +++ b/pkg/detectors/shotstack/shotstack.go @@ -89,11 +89,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/shutterstock/shutterstock.go b/pkg/detectors/shutterstock/shutterstock.go index e128b8d74..c097d8202 100644 --- a/pkg/detectors/shutterstock/shutterstock.go +++ b/pkg/detectors/shutterstock/shutterstock.go @@ -66,15 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - - if detectors.IsKnownFalsePositive(resSecretMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/shutterstockoauth/shutterstockoauth.go b/pkg/detectors/shutterstockoauth/shutterstockoauth.go index 88721a82d..5f9076b43 100644 --- a/pkg/detectors/shutterstockoauth/shutterstockoauth.go +++ b/pkg/detectors/shutterstockoauth/shutterstockoauth.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/signable/signable.go b/pkg/detectors/signable/signable.go index 42f582602..8e13d562a 100644 --- a/pkg/detectors/signable/signable.go +++ b/pkg/detectors/signable/signable.go @@ -63,11 +63,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/signalwire/signalwire.go b/pkg/detectors/signalwire/signalwire.go index 4b4d571c9..a617a867c 100644 --- a/pkg/detectors/signalwire/signalwire.go +++ b/pkg/detectors/signalwire/signalwire.go @@ -78,11 +78,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/signaturit/signaturit.go b/pkg/detectors/signaturit/signaturit.go index fe47d46f4..c34b712b0 100644 --- a/pkg/detectors/signaturit/signaturit.go +++ b/pkg/detectors/signaturit/signaturit.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/signupgenius/signupgenius.go b/pkg/detectors/signupgenius/signupgenius.go index cfd8ee21b..044e8614b 100644 --- a/pkg/detectors/signupgenius/signupgenius.go +++ b/pkg/detectors/signupgenius/signupgenius.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/sigopt/sigopt.go b/pkg/detectors/sigopt/sigopt.go index 0bcb2a257..4055f93d2 100644 --- a/pkg/detectors/sigopt/sigopt.go +++ b/pkg/detectors/sigopt/sigopt.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/simfin/simfin.go b/pkg/detectors/simfin/simfin.go index 9a0191444..1fce9b07c 100644 --- a/pkg/detectors/simfin/simfin.go +++ b/pkg/detectors/simfin/simfin.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 && validResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/simplesat/simplesat.go b/pkg/detectors/simplesat/simplesat.go index c032191c1..9cea1ae9a 100644 --- a/pkg/detectors/simplesat/simplesat.go +++ b/pkg/detectors/simplesat/simplesat.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/simplynoted/simplynoted.go b/pkg/detectors/simplynoted/simplynoted.go index 6bfef10f9..ea07439db 100644 --- a/pkg/detectors/simplynoted/simplynoted.go +++ b/pkg/detectors/simplynoted/simplynoted.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/simvoly/simvoly.go b/pkg/detectors/simvoly/simvoly.go index b9ab8d04c..935265f22 100644 --- a/pkg/detectors/simvoly/simvoly.go +++ b/pkg/detectors/simvoly/simvoly.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/sinchmessage/sinchmessage.go b/pkg/detectors/sinchmessage/sinchmessage.go index 4e8f154e1..eb67ecb7c 100644 --- a/pkg/detectors/sinchmessage/sinchmessage.go +++ b/pkg/detectors/sinchmessage/sinchmessage.go @@ -72,11 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/sirv/sirv.go b/pkg/detectors/sirv/sirv.go index 0615c0bf1..566553267 100644 --- a/pkg/detectors/sirv/sirv.go +++ b/pkg/detectors/sirv/sirv.go @@ -70,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/siteleaf/siteleaf.go b/pkg/detectors/siteleaf/siteleaf.go index 57a0ee379..a3a3bcabd 100644 --- a/pkg/detectors/siteleaf/siteleaf.go +++ b/pkg/detectors/siteleaf/siteleaf.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/skrappio/skrappio.go b/pkg/detectors/skrappio/skrappio.go index b3d2d172d..f23e90fd1 100644 --- a/pkg/detectors/skrappio/skrappio.go +++ b/pkg/detectors/skrappio/skrappio.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/skybiometry/skybiometry.go b/pkg/detectors/skybiometry/skybiometry.go index 18ae10862..297f5a565 100644 --- a/pkg/detectors/skybiometry/skybiometry.go +++ b/pkg/detectors/skybiometry/skybiometry.go @@ -70,15 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - - if detectors.IsKnownFalsePositive(resSecretMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/slack/slack.go b/pkg/detectors/slack/slack.go index dc217a16f..275fe8e0e 100644 --- a/pkg/detectors/slack/slack.go +++ b/pkg/detectors/slack/slack.go @@ -106,10 +106,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/smartsheets/smartsheets.go b/pkg/detectors/smartsheets/smartsheets.go index e3d606570..0ce964465 100644 --- a/pkg/detectors/smartsheets/smartsheets.go +++ b/pkg/detectors/smartsheets/smartsheets.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/smartystreets/smartystreets.go b/pkg/detectors/smartystreets/smartystreets.go index 9fced972e..55eb78af8 100644 --- a/pkg/detectors/smartystreets/smartystreets.go +++ b/pkg/detectors/smartystreets/smartystreets.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/smooch/smooch.go b/pkg/detectors/smooch/smooch.go index 9b0bdef2a..491fa7ff9 100644 --- a/pkg/detectors/smooch/smooch.go +++ b/pkg/detectors/smooch/smooch.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/snipcart/snipcart.go b/pkg/detectors/snipcart/snipcart.go index f47f030d3..f0e161a6e 100644 --- a/pkg/detectors/snipcart/snipcart.go +++ b/pkg/detectors/snipcart/snipcart.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/snowflake/snowflake.go b/pkg/detectors/snowflake/snowflake.go index 53e034253..a769720d5 100644 --- a/pkg/detectors/snowflake/snowflake.go +++ b/pkg/detectors/snowflake/snowflake.go @@ -154,11 +154,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resPasswordMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/snykkey/snykkey.go b/pkg/detectors/snykkey/snykkey.go index aaaf5ff09..0bfb11b7a 100644 --- a/pkg/detectors/snykkey/snykkey.go +++ b/pkg/detectors/snykkey/snykkey.go @@ -52,10 +52,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, token) } - if !s1.Verified && detectors.IsKnownFalsePositive(token, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/sonarcloud/sonarcloud.go b/pkg/detectors/sonarcloud/sonarcloud.go index 8f9ec5671..f7e34cbad 100644 --- a/pkg/detectors/sonarcloud/sonarcloud.go +++ b/pkg/detectors/sonarcloud/sonarcloud.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if validResponse { s1.Verified = true } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } diff --git a/pkg/detectors/sourcegraph/sourcegraph.go b/pkg/detectors/sourcegraph/sourcegraph.go index 2018e7b89..08c542f6c 100644 --- a/pkg/detectors/sourcegraph/sourcegraph.go +++ b/pkg/detectors/sourcegraph/sourcegraph.go @@ -82,11 +82,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/sourcegraphcody/sourcegraphcody.go b/pkg/detectors/sourcegraphcody/sourcegraphcody.go index bb00e01a0..46ab53ee7 100644 --- a/pkg/detectors/sourcegraphcody/sourcegraphcody.go +++ b/pkg/detectors/sourcegraphcody/sourcegraphcody.go @@ -76,11 +76,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/sparkpost/sparkpost.go b/pkg/detectors/sparkpost/sparkpost.go index d02e58bf8..c605a4479 100644 --- a/pkg/detectors/sparkpost/sparkpost.go +++ b/pkg/detectors/sparkpost/sparkpost.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/speechtextai/speechtextai.go b/pkg/detectors/speechtextai/speechtextai.go index 53a2ce8e6..0fdb0272f 100644 --- a/pkg/detectors/speechtextai/speechtextai.go +++ b/pkg/detectors/speechtextai/speechtextai.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/splunkobservabilitytoken/splunkobservabilitytoken.go b/pkg/detectors/splunkobservabilitytoken/splunkobservabilitytoken.go index 5bb39ed19..87a32b457 100644 --- a/pkg/detectors/splunkobservabilitytoken/splunkobservabilitytoken.go +++ b/pkg/detectors/splunkobservabilitytoken/splunkobservabilitytoken.go @@ -59,12 +59,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/spoonacular/spoonacular.go b/pkg/detectors/spoonacular/spoonacular.go index a7f5ae9cd..6c6ec8086 100644 --- a/pkg/detectors/spoonacular/spoonacular.go +++ b/pkg/detectors/spoonacular/spoonacular.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/sportsmonk/sportsmonk.go b/pkg/detectors/sportsmonk/sportsmonk.go index c22b1e1e8..b89347e7a 100644 --- a/pkg/detectors/sportsmonk/sportsmonk.go +++ b/pkg/detectors/sportsmonk/sportsmonk.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/square/square.go b/pkg/detectors/square/square.go index e27e5f372..08f840ed1 100644 --- a/pkg/detectors/square/square.go +++ b/pkg/detectors/square/square.go @@ -81,10 +81,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified && detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s) } diff --git a/pkg/detectors/squareapp/squareapp.go b/pkg/detectors/squareapp/squareapp.go index dfe6a4e10..0ec85bf02 100644 --- a/pkg/detectors/squareapp/squareapp.go +++ b/pkg/detectors/squareapp/squareapp.go @@ -5,9 +5,9 @@ import ( "context" "encoding/json" "fmt" - regexp "github.com/wasilibs/go-re2" "net/http" - "strings" + + regexp "github.com/wasilibs/go-re2" "github.com/trufflesecurity/trufflehog/v3/pkg/common" "github.com/trufflesecurity/trufflehog/v3/pkg/detectors" @@ -41,10 +41,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result for _, match := range matches { for _, secMatch := range secMatches { - if detectors.IsKnownFalsePositive(strings.ToLower(secMatch), detectors.DefaultFalsePositives, true) { - continue - } - s := detectors.Result{ DetectorType: detectorspb.DetectorType_SquareApp, Raw: []byte(match), @@ -83,10 +79,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified && detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s) } } diff --git a/pkg/detectors/squarespace/squarespace.go b/pkg/detectors/squarespace/squarespace.go index 0a87bb872..35b83f44f 100644 --- a/pkg/detectors/squarespace/squarespace.go +++ b/pkg/detectors/squarespace/squarespace.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/squareup/squareup.go b/pkg/detectors/squareup/squareup.go index 731328b4f..cb3e097dd 100644 --- a/pkg/detectors/squareup/squareup.go +++ b/pkg/detectors/squareup/squareup.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/sslmate/sslmate.go b/pkg/detectors/sslmate/sslmate.go index 0fcc26dd5..3dd8c6bab 100644 --- a/pkg/detectors/sslmate/sslmate.go +++ b/pkg/detectors/sslmate/sslmate.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/statuscake/statuscake.go b/pkg/detectors/statuscake/statuscake.go index a12d4b815..e00a2a0b6 100644 --- a/pkg/detectors/statuscake/statuscake.go +++ b/pkg/detectors/statuscake/statuscake.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/statuspage/statuspage.go b/pkg/detectors/statuspage/statuspage.go index 12cfe603d..8bb04b07b 100644 --- a/pkg/detectors/statuspage/statuspage.go +++ b/pkg/detectors/statuspage/statuspage.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/statuspal/statuspal.go b/pkg/detectors/statuspal/statuspal.go index e74610422..947a4055b 100644 --- a/pkg/detectors/statuspal/statuspal.go +++ b/pkg/detectors/statuspal/statuspal.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/stitchdata/stitchdata.go b/pkg/detectors/stitchdata/stitchdata.go index a51a591b0..67e7d4d35 100644 --- a/pkg/detectors/stitchdata/stitchdata.go +++ b/pkg/detectors/stitchdata/stitchdata.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/stockdata/stockdata.go b/pkg/detectors/stockdata/stockdata.go index 19b407654..baef22287 100644 --- a/pkg/detectors/stockdata/stockdata.go +++ b/pkg/detectors/stockdata/stockdata.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/storecove/storecove.go b/pkg/detectors/storecove/storecove.go index 327d82d08..4e113e747 100644 --- a/pkg/detectors/storecove/storecove.go +++ b/pkg/detectors/storecove/storecove.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/stormboard/stormboard.go b/pkg/detectors/stormboard/stormboard.go index 0cc9933c7..6c2a61528 100644 --- a/pkg/detectors/stormboard/stormboard.go +++ b/pkg/detectors/stormboard/stormboard.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/stormglass/stormglass.go b/pkg/detectors/stormglass/stormglass.go index 89669d556..83216c6db 100644 --- a/pkg/detectors/stormglass/stormglass.go +++ b/pkg/detectors/stormglass/stormglass.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/storyblok/storyblok.go b/pkg/detectors/storyblok/storyblok.go index ceb524182..c5262d0af 100644 --- a/pkg/detectors/storyblok/storyblok.go +++ b/pkg/detectors/storyblok/storyblok.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/storychief/storychief.go b/pkg/detectors/storychief/storychief.go index 776058633..9e2949a97 100644 --- a/pkg/detectors/storychief/storychief.go +++ b/pkg/detectors/storychief/storychief.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/strava/strava.go b/pkg/detectors/strava/strava.go index 701a02232..42b68d7be 100644 --- a/pkg/detectors/strava/strava.go +++ b/pkg/detectors/strava/strava.go @@ -76,11 +76,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resId, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/streak/streak.go b/pkg/detectors/streak/streak.go index 99364b97b..f241da304 100644 --- a/pkg/detectors/streak/streak.go +++ b/pkg/detectors/streak/streak.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/stripe/stripe.go b/pkg/detectors/stripe/stripe.go index 188180454..e26645da7 100644 --- a/pkg/detectors/stripe/stripe.go +++ b/pkg/detectors/stripe/stripe.go @@ -67,10 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s.Verified && detectors.IsKnownFalsePositive(string(s.Raw), detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s) } diff --git a/pkg/detectors/stripo/stripo.go b/pkg/detectors/stripo/stripo.go index 41bb77f34..73592efb7 100644 --- a/pkg/detectors/stripo/stripo.go +++ b/pkg/detectors/stripo/stripo.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/stytch/stytch.go b/pkg/detectors/stytch/stytch.go index c17fd9a7d..ce8024f4f 100644 --- a/pkg/detectors/stytch/stytch.go +++ b/pkg/detectors/stytch/stytch.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/sugester/sugester.go b/pkg/detectors/sugester/sugester.go index 6e2151dd0..794f13b15 100644 --- a/pkg/detectors/sugester/sugester.go +++ b/pkg/detectors/sugester/sugester.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/sumologickey/sumologickey.go b/pkg/detectors/sumologickey/sumologickey.go index b8f5f1b6e..b0f6f8fee 100644 --- a/pkg/detectors/sumologickey/sumologickey.go +++ b/pkg/detectors/sumologickey/sumologickey.go @@ -70,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/supabasetoken/supabasetoken.go b/pkg/detectors/supabasetoken/supabasetoken.go index 07018a869..7b08cbfda 100644 --- a/pkg/detectors/supabasetoken/supabasetoken.go +++ b/pkg/detectors/supabasetoken/supabasetoken.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/supernotesapi/supernotesapi.go b/pkg/detectors/supernotesapi/supernotesapi.go index 9a520fc3b..e94f23930 100644 --- a/pkg/detectors/supernotesapi/supernotesapi.go +++ b/pkg/detectors/supernotesapi/supernotesapi.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/surveyanyplace/surveyanyplace.go b/pkg/detectors/surveyanyplace/surveyanyplace.go index f6773935b..fa6c52765 100644 --- a/pkg/detectors/surveyanyplace/surveyanyplace.go +++ b/pkg/detectors/surveyanyplace/surveyanyplace.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/surveybot/surveybot.go b/pkg/detectors/surveybot/surveybot.go index 25bf4fa6d..e6e798bc5 100644 --- a/pkg/detectors/surveybot/surveybot.go +++ b/pkg/detectors/surveybot/surveybot.go @@ -70,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if len(r.Surveys) > 0 { s1.Verified = true } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/surveysparrow/surveysparrow.go b/pkg/detectors/surveysparrow/surveysparrow.go index d61256c10..7f31317a6 100644 --- a/pkg/detectors/surveysparrow/surveysparrow.go +++ b/pkg/detectors/surveysparrow/surveysparrow.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/survicate/survicate.go b/pkg/detectors/survicate/survicate.go index 9c2340475..c3b24d59b 100644 --- a/pkg/detectors/survicate/survicate.go +++ b/pkg/detectors/survicate/survicate.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/swell/swell.go b/pkg/detectors/swell/swell.go index ba1384ecf..c103885b2 100644 --- a/pkg/detectors/swell/swell.go +++ b/pkg/detectors/swell/swell.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/swiftype/swiftype.go b/pkg/detectors/swiftype/swiftype.go index 1ec300fec..bc6eba41a 100644 --- a/pkg/detectors/swiftype/swiftype.go +++ b/pkg/detectors/swiftype/swiftype.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/tailscale/tailscale.go b/pkg/detectors/tailscale/tailscale.go index 20a8c12a2..7ba46f479 100644 --- a/pkg/detectors/tailscale/tailscale.go +++ b/pkg/detectors/tailscale/tailscale.go @@ -70,11 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/tallyfy/tallyfy.go b/pkg/detectors/tallyfy/tallyfy.go index 2a32fafae..68f6f6cbc 100644 --- a/pkg/detectors/tallyfy/tallyfy.go +++ b/pkg/detectors/tallyfy/tallyfy.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/tatumio/tatumio.go b/pkg/detectors/tatumio/tatumio.go index dd45e4979..97bc9d128 100644 --- a/pkg/detectors/tatumio/tatumio.go +++ b/pkg/detectors/tatumio/tatumio.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/taxjar/taxjar.go b/pkg/detectors/taxjar/taxjar.go index 337bc43d1..956318210 100644 --- a/pkg/detectors/taxjar/taxjar.go +++ b/pkg/detectors/taxjar/taxjar.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/teamgate/teamgate.go b/pkg/detectors/teamgate/teamgate.go index 5ee093bc2..697b8be15 100644 --- a/pkg/detectors/teamgate/teamgate.go +++ b/pkg/detectors/teamgate/teamgate.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/teamworkcrm/teamworkcrm.go b/pkg/detectors/teamworkcrm/teamworkcrm.go index 293ac6f20..3a5cae840 100644 --- a/pkg/detectors/teamworkcrm/teamworkcrm.go +++ b/pkg/detectors/teamworkcrm/teamworkcrm.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/teamworkdesk/teamworkdesk.go b/pkg/detectors/teamworkdesk/teamworkdesk.go index 9a9a06e11..e4e788baa 100644 --- a/pkg/detectors/teamworkdesk/teamworkdesk.go +++ b/pkg/detectors/teamworkdesk/teamworkdesk.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/teamworkspaces/teamworkspaces.go b/pkg/detectors/teamworkspaces/teamworkspaces.go index 281daa422..3e4b3aa1c 100644 --- a/pkg/detectors/teamworkspaces/teamworkspaces.go +++ b/pkg/detectors/teamworkspaces/teamworkspaces.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/technicalanalysisapi/technicalanalysisapi.go b/pkg/detectors/technicalanalysisapi/technicalanalysisapi.go index c0e79fa6e..fbdbda279 100644 --- a/pkg/detectors/technicalanalysisapi/technicalanalysisapi.go +++ b/pkg/detectors/technicalanalysisapi/technicalanalysisapi.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/tefter/tefter.go b/pkg/detectors/tefter/tefter.go index a5707e537..0d5dbf398 100644 --- a/pkg/detectors/tefter/tefter.go +++ b/pkg/detectors/tefter/tefter.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 && validResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/telegrambottoken/telegrambottoken.go b/pkg/detectors/telegrambottoken/telegrambottoken.go index 22985ebe4..90649da1f 100644 --- a/pkg/detectors/telegrambottoken/telegrambottoken.go +++ b/pkg/detectors/telegrambottoken/telegrambottoken.go @@ -72,10 +72,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result "username": apiRes.Result.Username, } } - } else { - if detectors.IsKnownFalsePositive(key, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/teletype/teletype.go b/pkg/detectors/teletype/teletype.go index b994b5ec1..a56c4da6c 100644 --- a/pkg/detectors/teletype/teletype.go +++ b/pkg/detectors/teletype/teletype.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = true } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/telnyx/telnyx.go b/pkg/detectors/telnyx/telnyx.go index 5aba48b2d..4d4e11c31 100644 --- a/pkg/detectors/telnyx/telnyx.go +++ b/pkg/detectors/telnyx/telnyx.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/terraformcloudpersonaltoken/terraformcloudpersonaltoken.go b/pkg/detectors/terraformcloudpersonaltoken/terraformcloudpersonaltoken.go index 40cff8b8f..28cddb17c 100644 --- a/pkg/detectors/terraformcloudpersonaltoken/terraformcloudpersonaltoken.go +++ b/pkg/detectors/terraformcloudpersonaltoken/terraformcloudpersonaltoken.go @@ -57,10 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/testingbot/testingbot.go b/pkg/detectors/testingbot/testingbot.go index 91d26248b..9003c688e 100644 --- a/pkg/detectors/testingbot/testingbot.go +++ b/pkg/detectors/testingbot/testingbot.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/textmagic/textmagic.go b/pkg/detectors/textmagic/textmagic.go index 8c53ca5b6..bee025d95 100644 --- a/pkg/detectors/textmagic/textmagic.go +++ b/pkg/detectors/textmagic/textmagic.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/theoddsapi/theoddsapi.go b/pkg/detectors/theoddsapi/theoddsapi.go index 9cbeb96b9..2b9b06183 100644 --- a/pkg/detectors/theoddsapi/theoddsapi.go +++ b/pkg/detectors/theoddsapi/theoddsapi.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/thinkific/thinkific.go b/pkg/detectors/thinkific/thinkific.go index 86f8ed882..66f9459af 100644 --- a/pkg/detectors/thinkific/thinkific.go +++ b/pkg/detectors/thinkific/thinkific.go @@ -75,12 +75,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if strings.Contains(body, "API Access is not available") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } - } } diff --git a/pkg/detectors/thousandeyes/thousandeyes.go b/pkg/detectors/thousandeyes/thousandeyes.go index 83a0a2e7d..435c85846 100644 --- a/pkg/detectors/thousandeyes/thousandeyes.go +++ b/pkg/detectors/thousandeyes/thousandeyes.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(tokenPatMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ticketmaster/ticketmaster.go b/pkg/detectors/ticketmaster/ticketmaster.go index 7f1026f9f..de12b7a04 100644 --- a/pkg/detectors/ticketmaster/ticketmaster.go +++ b/pkg/detectors/ticketmaster/ticketmaster.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/tickettailor/tickettailor.go b/pkg/detectors/tickettailor/tickettailor.go index e8160c401..10d96b551 100644 --- a/pkg/detectors/tickettailor/tickettailor.go +++ b/pkg/detectors/tickettailor/tickettailor.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/tiingo/tiingo.go b/pkg/detectors/tiingo/tiingo.go index 419367910..e8aa1da7e 100644 --- a/pkg/detectors/tiingo/tiingo.go +++ b/pkg/detectors/tiingo/tiingo.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/timecamp/timecamp.go b/pkg/detectors/timecamp/timecamp.go index fd019a2f3..e3c132ab1 100644 --- a/pkg/detectors/timecamp/timecamp.go +++ b/pkg/detectors/timecamp/timecamp.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/timezoneapi/timezoneapi.go b/pkg/detectors/timezoneapi/timezoneapi.go index c9a094024..ef7534d3a 100644 --- a/pkg/detectors/timezoneapi/timezoneapi.go +++ b/pkg/detectors/timezoneapi/timezoneapi.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 && verifiedBodyResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/tly/tly.go b/pkg/detectors/tly/tly.go index ca9ba4a25..37b7eb6ff 100644 --- a/pkg/detectors/tly/tly.go +++ b/pkg/detectors/tly/tly.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/tmetric/tmetric.go b/pkg/detectors/tmetric/tmetric.go index 640146d65..476b5e6fd 100644 --- a/pkg/detectors/tmetric/tmetric.go +++ b/pkg/detectors/tmetric/tmetric.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/todoist/todoist.go b/pkg/detectors/todoist/todoist.go index f1c238fa5..3461c5e3b 100644 --- a/pkg/detectors/todoist/todoist.go +++ b/pkg/detectors/todoist/todoist.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/toggltrack/toggltrack.go b/pkg/detectors/toggltrack/toggltrack.go index 2c35e6b26..883784c7b 100644 --- a/pkg/detectors/toggltrack/toggltrack.go +++ b/pkg/detectors/toggltrack/toggltrack.go @@ -62,11 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/tokeet/tokeet.go b/pkg/detectors/tokeet/tokeet.go index b361b3192..7e7cf8668 100644 --- a/pkg/detectors/tokeet/tokeet.go +++ b/pkg/detectors/tokeet/tokeet.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/tomorrowio/tomorrowio.go b/pkg/detectors/tomorrowio/tomorrowio.go index 82076c5be..edf5de186 100644 --- a/pkg/detectors/tomorrowio/tomorrowio.go +++ b/pkg/detectors/tomorrowio/tomorrowio.go @@ -57,12 +57,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/tomtom/tomtom.go b/pkg/detectors/tomtom/tomtom.go index 46f1e51b3..b1e1aff2c 100644 --- a/pkg/detectors/tomtom/tomtom.go +++ b/pkg/detectors/tomtom/tomtom.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/tradier/tradier.go b/pkg/detectors/tradier/tradier.go index 36cdebd8a..c11d0ee14 100644 --- a/pkg/detectors/tradier/tradier.go +++ b/pkg/detectors/tradier/tradier.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/transferwise/transferwise.go b/pkg/detectors/transferwise/transferwise.go index 1cebe38f3..e49455d2c 100644 --- a/pkg/detectors/transferwise/transferwise.go +++ b/pkg/detectors/transferwise/transferwise.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/travelpayouts/travelpayouts.go b/pkg/detectors/travelpayouts/travelpayouts.go index 651c63a5c..6aa4b481b 100644 --- a/pkg/detectors/travelpayouts/travelpayouts.go +++ b/pkg/detectors/travelpayouts/travelpayouts.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/travisci/travisci.go b/pkg/detectors/travisci/travisci.go index af73e2388..fe7b7a79a 100644 --- a/pkg/detectors/travisci/travisci.go +++ b/pkg/detectors/travisci/travisci.go @@ -59,10 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/trelloapikey/trelloapikey.go b/pkg/detectors/trelloapikey/trelloapikey.go index 26e8e810f..1f2e533fa 100644 --- a/pkg/detectors/trelloapikey/trelloapikey.go +++ b/pkg/detectors/trelloapikey/trelloapikey.go @@ -62,10 +62,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/tru/tru.go b/pkg/detectors/tru/tru.go index 25dee7b48..2df42285c 100644 --- a/pkg/detectors/tru/tru.go +++ b/pkg/detectors/tru/tru.go @@ -71,11 +71,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/trufflehogenterprise/trufflehogenterprise.go b/pkg/detectors/trufflehogenterprise/trufflehogenterprise.go index 20955b5a0..cc2978e1b 100644 --- a/pkg/detectors/trufflehogenterprise/trufflehogenterprise.go +++ b/pkg/detectors/trufflehogenterprise/trufflehogenterprise.go @@ -86,11 +86,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if res.StatusCode >= 200 && res.StatusCode < 300 && verifiedBodyResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resSecretMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/twelvedata/twelvedata.go b/pkg/detectors/twelvedata/twelvedata.go index 8a2230671..1b684910d 100644 --- a/pkg/detectors/twelvedata/twelvedata.go +++ b/pkg/detectors/twelvedata/twelvedata.go @@ -68,10 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if !strings.Contains(body, "401") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } diff --git a/pkg/detectors/twilio/twilio.go b/pkg/detectors/twilio/twilio.go index 4c61cec9a..d761dc333 100644 --- a/pkg/detectors/twilio/twilio.go +++ b/pkg/detectors/twilio/twilio.go @@ -88,10 +88,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, true) { - continue - } - if len(keyMatches) > 0 { results = append(results, s1) } diff --git a/pkg/detectors/twist/twist.go b/pkg/detectors/twist/twist.go index 898d53f05..c99c423d2 100644 --- a/pkg/detectors/twist/twist.go +++ b/pkg/detectors/twist/twist.go @@ -63,12 +63,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } results = append(results, s1) diff --git a/pkg/detectors/twitch/twitch.go b/pkg/detectors/twitch/twitch.go index 9898d4f5e..426f89841 100644 --- a/pkg/detectors/twitch/twitch.go +++ b/pkg/detectors/twitch/twitch.go @@ -68,10 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(verificationErr, resMatch) } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } } diff --git a/pkg/detectors/tyntec/tyntec.go b/pkg/detectors/tyntec/tyntec.go index 85c6ccebd..0269f61a1 100644 --- a/pkg/detectors/tyntec/tyntec.go +++ b/pkg/detectors/tyntec/tyntec.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/typeform/typeform.go b/pkg/detectors/typeform/typeform.go index 404137427..63dfbf41e 100644 --- a/pkg/detectors/typeform/typeform.go +++ b/pkg/detectors/typeform/typeform.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/typetalk/typetalk.go b/pkg/detectors/typetalk/typetalk.go index 9f455c5a1..2ad121fe7 100644 --- a/pkg/detectors/typetalk/typetalk.go +++ b/pkg/detectors/typetalk/typetalk.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/ubidots/ubidots.go b/pkg/detectors/ubidots/ubidots.go index 73d3b680e..303de4887 100644 --- a/pkg/detectors/ubidots/ubidots.go +++ b/pkg/detectors/ubidots/ubidots.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/uclassify/uclassify.go b/pkg/detectors/uclassify/uclassify.go index 64483ade4..29fe57cc6 100644 --- a/pkg/detectors/uclassify/uclassify.go +++ b/pkg/detectors/uclassify/uclassify.go @@ -60,11 +60,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/unifyid/unifyid.go b/pkg/detectors/unifyid/unifyid.go index f75999a2f..4bb02a180 100644 --- a/pkg/detectors/unifyid/unifyid.go +++ b/pkg/detectors/unifyid/unifyid.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if (res.StatusCode >= 200 && res.StatusCode < 300) || (res.StatusCode == 400 && strings.Contains(body, "invalid token")) { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/unplugg/unplugg.go b/pkg/detectors/unplugg/unplugg.go index 298737a0b..25c2b59a6 100644 --- a/pkg/detectors/unplugg/unplugg.go +++ b/pkg/detectors/unplugg/unplugg.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/unsplash/unsplash.go b/pkg/detectors/unsplash/unsplash.go index e15383c25..4b2a75808 100644 --- a/pkg/detectors/unsplash/unsplash.go +++ b/pkg/detectors/unsplash/unsplash.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/upcdatabase/upcdatabase.go b/pkg/detectors/upcdatabase/upcdatabase.go index f86d3eb23..c18f34fe9 100644 --- a/pkg/detectors/upcdatabase/upcdatabase.go +++ b/pkg/detectors/upcdatabase/upcdatabase.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/uplead/uplead.go b/pkg/detectors/uplead/uplead.go index d49367772..6058835c8 100644 --- a/pkg/detectors/uplead/uplead.go +++ b/pkg/detectors/uplead/uplead.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/uploadcare/uploadcare.go b/pkg/detectors/uploadcare/uploadcare.go index 70830b3ba..665f158ef 100644 --- a/pkg/detectors/uploadcare/uploadcare.go +++ b/pkg/detectors/uploadcare/uploadcare.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/uptimerobot/uptimerobot.go b/pkg/detectors/uptimerobot/uptimerobot.go index 9adfea392..b501e246a 100644 --- a/pkg/detectors/uptimerobot/uptimerobot.go +++ b/pkg/detectors/uptimerobot/uptimerobot.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/upwave/upwave.go b/pkg/detectors/upwave/upwave.go index 1cbc174bb..c42178d0b 100644 --- a/pkg/detectors/upwave/upwave.go +++ b/pkg/detectors/upwave/upwave.go @@ -59,12 +59,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/uri/uri.go b/pkg/detectors/uri/uri.go index 0ab918466..33d63ad77 100644 --- a/pkg/detectors/uri/uri.go +++ b/pkg/detectors/uri/uri.go @@ -95,10 +95,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && !s.allowKnownTestSites && detectors.IsKnownFalsePositive(string(s1.Raw), detectors.DefaultFalsePositives, false) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/urlscan/urlscan.go b/pkg/detectors/urlscan/urlscan.go index aae63b2c1..b1236f870 100644 --- a/pkg/detectors/urlscan/urlscan.go +++ b/pkg/detectors/urlscan/urlscan.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/user/user.go b/pkg/detectors/user/user.go index a1549423e..ee5ec0fa2 100644 --- a/pkg/detectors/user/user.go +++ b/pkg/detectors/user/user.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/userflow/userflow.go b/pkg/detectors/userflow/userflow.go index f43d3dd97..9014b5f5e 100644 --- a/pkg/detectors/userflow/userflow.go +++ b/pkg/detectors/userflow/userflow.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/userstack/userstack.go b/pkg/detectors/userstack/userstack.go index 05dacac14..7655a8e80 100644 --- a/pkg/detectors/userstack/userstack.go +++ b/pkg/detectors/userstack/userstack.go @@ -64,10 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.Verified = true } else { s1.Verified = false - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/vagrantcloudpersonaltoken/vagrantcloudpersonaltoken.go b/pkg/detectors/vagrantcloudpersonaltoken/vagrantcloudpersonaltoken.go index c517169c8..951530115 100644 --- a/pkg/detectors/vagrantcloudpersonaltoken/vagrantcloudpersonaltoken.go +++ b/pkg/detectors/vagrantcloudpersonaltoken/vagrantcloudpersonaltoken.go @@ -75,11 +75,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/vatlayer/vatlayer.go b/pkg/detectors/vatlayer/vatlayer.go index be0bbf525..6951bdf0f 100644 --- a/pkg/detectors/vatlayer/vatlayer.go +++ b/pkg/detectors/vatlayer/vatlayer.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/vbout/vbout.go b/pkg/detectors/vbout/vbout.go index f9cfd4a1b..e8badadc7 100644 --- a/pkg/detectors/vbout/vbout.go +++ b/pkg/detectors/vbout/vbout.go @@ -57,12 +57,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/vercel/vercel.go b/pkg/detectors/vercel/vercel.go index 87b398675..4b04286b5 100644 --- a/pkg/detectors/vercel/vercel.go +++ b/pkg/detectors/vercel/vercel.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/verifier/verifier.go b/pkg/detectors/verifier/verifier.go index eb8180a77..5bea79f9b 100644 --- a/pkg/detectors/verifier/verifier.go +++ b/pkg/detectors/verifier/verifier.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/verimail/verimail.go b/pkg/detectors/verimail/verimail.go index f449b088a..ce90672e9 100644 --- a/pkg/detectors/verimail/verimail.go +++ b/pkg/detectors/verimail/verimail.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/veriphone/veriphone.go b/pkg/detectors/veriphone/veriphone.go index 46902ba66..16cfb0eab 100644 --- a/pkg/detectors/veriphone/veriphone.go +++ b/pkg/detectors/veriphone/veriphone.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/versioneye/versioneye.go b/pkg/detectors/versioneye/versioneye.go index 9752e6fd0..74c718f11 100644 --- a/pkg/detectors/versioneye/versioneye.go +++ b/pkg/detectors/versioneye/versioneye.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/viewneo/viewneo.go b/pkg/detectors/viewneo/viewneo.go index 3465f61cb..d12fffc69 100644 --- a/pkg/detectors/viewneo/viewneo.go +++ b/pkg/detectors/viewneo/viewneo.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/virustotal/virustotal.go b/pkg/detectors/virustotal/virustotal.go index f57024017..db78d8a56 100644 --- a/pkg/detectors/virustotal/virustotal.go +++ b/pkg/detectors/virustotal/virustotal.go @@ -48,9 +48,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if verify { s1.Verified = verifyToken(ctx, client, resMatch) - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } results = append(results, s1) } diff --git a/pkg/detectors/visualcrossing/visualcrossing.go b/pkg/detectors/visualcrossing/visualcrossing.go index 54b5e7606..81fb62ff0 100644 --- a/pkg/detectors/visualcrossing/visualcrossing.go +++ b/pkg/detectors/visualcrossing/visualcrossing.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/voicegain/voicegain.go b/pkg/detectors/voicegain/voicegain.go index 72bbb3532..e118b51e3 100644 --- a/pkg/detectors/voicegain/voicegain.go +++ b/pkg/detectors/voicegain/voicegain.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/voodoosms/voodoosms.go b/pkg/detectors/voodoosms/voodoosms.go index 0a8ab9884..8490d0031 100644 --- a/pkg/detectors/voodoosms/voodoosms.go +++ b/pkg/detectors/voodoosms/voodoosms.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/vouchery/vouchery.go b/pkg/detectors/vouchery/vouchery.go index 28b064081..2f5d5d296 100644 --- a/pkg/detectors/vouchery/vouchery.go +++ b/pkg/detectors/vouchery/vouchery.go @@ -68,11 +68,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/vpnapi/vpnapi.go b/pkg/detectors/vpnapi/vpnapi.go index 5ea820bb6..a53ec3eec 100644 --- a/pkg/detectors/vpnapi/vpnapi.go +++ b/pkg/detectors/vpnapi/vpnapi.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/vultrapikey/vultrapikey.go b/pkg/detectors/vultrapikey/vultrapikey.go index fc1d4a1a8..96029c911 100644 --- a/pkg/detectors/vultrapikey/vultrapikey.go +++ b/pkg/detectors/vultrapikey/vultrapikey.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/vyte/vyte.go b/pkg/detectors/vyte/vyte.go index 47685a67d..653e29c2a 100644 --- a/pkg/detectors/vyte/vyte.go +++ b/pkg/detectors/vyte/vyte.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/walkscore/walkscore.go b/pkg/detectors/walkscore/walkscore.go index 28eaea891..b3d87654f 100644 --- a/pkg/detectors/walkscore/walkscore.go +++ b/pkg/detectors/walkscore/walkscore.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if (res.StatusCode >= 200 && res.StatusCode < 300) && strings.Contains(body, `distance`) { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/weatherbit/weatherbit.go b/pkg/detectors/weatherbit/weatherbit.go index 9b6eb90f1..fbc752cf5 100644 --- a/pkg/detectors/weatherbit/weatherbit.go +++ b/pkg/detectors/weatherbit/weatherbit.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/weatherstack/weatherstack.go b/pkg/detectors/weatherstack/weatherstack.go index 6e42ec8b1..234d931e4 100644 --- a/pkg/detectors/weatherstack/weatherstack.go +++ b/pkg/detectors/weatherstack/weatherstack.go @@ -65,11 +65,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result validResponse := strings.Contains(body, `location`) || strings.Contains(body, `"info":"Access Restricted - Your current Subscription Plan does not support HTTPS Encryption."`) if (res.StatusCode >= 200 && res.StatusCode < 300) && validResponse { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/web3storage/web3storage.go b/pkg/detectors/web3storage/web3storage.go index 00ca87108..3510f0a92 100644 --- a/pkg/detectors/web3storage/web3storage.go +++ b/pkg/detectors/web3storage/web3storage.go @@ -74,11 +74,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/webex/webex.go b/pkg/detectors/webex/webex.go index d00ad14e6..fbeecb03e 100644 --- a/pkg/detectors/webex/webex.go +++ b/pkg/detectors/webex/webex.go @@ -80,10 +80,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } } diff --git a/pkg/detectors/webflow/webflow.go b/pkg/detectors/webflow/webflow.go index ed42a9124..b1f69d182 100644 --- a/pkg/detectors/webflow/webflow.go +++ b/pkg/detectors/webflow/webflow.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/webscraper/webscraper.go b/pkg/detectors/webscraper/webscraper.go index c5aa1e424..963e3799a 100644 --- a/pkg/detectors/webscraper/webscraper.go +++ b/pkg/detectors/webscraper/webscraper.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/webscraping/webscraping.go b/pkg/detectors/webscraping/webscraping.go index 6cd63258a..acbb46de9 100644 --- a/pkg/detectors/webscraping/webscraping.go +++ b/pkg/detectors/webscraping/webscraping.go @@ -63,12 +63,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if strings.Contains(body, "key `url` required.") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } - } } diff --git a/pkg/detectors/websitepulse/websitepulse.go b/pkg/detectors/websitepulse/websitepulse.go index b952c9e2e..37bd03ba8 100644 --- a/pkg/detectors/websitepulse/websitepulse.go +++ b/pkg/detectors/websitepulse/websitepulse.go @@ -70,10 +70,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if strings.Contains(body, "Active") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/wepay/wepay.go b/pkg/detectors/wepay/wepay.go index 0bb07752e..6e3391c4c 100644 --- a/pkg/detectors/wepay/wepay.go +++ b/pkg/detectors/wepay/wepay.go @@ -73,11 +73,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/whoxy/whoxy.go b/pkg/detectors/whoxy/whoxy.go index d85683228..4405a299e 100644 --- a/pkg/detectors/whoxy/whoxy.go +++ b/pkg/detectors/whoxy/whoxy.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if res.StatusCode >= 200 && res.StatusCode < 300 && strings.Contains(body, `"status": 1`) { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/wistia/wistia.go b/pkg/detectors/wistia/wistia.go index e05f6dff7..9efc215a1 100644 --- a/pkg/detectors/wistia/wistia.go +++ b/pkg/detectors/wistia/wistia.go @@ -56,12 +56,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/wit/wit.go b/pkg/detectors/wit/wit.go index 67ea8417a..7f77a2ccb 100644 --- a/pkg/detectors/wit/wit.go +++ b/pkg/detectors/wit/wit.go @@ -58,12 +58,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - } + } } } diff --git a/pkg/detectors/worksnaps/worksnaps.go b/pkg/detectors/worksnaps/worksnaps.go index 78ecf768b..a8c987267 100644 --- a/pkg/detectors/worksnaps/worksnaps.go +++ b/pkg/detectors/worksnaps/worksnaps.go @@ -61,11 +61,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/workstack/workstack.go b/pkg/detectors/workstack/workstack.go index 488f6ae88..fb076f84f 100644 --- a/pkg/detectors/workstack/workstack.go +++ b/pkg/detectors/workstack/workstack.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/worldcoinindex/worldcoinindex.go b/pkg/detectors/worldcoinindex/worldcoinindex.go index 0d5ac48ba..287f9aa88 100644 --- a/pkg/detectors/worldcoinindex/worldcoinindex.go +++ b/pkg/detectors/worldcoinindex/worldcoinindex.go @@ -67,11 +67,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.Verified = false } - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/worldweather/worldweather.go b/pkg/detectors/worldweather/worldweather.go index 3edc5bc53..296cb7b78 100644 --- a/pkg/detectors/worldweather/worldweather.go +++ b/pkg/detectors/worldweather/worldweather.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/wrike/wrike.go b/pkg/detectors/wrike/wrike.go index c71962b03..de45cd446 100644 --- a/pkg/detectors/wrike/wrike.go +++ b/pkg/detectors/wrike/wrike.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/yandex/yandex.go b/pkg/detectors/yandex/yandex.go index 61faddde5..93603818d 100644 --- a/pkg/detectors/yandex/yandex.go +++ b/pkg/detectors/yandex/yandex.go @@ -56,11 +56,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/yelp/yelp.go b/pkg/detectors/yelp/yelp.go index 11dd05a5e..58019f4aa 100644 --- a/pkg/detectors/yelp/yelp.go +++ b/pkg/detectors/yelp/yelp.go @@ -75,11 +75,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } else { s1.SetVerificationError(err, resMatch) } - - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } results = append(results, s1) diff --git a/pkg/detectors/youneedabudget/youneedabudget.go b/pkg/detectors/youneedabudget/youneedabudget.go index 1bab39c6f..48e56c4a4 100644 --- a/pkg/detectors/youneedabudget/youneedabudget.go +++ b/pkg/detectors/youneedabudget/youneedabudget.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/yousign/yousign.go b/pkg/detectors/yousign/yousign.go index 032fdbc25..b187879ea 100644 --- a/pkg/detectors/yousign/yousign.go +++ b/pkg/detectors/yousign/yousign.go @@ -59,11 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/youtubeapikey/youtubeapikey.go b/pkg/detectors/youtubeapikey/youtubeapikey.go index 92597c31b..e77ac9201 100644 --- a/pkg/detectors/youtubeapikey/youtubeapikey.go +++ b/pkg/detectors/youtubeapikey/youtubeapikey.go @@ -64,11 +64,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/zendeskapi/zendeskapi.go b/pkg/detectors/zendeskapi/zendeskapi.go index abaa94a04..1c0043a9e 100644 --- a/pkg/detectors/zendeskapi/zendeskapi.go +++ b/pkg/detectors/zendeskapi/zendeskapi.go @@ -59,10 +59,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } resEmail := strings.TrimSpace(email[1]) - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - s1 := detectors.Result{ DetectorType: detectorspb.DetectorType_ZendeskApi, Raw: []byte(resMatch), diff --git a/pkg/detectors/zenkitapi/zenkitapi.go b/pkg/detectors/zenkitapi/zenkitapi.go index a45aa60af..d17a636c5 100644 --- a/pkg/detectors/zenkitapi/zenkitapi.go +++ b/pkg/detectors/zenkitapi/zenkitapi.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/zenrows/zenrows.go b/pkg/detectors/zenrows/zenrows.go index 4f71bd371..5f85f5871 100644 --- a/pkg/detectors/zenrows/zenrows.go +++ b/pkg/detectors/zenrows/zenrows.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/zenscrape/zenscrape.go b/pkg/detectors/zenscrape/zenscrape.go index 651a8099f..05d0fb229 100644 --- a/pkg/detectors/zenscrape/zenscrape.go +++ b/pkg/detectors/zenscrape/zenscrape.go @@ -58,10 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if (res.StatusCode >= 200 && res.StatusCode < 300) || res.StatusCode == 429 { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/zenserp/zenserp.go b/pkg/detectors/zenserp/zenserp.go index a5f9b3b31..84375a5e4 100644 --- a/pkg/detectors/zenserp/zenserp.go +++ b/pkg/detectors/zenserp/zenserp.go @@ -62,12 +62,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result body := string(bodyBytes) if strings.Contains(body, "query") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } - } } diff --git a/pkg/detectors/zeplin/zeplin.go b/pkg/detectors/zeplin/zeplin.go index 84e3c14f1..bd3eb38b1 100644 --- a/pkg/detectors/zeplin/zeplin.go +++ b/pkg/detectors/zeplin/zeplin.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/zerobounce/zerobounce.go b/pkg/detectors/zerobounce/zerobounce.go index 3ecaa1a8f..23dbd37a1 100644 --- a/pkg/detectors/zerobounce/zerobounce.go +++ b/pkg/detectors/zerobounce/zerobounce.go @@ -63,13 +63,8 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if strings.Contains(body, "found") { s1.Verified = true - } else { - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } - } results = append(results, s1) diff --git a/pkg/detectors/zerotier/zerotier.go b/pkg/detectors/zerotier/zerotier.go index 15462eabf..03433ed2d 100644 --- a/pkg/detectors/zerotier/zerotier.go +++ b/pkg/detectors/zerotier/zerotier.go @@ -75,11 +75,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result } } - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } - results = append(results, s1) } diff --git a/pkg/detectors/zipapi/zipapi.go b/pkg/detectors/zipapi/zipapi.go index 9ad753f9e..8f544a080 100644 --- a/pkg/detectors/zipapi/zipapi.go +++ b/pkg/detectors/zipapi/zipapi.go @@ -76,11 +76,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/zipbooks/zipbooks.go b/pkg/detectors/zipbooks/zipbooks.go index 07078135a..28ada1847 100644 --- a/pkg/detectors/zipbooks/zipbooks.go +++ b/pkg/detectors/zipbooks/zipbooks.go @@ -66,11 +66,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/zipcodeapi/zipcodeapi.go b/pkg/detectors/zipcodeapi/zipcodeapi.go index f42dcf781..f0f47802e 100644 --- a/pkg/detectors/zipcodeapi/zipcodeapi.go +++ b/pkg/detectors/zipcodeapi/zipcodeapi.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/zipcodebase/zipcodebase.go b/pkg/detectors/zipcodebase/zipcodebase.go index 354ed3448..3aea7b32b 100644 --- a/pkg/detectors/zipcodebase/zipcodebase.go +++ b/pkg/detectors/zipcodebase/zipcodebase.go @@ -58,11 +58,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/zonkafeedback/zonkafeedback.go b/pkg/detectors/zonkafeedback/zonkafeedback.go index 7d480daec..1379656d0 100644 --- a/pkg/detectors/zonkafeedback/zonkafeedback.go +++ b/pkg/detectors/zonkafeedback/zonkafeedback.go @@ -57,11 +57,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { s1.Verified = true - } else { - // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. - if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } } } } diff --git a/pkg/detectors/zulipchat/zulipchat.go b/pkg/detectors/zulipchat/zulipchat.go index 02030d2ed..61c70f3d3 100644 --- a/pkg/detectors/zulipchat/zulipchat.go +++ b/pkg/detectors/zulipchat/zulipchat.go @@ -91,9 +91,6 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.SetVerificationError(err, resMatch) } } - if !s1.Verified && detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) { - continue - } results = append(results, s1) } diff --git a/pkg/engine/engine.go b/pkg/engine/engine.go index 1a3405343..22cc18686 100644 --- a/pkg/engine/engine.go +++ b/pkg/engine/engine.go @@ -72,6 +72,7 @@ type Engine struct { notifyVerifiedResults bool notifyUnverifiedResults bool notifyUnknownResults bool + logFilteredUnverified bool verificationOverlap bool printAvgDetectorTime bool @@ -181,6 +182,9 @@ func WithResults(results map[string]struct{}) Option { _, ok = results["unverified"] e.notifyUnverifiedResults = ok + + _, ok = results["filtered_unverified"] + e.logFilteredUnverified = ok } } @@ -827,8 +831,10 @@ func (e *Engine) detectChunk(ctx context.Context, data detectableChunk) { results = detectors.CleanResults(results) } + results = detectors.FilterKnownFalsePositives(ctx, results, detectors.DefaultFalsePositives, true, e.logFilteredUnverified) + if e.filterEntropy != nil { - results = detectors.FilterResultsWithEntropy(results, *e.filterEntropy) + results = detectors.FilterResultsWithEntropy(ctx, results, *e.filterEntropy, e.logFilteredUnverified) } for _, res := range results { diff --git a/pkg/engine/engine_test.go b/pkg/engine/engine_test.go index 49b881a0d..88d340c2b 100644 --- a/pkg/engine/engine_test.go +++ b/pkg/engine/engine_test.go @@ -192,8 +192,8 @@ func BenchmarkSupportsLineNumbersLoop(b *testing.B) { } } -// TestEngine_DuplicatSecrets is a test that detects ALL duplicate secrets with the same decoder. -func TestEngine_DuplicatSecrets(t *testing.T) { +// TestEngine_DuplicateSecrets is a test that detects ALL duplicate secrets with the same decoder. +func TestEngine_DuplicateSecrets(t *testing.T) { ctx := context.Background() absPath, err := filepath.Abs("./testdata/secrets.txt") From 642fce5edf37d6b8d16e77cbcfa1dbad41504128 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 08:24:57 -0700 Subject: [PATCH 24/32] fix(deps): update module github.com/aws/aws-sdk-go to v1.51.26 (#2728) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 4423994c8..a002addcc 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/TheZeroSlave/zapsentry v1.23.0 github.com/adrg/strutil v0.3.1 github.com/alecthomas/kingpin/v2 v2.4.0 - github.com/aws/aws-sdk-go v1.51.25 + github.com/aws/aws-sdk-go v1.51.26 github.com/aymanbagabas/go-osc52 v1.2.2 github.com/bill-rich/go-syslog v0.0.0-20220413021637-49edb52a574c github.com/bitfinexcom/bitfinex-api-go v0.0.0-20210608095005-9e0b26f200fb diff --git a/go.sum b/go.sum index 0ed180555..170f976c7 100644 --- a/go.sum +++ b/go.sum @@ -148,6 +148,8 @@ github.com/aws/aws-sdk-go v1.51.24 h1:nwL5MaommPkwb7Ixk24eWkdx5HY4of1gD10kFFVAl6 github.com/aws/aws-sdk-go v1.51.24/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go v1.51.25 h1:DjTT8mtmsachhV6yrXR8+yhnG6120dazr720nopRsls= github.com/aws/aws-sdk-go v1.51.25/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.51.26 h1:fYud+95lh9B89fAlRtgYpY8CcJF4T7JrWkLMq4GGCOo= +github.com/aws/aws-sdk-go v1.51.26/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw= github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/aymanbagabas/go-osc52 v1.2.2 h1:NT7wkhEhPTcKnBCdPi9djmyy9L3JOL4+3SsfJyqptCo= From 4a5fbf84178018da2d92aa4d0a236add497da27b Mon Sep 17 00:00:00 2001 From: ahrav Date: Tue, 23 Apr 2024 08:47:53 -0700 Subject: [PATCH 25/32] [refactor] - Update Write method signature in contentWriter interface (#2721) * Update write method in contentWriter interface * fix lint --- pkg/gitparse/gitparse.go | 10 ++-- pkg/gitparse/gitparse_test.go | 4 +- pkg/writers/buffer/buffer.go | 17 +------ pkg/writers/buffer/buffer_test.go | 2 +- pkg/writers/buffer_writer/bufferwriter.go | 14 ++---- .../buffer_writer/bufferwriter_test.go | 4 +- .../bufferedfilewriter.go | 18 ++----- .../bufferedfilewriter_test.go | 48 +++++++++---------- 8 files changed, 43 insertions(+), 74 deletions(-) diff --git a/pkg/gitparse/gitparse.go b/pkg/gitparse/gitparse.go index 0923646ee..d52cb9b55 100644 --- a/pkg/gitparse/gitparse.go +++ b/pkg/gitparse/gitparse.go @@ -37,7 +37,7 @@ const ( // based on performance needs or resource constraints, providing a unified way to interact with different content types. type contentWriter interface { // Write appends data to the content storage. // Write appends data to the content storage. - Write(ctx context.Context, data []byte) (int, error) + Write(data []byte) (int, error) // ReadCloser provides a reader for accessing stored content. ReadCloser() (io.ReadCloser, error) // CloseForWriting closes the content storage for writing. @@ -92,8 +92,8 @@ func (d *Diff) Len() int { return d.contentWriter.Len() } func (d *Diff) ReadCloser() (io.ReadCloser, error) { return d.contentWriter.ReadCloser() } // write delegates to the contentWriter. -func (d *Diff) write(ctx context.Context, p []byte) error { - _, err := d.contentWriter.Write(ctx, p) +func (d *Diff) write(p []byte) error { + _, err := d.contentWriter.Write(p) return err } @@ -483,7 +483,7 @@ func (c *Parser) FromReader(ctx context.Context, stdOut io.Reader, diffChan chan latestState = HunkContentLine } // TODO: Why do we care about this? It creates empty lines in the diff. If there are no plusLines, it's just newlines. - if err := currentDiff.write(ctx, []byte("\n")); err != nil { + if err := currentDiff.write([]byte("\n")); err != nil { ctx.Logger().Error(err, "failed to write to diff") } case isHunkPlusLine(latestState, line): @@ -491,7 +491,7 @@ func (c *Parser) FromReader(ctx context.Context, stdOut io.Reader, diffChan chan latestState = HunkContentLine } - if err := currentDiff.write(ctx, line[1:]); err != nil { + if err := currentDiff.write(line[1:]); err != nil { ctx.Logger().Error(err, "failed to write to diff") } // NoOp. We only care about additions. diff --git a/pkg/gitparse/gitparse_test.go b/pkg/gitparse/gitparse_test.go index 9033e083c..99aba71be 100644 --- a/pkg/gitparse/gitparse_test.go +++ b/pkg/gitparse/gitparse_test.go @@ -694,7 +694,7 @@ func TestCommitParsing(t *testing.T) { func newBufferedFileWriterWithContent(content []byte) *bufferedfilewriter.BufferedFileWriter { ctx := context.Background() b := bufferedfilewriter.New(ctx) - _, err := b.Write(ctx, content) // Using Write method to add content + _, err := b.Write(content) // Using Write method to add content if err != nil { panic(err) } @@ -704,7 +704,7 @@ func newBufferedFileWriterWithContent(content []byte) *bufferedfilewriter.Buffer func newBufferWithContent(content []byte) *bufferwriter.BufferWriter { ctx := context.Background() b := bufferwriter.New(ctx) - _, _ = b.Write(ctx, content) // Using Write method to add content + _, _ = b.Write(content) // Using Write method to add content return b } diff --git a/pkg/writers/buffer/buffer.go b/pkg/writers/buffer/buffer.go index 9a7c5cf1b..fd04237db 100644 --- a/pkg/writers/buffer/buffer.go +++ b/pkg/writers/buffer/buffer.go @@ -118,10 +118,9 @@ func (b *Buffer) recordGrowth(size int) { } // Write date to the buffer. -func (b *Buffer) Write(ctx context.Context, data []byte) (int, error) { +func (b *Buffer) Write(data []byte) (int, error) { if b.Buffer == nil { // This case should ideally never occur if buffers are properly managed. - ctx.Logger().Error(fmt.Errorf("buffer is nil, initializing a new buffer"), "action", "initializing_new_buffer") b.Buffer = bytes.NewBuffer(make([]byte, 0, defaultBufferSize)) b.resetMetric() } @@ -129,23 +128,11 @@ func (b *Buffer) Write(ctx context.Context, data []byte) (int, error) { size := len(data) bufferLength := b.Buffer.Len() totalSizeNeeded := bufferLength + size - // If the total size is within the threshold, write to the buffer. - ctx.Logger().V(4).Info( - "writing to buffer", - "data_size", size, - "content_size", bufferLength, - ) + // If the total size is within the threshold, write to the buffer. availableSpace := b.Buffer.Cap() - bufferLength growSize := totalSizeNeeded - bufferLength if growSize > availableSpace { - ctx.Logger().V(4).Info( - "buffer size exceeded, growing buffer", - "current_size", bufferLength, - "new_size", totalSizeNeeded, - "available_space", availableSpace, - "grow_size", growSize, - ) // We are manually growing the buffer so we can track the growth via metrics. // Knowing the exact data size, we directly resize to fit it, rather than exponential growth // which may require multiple allocations and copies if the size required is much larger diff --git a/pkg/writers/buffer/buffer_test.go b/pkg/writers/buffer/buffer_test.go index da40e6ce0..3a690da32 100644 --- a/pkg/writers/buffer/buffer_test.go +++ b/pkg/writers/buffer/buffer_test.go @@ -144,7 +144,7 @@ func TestBufferWrite(t *testing.T) { buf := &Buffer{Buffer: bytes.NewBuffer(make([]byte, 0, tc.initialCapacity))} totalWritten := 0 for _, data := range tc.writeDataSequence { - n, err := buf.Write(context.Background(), data) + n, err := buf.Write(data) assert.NoError(t, err) totalWritten += n diff --git a/pkg/writers/buffer_writer/bufferwriter.go b/pkg/writers/buffer_writer/bufferwriter.go index 5cc70490e..cd51a67e3 100644 --- a/pkg/writers/buffer_writer/bufferwriter.go +++ b/pkg/writers/buffer_writer/bufferwriter.go @@ -52,10 +52,8 @@ func New(ctx context.Context) *BufferWriter { return &BufferWriter{buf: buf, state: writeOnly, bufPool: bufferPool} } -// Write delegates the writing operation to the underlying bytes.Buffer, ignoring the context. -// The context is included to satisfy the contentWriter interface, allowing for future extensions -// where context handling might be necessary (e.g., for timeouts or cancellation). -func (b *BufferWriter) Write(ctx context.Context, data []byte) (int, error) { +// Write delegates the writing operation to the underlying bytes.Buffer. +func (b *BufferWriter) Write(data []byte) (int, error) { if b.state != writeOnly { return 0, fmt.Errorf("buffer must be in write-only mode to write data; current state: %d", b.state) } @@ -67,14 +65,8 @@ func (b *BufferWriter) Write(ctx context.Context, data []byte) (int, error) { bufferLength := uint64(b.buf.Len()) b.metrics.recordDataProcessed(bufferLength, time.Since(start)) - ctx.Logger().V(4).Info( - "write complete", - "data_size", size, - "buffer_len", bufferLength, - "buffer_size", b.buf.Cap(), - ) }(start) - return b.buf.Write(ctx, data) + return b.buf.Write(data) } // ReadCloser provides a read-closer for the buffer's content. diff --git a/pkg/writers/buffer_writer/bufferwriter_test.go b/pkg/writers/buffer_writer/bufferwriter_test.go index 8cb8376a8..a992490a1 100644 --- a/pkg/writers/buffer_writer/bufferwriter_test.go +++ b/pkg/writers/buffer_writer/bufferwriter_test.go @@ -44,7 +44,7 @@ func TestBufferWriterWrite(t *testing.T) { writer := New(context.Background()) writer.state = tc.initialState - _, err := writer.Write(context.Background(), tc.input) + _, err := writer.Write(tc.input) if tc.expectedError { assert.Error(t, err) } else { @@ -121,7 +121,7 @@ func TestBufferWriterString(t *testing.T) { { name: "String with data", prepareBuffer: func(bw *BufferWriter) { - _, _ = bw.Write(context.Background(), []byte("test data")) + _, _ = bw.Write([]byte("test data")) }, expectedStr: "test data", expectedError: false, diff --git a/pkg/writers/buffered_file_writer/bufferedfilewriter.go b/pkg/writers/buffered_file_writer/bufferedfilewriter.go index d1c929340..85dcfbc53 100644 --- a/pkg/writers/buffered_file_writer/bufferedfilewriter.go +++ b/pkg/writers/buffered_file_writer/bufferedfilewriter.go @@ -27,11 +27,10 @@ func (bufferedFileWriterMetrics) recordDataProcessed(size uint64, dur time.Durat totalWriteDuration.Add(float64(dur.Microseconds())) } -func (bufferedFileWriterMetrics) recordDiskWrite(ctx context.Context, f *os.File) { +func (bufferedFileWriterMetrics) recordDiskWrite(f *os.File) { diskWriteCount.Inc() size, err := f.Stat() if err != nil { - ctx.Logger().Error(err, "failed to get file size for metric") return } fileSizeHistogram.Observe(float64(size.Size())) @@ -122,7 +121,7 @@ func (w *BufferedFileWriter) String() (string, error) { } // Write writes data to the buffer or a file, depending on the size. -func (w *BufferedFileWriter) Write(ctx context.Context, data []byte) (int, error) { +func (w *BufferedFileWriter) Write(data []byte) (int, error) { if w.state != writeOnly { return 0, fmt.Errorf("BufferedFileWriter must be in write-only mode to write") } @@ -132,19 +131,12 @@ func (w *BufferedFileWriter) Write(ctx context.Context, data []byte) (int, error start := time.Now() defer func(start time.Time) { w.metrics.recordDataProcessed(size, time.Since(start)) - w.size += size - ctx.Logger().V(4).Info( - "write complete", - "data_size", size, - "content_size", bufferLength, - "total_size", w.size, - ) }(start) totalSizeNeeded := uint64(bufferLength) + size if totalSizeNeeded <= w.threshold { - return w.buf.Write(ctx, data) + return w.buf.Write(data) } // Switch to file writing if threshold is exceeded. @@ -157,19 +149,17 @@ func (w *BufferedFileWriter) Write(ctx context.Context, data []byte) (int, error w.filename = file.Name() w.file = file - w.metrics.recordDiskWrite(ctx, file) + w.metrics.recordDiskWrite(file) // Transfer existing data in buffer to the file, then clear the buffer. // This ensures all the data is in one place - either entirely in the buffer or the file. if bufferLength > 0 { - ctx.Logger().V(4).Info("writing buffer to file", "content_size", bufferLength) if _, err := w.buf.WriteTo(w.file); err != nil { return 0, err } w.bufPool.Put(w.buf) } } - ctx.Logger().V(4).Info("writing to file", "data_size", size) return w.file.Write(data) } diff --git a/pkg/writers/buffered_file_writer/bufferedfilewriter_test.go b/pkg/writers/buffered_file_writer/bufferedfilewriter_test.go index 9d6da38b8..b99378165 100644 --- a/pkg/writers/buffered_file_writer/bufferedfilewriter_test.go +++ b/pkg/writers/buffered_file_writer/bufferedfilewriter_test.go @@ -79,12 +79,12 @@ func TestBufferedFileWriterString(t *testing.T) { ctx := context.Background() writer := New(ctx, WithThreshold(tc.threshold)) // First write, should go to file if it exceeds the threshold. - _, err := writer.Write(ctx, tc.input) + _, err := writer.Write(tc.input) assert.NoError(t, err) // Second write, should go to buffer if tc.additionalInput != nil { - _, err = writer.Write(ctx, tc.additionalInput) + _, err = writer.Write(tc.additionalInput) assert.NoError(t, err) } @@ -111,7 +111,7 @@ func BenchmarkBufferedFileWriterString_BufferOnly_Small(b *testing.B) { ctx := context.Background() writer := New(ctx) - _, err := writer.Write(ctx, data) + _, err := writer.Write(data) assert.NoError(b, err) benchmarkBufferedFileWriterString(b, writer) @@ -129,7 +129,7 @@ func BenchmarkBufferedFileWriterString_BufferOnly_Medium(b *testing.B) { ctx := context.Background() writer := New(ctx) - _, err := writer.Write(ctx, data) + _, err := writer.Write(data) assert.NoError(b, err) benchmarkBufferedFileWriterString(b, writer) @@ -148,7 +148,7 @@ func BenchmarkBufferedFileWriterString_OnlyFile_Small(b *testing.B) { ctx := context.Background() writer := New(ctx) - _, err := writer.Write(ctx, data) + _, err := writer.Write(data) assert.NoError(b, err) benchmarkBufferedFileWriterString(b, writer) @@ -167,7 +167,7 @@ func BenchmarkBufferedFileWriterString_OnlyFile_Medium(b *testing.B) { ctx := context.Background() writer := New(ctx) - _, err := writer.Write(ctx, data) + _, err := writer.Write(data) assert.NoError(b, err) benchmarkBufferedFileWriterString(b, writer) @@ -186,11 +186,11 @@ func BenchmarkBufferedFileWriterString_BufferWithFile_Small(b *testing.B) { ctx := context.Background() writer := New(ctx) - _, err := writer.Write(ctx, data) + _, err := writer.Write(data) assert.NoError(b, err) // Write again so we also fill up the buffer. - _, err = writer.Write(ctx, data) + _, err = writer.Write(data) assert.NoError(b, err) benchmarkBufferedFileWriterString(b, writer) @@ -209,11 +209,11 @@ func BenchmarkBufferedFileWriterString_BufferWithFile_Medium(b *testing.B) { ctx := context.Background() writer := New(ctx) - _, err := writer.Write(ctx, data) + _, err := writer.Write(data) assert.NoError(b, err) // Write again so we also fill up the buffer. - _, err = writer.Write(ctx, data) + _, err = writer.Write(data) assert.NoError(b, err) benchmarkBufferedFileWriterString(b, writer) @@ -253,7 +253,7 @@ func TestBufferedFileWriterLen(t *testing.T) { t.Run(tc.name, func(t *testing.T) { t.Parallel() writer := New(context.Background()) - _, err := writer.Write(context.Background(), tc.input) + _, err := writer.Write(tc.input) assert.NoError(t, err) length := writer.Len() @@ -271,7 +271,7 @@ func TestBufferedFileWriterWriteWithinThreshold(t *testing.T) { data := []byte("hello world") writer := New(ctx, WithThreshold(64)) - _, err := writer.Write(ctx, data) + _, err := writer.Write(data) assert.NoError(t, err) assert.Equal(t, data, writer.buf.Bytes()) @@ -286,7 +286,7 @@ func TestBufferedFileWriterWriteExceedsThreshold(t *testing.T) { data := []byte("hello world") writer := New(ctx, WithThreshold(5)) - _, err := writer.Write(ctx, data) + _, err := writer.Write(data) assert.NoError(t, err) defer func() { @@ -312,7 +312,7 @@ func TestBufferedFileWriterWriteAfterFlush(t *testing.T) { // Initialize writer with a threshold that initialData will exceed. writer := New(ctx, WithThreshold(uint64(len(initialData)-1))) - _, err := writer.Write(ctx, initialData) + _, err := writer.Write(initialData) assert.NoError(t, err) defer func() { @@ -328,7 +328,7 @@ func TestBufferedFileWriterWriteAfterFlush(t *testing.T) { assert.Equal(t, initialData, fileContents) // Perform a subsequent write with data under the threshold. - _, err = writer.Write(ctx, subsequentData) + _, err = writer.Write(subsequentData) assert.NoError(t, err) assert.Equal(t, subsequentData, writer.buf.Bytes()) // Check buffer contents @@ -362,7 +362,7 @@ func TestBufferedFileWriterClose(t *testing.T) { name: "No File Created, Only Buffer Data", prepareWriter: func(w *BufferedFileWriter) { // Write data under the threshold - _, _ = w.Write(ctx, []byte("small data")) + _, _ = w.Write([]byte("small data")) }, expectFileContent: "", }, @@ -370,7 +370,7 @@ func TestBufferedFileWriterClose(t *testing.T) { name: "File Created, No Data in Buffer", prepareWriter: func(w *BufferedFileWriter) { // Write data over the threshold to create a file - _, _ = w.Write(ctx, []byte("large data is more than the threshold")) + _, _ = w.Write([]byte("large data is more than the threshold")) }, expectFileContent: "large data is more than the threshold", }, @@ -378,8 +378,8 @@ func TestBufferedFileWriterClose(t *testing.T) { name: "File Created, Data in Buffer", prepareWriter: func(w *BufferedFileWriter) { // Write data over the threshold to create a file, then write more data - _, _ = w.Write(ctx, []byte("large data is more than the threshold")) - _, _ = w.Write(ctx, []byte(" more data")) + _, _ = w.Write([]byte("large data is more than the threshold")) + _, _ = w.Write([]byte(" more data")) }, expectFileContent: "large data is more than the threshold more data", }, @@ -387,7 +387,7 @@ func TestBufferedFileWriterClose(t *testing.T) { name: "File Created, Buffer Cleared", prepareWriter: func(w *BufferedFileWriter) { // Write data over the threshold to create a file, then clear the buffer. - _, _ = w.Write(ctx, []byte("large data is more than the threshold")) + _, _ = w.Write([]byte("large data is more than the threshold")) w.buf.Reset() }, expectFileContent: "large data is more than the threshold", @@ -426,7 +426,7 @@ func TestBufferedFileWriterStateTransitionOnClose(t *testing.T) { assert.Equal(t, writeOnly, writer.state) // Perform some write operation. - _, err := writer.Write(context.Background(), []byte("test data")) + _, err := writer.Write([]byte("test data")) assert.NoError(t, err) // Close the writer. @@ -443,7 +443,7 @@ func TestBufferedFileWriterWriteInReadOnlyState(t *testing.T) { _ = writer.CloseForWriting() // Transition to read-only mode // Attempt to write in read-only mode. - _, err := writer.Write(context.Background(), []byte("should fail")) + _, err := writer.Write([]byte("should fail")) assert.Error(t, err) } @@ -462,7 +462,7 @@ func BenchmarkBufferedFileWriterWriteLarge(b *testing.B) { b.StartTimer() { - _, err := writer.Write(ctx, data) + _, err := writer.Write(data) assert.NoError(b, err) } b.StopTimer() @@ -492,7 +492,7 @@ func BenchmarkBufferedFileWriterWriteSmall(b *testing.B) { b.StartTimer() { - _, err := writer.Write(ctx, data) + _, err := writer.Write(data) assert.NoError(b, err) } b.StopTimer() From af095c294ca5e03681711a5b17b281bf4b884abd Mon Sep 17 00:00:00 2001 From: Cody Rose Date: Tue, 23 Apr 2024 16:18:45 -0400 Subject: [PATCH 26/32] Add false positive info to proto (#2729) This PR adds false positive information to the Result protobuf message in anticipation of us tracking it as first-class secret metadata. We're not doing that yet (it's blocked behind #2643) but setting up the messages now means we'll be able to do it later with less of a code delta. --- pkg/pb/detectorspb/detectors.pb.go | 2242 ++++++++++--------- pkg/pb/detectorspb/detectors.pb.validate.go | 135 ++ proto/detectors.proto | 7 + 3 files changed, 1307 insertions(+), 1077 deletions(-) diff --git a/pkg/pb/detectorspb/detectors.pb.go b/pkg/pb/detectorspb/detectors.pb.go index 8b091b588..9a82a94a8 100644 --- a/pkg/pb/detectorspb/detectors.pb.go +++ b/pkg/pb/detectorspb/detectors.pb.go @@ -3103,7 +3103,8 @@ type Result struct { DecoderType DecoderType `protobuf:"varint,9,opt,name=decoder_type,json=decoderType,proto3,enum=detectors.DecoderType" json:"decoder_type,omitempty"` // This field should only be populated if the verification process itself failed in a way that provides no information // about the verification status of the candidate secret, such as if the verification request timed out. - VerificationErrorMessage string `protobuf:"bytes,10,opt,name=verification_error_message,json=verificationErrorMessage,proto3" json:"verification_error_message,omitempty"` + VerificationErrorMessage string `protobuf:"bytes,10,opt,name=verification_error_message,json=verificationErrorMessage,proto3" json:"verification_error_message,omitempty"` + FalsePositiveInfo *FalsePositiveInfo `protobuf:"bytes,11,opt,name=false_positive_info,json=falsePositiveInfo,proto3" json:"false_positive_info,omitempty"` } func (x *Result) Reset() { @@ -3201,6 +3202,68 @@ func (x *Result) GetVerificationErrorMessage() string { return "" } +func (x *Result) GetFalsePositiveInfo() *FalsePositiveInfo { + if x != nil { + return x.FalsePositiveInfo + } + return nil +} + +type FalsePositiveInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + WordMatch bool `protobuf:"varint,1,opt,name=word_match,json=wordMatch,proto3" json:"word_match,omitempty"` + LowEntropy bool `protobuf:"varint,2,opt,name=low_entropy,json=lowEntropy,proto3" json:"low_entropy,omitempty"` +} + +func (x *FalsePositiveInfo) Reset() { + *x = FalsePositiveInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_detectors_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FalsePositiveInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FalsePositiveInfo) ProtoMessage() {} + +func (x *FalsePositiveInfo) ProtoReflect() protoreflect.Message { + mi := &file_detectors_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FalsePositiveInfo.ProtoReflect.Descriptor instead. +func (*FalsePositiveInfo) Descriptor() ([]byte, []int) { + return file_detectors_proto_rawDescGZIP(), []int{1} +} + +func (x *FalsePositiveInfo) GetWordMatch() bool { + if x != nil { + return x.WordMatch + } + return false +} + +func (x *FalsePositiveInfo) GetLowEntropy() bool { + if x != nil { + return x.LowEntropy + } + return false +} + type StructuredData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3213,7 +3276,7 @@ type StructuredData struct { func (x *StructuredData) Reset() { *x = StructuredData{} if protoimpl.UnsafeEnabled { - mi := &file_detectors_proto_msgTypes[1] + mi := &file_detectors_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3226,7 +3289,7 @@ func (x *StructuredData) String() string { func (*StructuredData) ProtoMessage() {} func (x *StructuredData) ProtoReflect() protoreflect.Message { - mi := &file_detectors_proto_msgTypes[1] + mi := &file_detectors_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3239,7 +3302,7 @@ func (x *StructuredData) ProtoReflect() protoreflect.Message { // Deprecated: Use StructuredData.ProtoReflect.Descriptor instead. func (*StructuredData) Descriptor() ([]byte, []int) { - return file_detectors_proto_rawDescGZIP(), []int{1} + return file_detectors_proto_rawDescGZIP(), []int{2} } func (x *StructuredData) GetTlsPrivateKey() []*TlsPrivateKey { @@ -3269,7 +3332,7 @@ type TlsPrivateKey struct { func (x *TlsPrivateKey) Reset() { *x = TlsPrivateKey{} if protoimpl.UnsafeEnabled { - mi := &file_detectors_proto_msgTypes[2] + mi := &file_detectors_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3282,7 +3345,7 @@ func (x *TlsPrivateKey) String() string { func (*TlsPrivateKey) ProtoMessage() {} func (x *TlsPrivateKey) ProtoReflect() protoreflect.Message { - mi := &file_detectors_proto_msgTypes[2] + mi := &file_detectors_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3295,7 +3358,7 @@ func (x *TlsPrivateKey) ProtoReflect() protoreflect.Message { // Deprecated: Use TlsPrivateKey.ProtoReflect.Descriptor instead. func (*TlsPrivateKey) Descriptor() ([]byte, []int) { - return file_detectors_proto_rawDescGZIP(), []int{2} + return file_detectors_proto_rawDescGZIP(), []int{3} } func (x *TlsPrivateKey) GetCertificateFingerprint() string { @@ -3331,7 +3394,7 @@ type GitHubSSHKey struct { func (x *GitHubSSHKey) Reset() { *x = GitHubSSHKey{} if protoimpl.UnsafeEnabled { - mi := &file_detectors_proto_msgTypes[3] + mi := &file_detectors_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3344,7 +3407,7 @@ func (x *GitHubSSHKey) String() string { func (*GitHubSSHKey) ProtoMessage() {} func (x *GitHubSSHKey) ProtoReflect() protoreflect.Message { - mi := &file_detectors_proto_msgTypes[3] + mi := &file_detectors_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3357,7 +3420,7 @@ func (x *GitHubSSHKey) ProtoReflect() protoreflect.Message { // Deprecated: Use GitHubSSHKey.ProtoReflect.Descriptor instead. func (*GitHubSSHKey) Descriptor() ([]byte, []int) { - return file_detectors_proto_rawDescGZIP(), []int{3} + return file_detectors_proto_rawDescGZIP(), []int{4} } func (x *GitHubSSHKey) GetUser() string { @@ -3378,7 +3441,7 @@ var File_detectors_proto protoreflect.FileDescriptor var file_detectors_proto_rawDesc = []byte{ 0x0a, 0x0f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0xc6, 0x03, 0x0a, + 0x6f, 0x12, 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x94, 0x04, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x65, 0x64, @@ -3403,1053 +3466,1064 @@ var file_detectors_proto_rawDesc = []byte{ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3c, 0x0a, 0x0e, 0x45, 0x78, 0x74, 0x72, 0x61, - 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x91, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x0f, 0x74, 0x6c, 0x73, 0x5f, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2e, 0x54, 0x6c, - 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x74, 0x6c, 0x73, - 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x3d, 0x0a, 0x0e, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x5f, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2e, 0x47, - 0x69, 0x74, 0x48, 0x75, 0x62, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x52, 0x0c, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x53, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x22, 0xa6, 0x01, 0x0a, 0x0d, 0x54, 0x6c, - 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x17, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, - 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, - 0x72, 0x69, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, - 0x31, 0x0a, 0x14, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x22, 0x58, 0x0a, 0x0c, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x53, 0x53, 0x48, 0x4b, - 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x2a, 0x51, 0x0a, 0x0b, - 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, - 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x41, 0x53, 0x45, 0x36, 0x34, 0x10, 0x02, 0x12, - 0x09, 0x0a, 0x05, 0x55, 0x54, 0x46, 0x31, 0x36, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x53, - 0x43, 0x41, 0x50, 0x45, 0x44, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x04, 0x2a, - 0xf7, 0x7d, 0x0a, 0x0c, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x6c, 0x69, 0x62, 0x61, 0x62, 0x61, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x41, 0x4d, 0x51, 0x50, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x57, 0x53, 0x10, 0x02, - 0x12, 0x09, 0x0a, 0x05, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, - 0x69, 0x72, 0x63, 0x6c, 0x65, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x62, - 0x61, 0x73, 0x65, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x43, 0x50, 0x10, 0x06, 0x12, 0x0b, - 0x0a, 0x07, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x47, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x69, 0x74, 0x6c, 0x61, - 0x62, 0x10, 0x09, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x44, 0x42, 0x43, 0x10, 0x0a, 0x12, 0x0c, 0x0a, - 0x08, 0x52, 0x61, 0x7a, 0x6f, 0x72, 0x50, 0x61, 0x79, 0x10, 0x0b, 0x12, 0x0c, 0x0a, 0x08, 0x53, - 0x65, 0x6e, 0x64, 0x47, 0x72, 0x69, 0x64, 0x10, 0x0c, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x6c, 0x61, - 0x63, 0x6b, 0x10, 0x0d, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x71, 0x75, 0x61, 0x72, 0x65, 0x10, 0x0e, - 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x10, 0x0f, - 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x69, 0x70, 0x65, 0x10, 0x10, 0x12, 0x07, 0x0a, 0x03, - 0x55, 0x52, 0x49, 0x10, 0x11, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x72, 0x6f, 0x70, 0x62, 0x6f, 0x78, - 0x10, 0x12, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x65, 0x72, 0x6f, 0x6b, 0x75, 0x10, 0x13, 0x12, 0x0d, - 0x0a, 0x09, 0x4d, 0x61, 0x69, 0x6c, 0x63, 0x68, 0x69, 0x6d, 0x70, 0x10, 0x14, 0x12, 0x08, 0x0a, - 0x04, 0x4f, 0x6b, 0x74, 0x61, 0x10, 0x15, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x6e, 0x65, 0x4c, 0x6f, - 0x67, 0x69, 0x6e, 0x10, 0x16, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x61, 0x6c, - 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x10, 0x17, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x71, 0x75, - 0x61, 0x72, 0x65, 0x41, 0x70, 0x70, 0x10, 0x19, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x77, 0x69, 0x6c, - 0x69, 0x6f, 0x10, 0x1a, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x65, 0x73, 0x74, 0x10, 0x1b, 0x12, 0x0c, - 0x0a, 0x08, 0x54, 0x72, 0x61, 0x76, 0x69, 0x73, 0x43, 0x49, 0x10, 0x1d, 0x12, 0x10, 0x0a, 0x0c, - 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x10, 0x1e, 0x12, 0x0f, - 0x0a, 0x0b, 0x50, 0x61, 0x79, 0x70, 0x61, 0x6c, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x10, 0x1f, 0x12, - 0x13, 0x0a, 0x0f, 0x50, 0x61, 0x67, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x41, 0x70, 0x69, 0x4b, - 0x65, 0x79, 0x10, 0x20, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x69, 0x72, 0x65, 0x62, 0x61, 0x73, 0x65, - 0x10, 0x21, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x61, 0x69, 0x6c, 0x67, 0x75, 0x6e, 0x10, 0x22, 0x12, - 0x0b, 0x0a, 0x07, 0x48, 0x75, 0x62, 0x53, 0x70, 0x6f, 0x74, 0x10, 0x23, 0x12, 0x0d, 0x0a, 0x09, - 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x41, 0x70, 0x70, 0x10, 0x24, 0x12, 0x0c, 0x0a, 0x08, 0x43, - 0x69, 0x72, 0x63, 0x6c, 0x65, 0x43, 0x49, 0x10, 0x25, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x70, 0x45, - 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x10, 0x26, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x61, 0x74, 0x61, 0x64, - 0x6f, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x27, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x61, 0x63, - 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x10, 0x28, 0x12, 0x1c, 0x0a, 0x18, - 0x41, 0x73, 0x61, 0x6e, 0x61, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x29, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x6d, - 0x70, 0x6c, 0x69, 0x74, 0x75, 0x64, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x2a, 0x12, - 0x14, 0x0a, 0x10, 0x42, 0x69, 0x74, 0x4c, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x10, 0x2b, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x6c, - 0x79, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x2c, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x61, 0x70, - 0x69, 0x65, 0x72, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x10, 0x2d, 0x12, 0x11, 0x0a, 0x0d, - 0x59, 0x6f, 0x75, 0x74, 0x75, 0x62, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x2e, 0x12, - 0x14, 0x0a, 0x10, 0x53, 0x61, 0x6c, 0x65, 0x73, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x4f, 0x61, 0x75, - 0x74, 0x68, 0x32, 0x10, 0x2f, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, - 0x41, 0x70, 0x69, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x10, 0x30, 0x12, 0x0c, 0x0a, 0x08, 0x4e, - 0x70, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x31, 0x12, 0x1a, 0x0a, 0x16, 0x4e, 0x65, 0x77, - 0x52, 0x65, 0x6c, 0x69, 0x63, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x10, 0x32, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x69, 0x72, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x33, 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x6b, 0x61, - 0x6d, 0x61, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x34, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x6d, - 0x61, 0x7a, 0x6f, 0x6e, 0x4d, 0x57, 0x53, 0x10, 0x35, 0x12, 0x0e, 0x0a, 0x0a, 0x4b, 0x75, 0x62, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x36, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x75, 0x74, - 0x68, 0x30, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x10, 0x37, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x69, 0x74, - 0x66, 0x69, 0x6e, 0x65, 0x78, 0x10, 0x38, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x6c, 0x61, 0x72, 0x69, - 0x66, 0x61, 0x69, 0x10, 0x39, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x66, 0x6c, - 0x61, 0x72, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, - 0x3a, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x66, 0x6c, 0x61, 0x72, 0x65, 0x43, - 0x61, 0x4b, 0x65, 0x79, 0x10, 0x3b, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x75, - 0x65, 0x6e, 0x74, 0x10, 0x3c, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x66, 0x75, 0x6c, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x10, 0x3d, 0x12, 0x13, 0x0a, - 0x0f, 0x44, 0x61, 0x74, 0x61, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x10, 0x3e, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x4f, 0x63, 0x65, - 0x61, 0x6e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x10, 0x3f, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x69, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, - 0x40, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x6f, 0x74, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x41, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, - 0x64, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x10, 0x42, 0x12, 0x12, 0x0a, 0x0a, 0x45, 0x74, - 0x73, 0x79, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x43, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x17, - 0x0a, 0x13, 0x46, 0x61, 0x73, 0x74, 0x6c, 0x79, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x44, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x10, 0x45, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x65, 0x43, - 0x41, 0x50, 0x54, 0x43, 0x48, 0x41, 0x10, 0x46, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x47, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x75, - 0x6e, 0x74, 0x65, 0x72, 0x10, 0x48, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x62, 0x6d, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x10, 0x49, 0x12, 0x0b, 0x0a, 0x07, 0x4e, - 0x65, 0x74, 0x6c, 0x69, 0x66, 0x79, 0x10, 0x4a, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x6f, 0x6e, 0x61, - 0x67, 0x65, 0x10, 0x4b, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x71, 0x75, 0x69, 0x6e, 0x69, 0x78, 0x4f, - 0x61, 0x75, 0x74, 0x68, 0x10, 0x4c, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x61, 0x79, 0x73, 0x74, 0x61, - 0x63, 0x6b, 0x10, 0x4d, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x69, 0x64, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x10, 0x4e, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x69, 0x64, 0x4b, 0x65, 0x79, - 0x10, 0x4f, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x6c, 0x69, 0x76, 0x6f, 0x10, 0x50, 0x12, 0x0c, 0x0a, - 0x08, 0x50, 0x6f, 0x73, 0x74, 0x6d, 0x61, 0x72, 0x6b, 0x10, 0x51, 0x12, 0x14, 0x0a, 0x10, 0x50, - 0x75, 0x62, 0x4e, 0x75, 0x62, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x10, - 0x52, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x75, 0x62, 0x4e, 0x75, 0x62, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0x53, 0x12, 0x14, 0x0a, 0x10, - 0x50, 0x75, 0x73, 0x68, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4b, 0x65, 0x79, - 0x10, 0x54, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x77, 0x61, 0x79, 0x4b, 0x65, - 0x79, 0x10, 0x55, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x42, 0x6c, 0x75, - 0x65, 0x56, 0x32, 0x10, 0x56, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x57, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x68, 0x6f, 0x64, 0x61, 0x6e, - 0x4b, 0x65, 0x79, 0x10, 0x58, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x6e, 0x79, 0x6b, 0x4b, 0x65, 0x79, - 0x10, 0x59, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4b, 0x65, 0x79, - 0x10, 0x5a, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x6f, - 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x5b, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x65, 0x6e, 0x63, - 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4b, 0x65, 0x79, 0x10, 0x5c, 0x12, 0x1f, 0x0a, - 0x1b, 0x54, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, - 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x5d, 0x12, 0x10, - 0x0a, 0x0c, 0x54, 0x72, 0x65, 0x6c, 0x6c, 0x6f, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x5e, - 0x12, 0x0e, 0x0a, 0x0a, 0x5a, 0x65, 0x6e, 0x64, 0x65, 0x73, 0x6b, 0x41, 0x70, 0x69, 0x10, 0x5f, - 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x61, 0x78, 0x4d, 0x69, 0x6e, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x10, 0x60, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x69, 0x72, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x61, - 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x73, 0x61, 0x6e, 0x61, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x10, 0x62, - 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x61, 0x70, 0x69, 0x64, 0x41, 0x70, 0x69, 0x10, 0x63, 0x12, 0x16, - 0x0a, 0x12, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x66, 0x6c, 0x61, 0x72, 0x65, 0x41, 0x70, 0x69, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x64, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x65, 0x62, 0x65, 0x78, 0x10, - 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x69, 0x72, 0x65, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x10, 0x66, 0x12, 0x21, 0x0a, - 0x1d, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x66, 0x75, 0x6c, 0x50, 0x65, 0x72, 0x73, 0x6f, - 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x67, - 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x78, 0x10, 0x68, 0x12, 0x14, 0x0a, 0x10, - 0x4d, 0x61, 0x69, 0x6c, 0x4a, 0x65, 0x74, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, - 0x10, 0x69, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x61, 0x69, 0x6c, 0x4a, 0x65, 0x74, 0x53, 0x4d, 0x53, - 0x10, 0x6a, 0x12, 0x11, 0x0a, 0x0d, 0x48, 0x75, 0x62, 0x53, 0x70, 0x6f, 0x74, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x10, 0x6b, 0x12, 0x10, 0x0a, 0x0c, 0x48, 0x75, 0x62, 0x53, 0x70, 0x6f, 0x74, - 0x4f, 0x61, 0x75, 0x74, 0x68, 0x10, 0x6c, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x73, 0x6c, 0x4d, 0x61, - 0x74, 0x65, 0x10, 0x6d, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x75, 0x74, 0x68, 0x30, 0x4d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, - 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x69, 0x72, 0x64, - 0x10, 0x6f, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x45, 0x6d, 0x61, - 0x69, 0x6c, 0x10, 0x70, 0x12, 0x1c, 0x0a, 0x18, 0x46, 0x69, 0x67, 0x6d, 0x61, 0x50, 0x65, 0x72, - 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x10, 0x71, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x54, - 0x65, 0x61, 0x6d, 0x73, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x10, 0x72, 0x12, 0x0d, 0x0a, - 0x09, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x4f, 0x6c, 0x64, 0x10, 0x73, 0x12, 0x0f, 0x0a, 0x0b, - 0x56, 0x75, 0x6c, 0x74, 0x72, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x74, 0x12, 0x0c, 0x0a, - 0x08, 0x50, 0x65, 0x70, 0x69, 0x70, 0x6f, 0x73, 0x74, 0x10, 0x75, 0x12, 0x0b, 0x0a, 0x07, 0x50, - 0x6f, 0x73, 0x74, 0x6d, 0x61, 0x6e, 0x10, 0x76, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x73, 0x69, 0x67, 0x68, 0x74, 0x4b, 0x65, 0x79, 0x10, 0x77, 0x12, 0x0d, 0x0a, 0x09, 0x4a, - 0x69, 0x72, 0x61, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x78, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x65, - 0x78, 0x6d, 0x6f, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x79, 0x12, 0x11, 0x0a, 0x0d, 0x53, - 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x7a, 0x12, 0x10, - 0x0a, 0x0c, 0x53, 0x75, 0x6d, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x10, 0x7b, - 0x12, 0x14, 0x0a, 0x10, 0x50, 0x75, 0x73, 0x68, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x70, - 0x69, 0x4b, 0x65, 0x79, 0x10, 0x7c, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x69, 0x72, 0x62, 0x72, 0x61, - 0x6b, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x10, 0x7d, 0x12, 0x13, - 0x0a, 0x0f, 0x41, 0x69, 0x72, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4b, 0x65, - 0x79, 0x10, 0x7e, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x65, 0x6e, 0x64, 0x6f, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0x7f, 0x12, 0x1f, 0x0a, 0x1a, - 0x53, 0x70, 0x6c, 0x75, 0x6e, 0x6b, 0x4f, 0x62, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x80, 0x01, 0x12, 0x12, 0x0a, - 0x0d, 0x4c, 0x6f, 0x6b, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x81, - 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x69, 0x66, 0x69, - 0x63, 0x10, 0x82, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x4a, 0x75, 0x6d, 0x70, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x10, 0x83, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x70, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, - 0x85, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x86, 0x01, 0x12, - 0x0c, 0x0a, 0x07, 0x44, 0x72, 0x6f, 0x6e, 0x65, 0x43, 0x49, 0x10, 0x87, 0x01, 0x12, 0x0c, 0x0a, - 0x07, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x49, 0x4f, 0x10, 0x88, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x54, - 0x77, 0x65, 0x6c, 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x10, 0x89, 0x01, 0x12, 0x0e, 0x0a, 0x09, - 0x44, 0x37, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x10, 0x8a, 0x01, 0x12, 0x10, 0x0a, 0x0b, - 0x53, 0x63, 0x72, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x65, 0x65, 0x10, 0x8b, 0x01, 0x12, 0x0b, - 0x0a, 0x06, 0x4b, 0x65, 0x65, 0x6e, 0x49, 0x4f, 0x10, 0x8c, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x57, - 0x61, 0x6b, 0x61, 0x74, 0x69, 0x6d, 0x65, 0x10, 0x8d, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x6b, 0x69, 0x74, 0x65, 0x10, 0x8e, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x56, 0x65, - 0x72, 0x69, 0x6d, 0x61, 0x69, 0x6c, 0x10, 0x8f, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x5a, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x10, 0x90, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x4d, 0x61, - 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x10, 0x91, 0x01, 0x12, 0x0f, 0x0a, - 0x0a, 0x46, 0x61, 0x73, 0x74, 0x73, 0x70, 0x72, 0x69, 0x6e, 0x67, 0x10, 0x92, 0x01, 0x12, 0x0b, - 0x0a, 0x06, 0x50, 0x61, 0x64, 0x64, 0x6c, 0x65, 0x10, 0x93, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x53, - 0x65, 0x6c, 0x6c, 0x66, 0x79, 0x10, 0x94, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x69, 0x78, 0x65, - 0x72, 0x49, 0x4f, 0x10, 0x95, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x42, 0x75, 0x74, 0x74, 0x65, 0x72, - 0x43, 0x4d, 0x53, 0x10, 0x96, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x61, 0x78, 0x6a, 0x61, 0x72, - 0x10, 0x97, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x41, 0x76, 0x61, 0x6c, 0x61, 0x72, 0x61, 0x10, 0x98, - 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x48, 0x65, 0x6c, 0x70, 0x73, 0x63, 0x6f, 0x75, 0x74, 0x10, 0x99, - 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x50, 0x61, 0x74, 0x68, - 0x10, 0x9a, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x5a, 0x65, 0x70, 0x6c, 0x69, 0x6e, 0x10, 0x9b, 0x01, - 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x10, 0x9c, 0x01, 0x12, - 0x0d, 0x0a, 0x08, 0x4d, 0x61, 0x69, 0x6c, 0x6d, 0x6f, 0x64, 0x6f, 0x10, 0x9d, 0x01, 0x12, 0x0c, - 0x0a, 0x07, 0x43, 0x61, 0x6e, 0x6e, 0x79, 0x49, 0x6f, 0x10, 0x9e, 0x01, 0x12, 0x0e, 0x0a, 0x09, - 0x50, 0x69, 0x70, 0x65, 0x64, 0x72, 0x69, 0x76, 0x65, 0x10, 0x9f, 0x01, 0x12, 0x0b, 0x0a, 0x06, - 0x56, 0x65, 0x72, 0x63, 0x65, 0x6c, 0x10, 0xa0, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x50, 0x6f, 0x73, - 0x74, 0x68, 0x6f, 0x67, 0x41, 0x70, 0x70, 0x10, 0xa1, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x53, 0x69, - 0x6e, 0x63, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xa2, 0x01, 0x12, 0x0d, 0x0a, - 0x08, 0x41, 0x79, 0x72, 0x73, 0x68, 0x61, 0x72, 0x65, 0x10, 0xa3, 0x01, 0x12, 0x0f, 0x0a, 0x0a, - 0x48, 0x65, 0x6c, 0x70, 0x43, 0x72, 0x75, 0x6e, 0x63, 0x68, 0x10, 0xa4, 0x01, 0x12, 0x0e, 0x0a, - 0x09, 0x4c, 0x69, 0x76, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x10, 0xa5, 0x01, 0x12, 0x0b, 0x0a, - 0x06, 0x42, 0x65, 0x61, 0x6d, 0x65, 0x72, 0x10, 0xa6, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x57, 0x65, - 0x43, 0x68, 0x61, 0x74, 0x41, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x10, 0xa7, 0x01, 0x12, 0x12, 0x0a, - 0x0d, 0x4c, 0x69, 0x6e, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x10, 0xa8, - 0x01, 0x12, 0x14, 0x0a, 0x0f, 0x55, 0x62, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa9, 0x01, 0x12, 0x14, 0x0a, 0x0f, 0x41, 0x6c, 0x67, 0x6f, 0x6c, - 0x69, 0x61, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0xaa, 0x01, 0x12, 0x10, 0x0a, - 0x0b, 0x46, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x10, 0xab, 0x01, 0x12, - 0x0d, 0x0a, 0x08, 0x4d, 0x61, 0x6e, 0x64, 0x72, 0x69, 0x6c, 0x6c, 0x10, 0xac, 0x01, 0x12, 0x10, - 0x0a, 0x0b, 0x46, 0x6c, 0x75, 0x74, 0x74, 0x65, 0x72, 0x77, 0x61, 0x76, 0x65, 0x10, 0xad, 0x01, - 0x12, 0x1c, 0x0a, 0x17, 0x4d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6d, 0x6f, 0x73, 0x74, 0x50, 0x65, - 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xae, 0x01, 0x12, 0x0d, - 0x0a, 0x08, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x61, 0x6e, 0x74, 0x10, 0xaf, 0x01, 0x12, 0x0f, 0x0a, - 0x0a, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x10, 0xb0, 0x01, 0x12, 0x0e, - 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x41, 0x50, 0x49, 0x10, 0xb1, 0x01, 0x12, 0x0c, - 0x0a, 0x07, 0x55, 0x62, 0x69, 0x64, 0x6f, 0x74, 0x73, 0x10, 0xb2, 0x01, 0x12, 0x0d, 0x0a, 0x08, - 0x41, 0x6e, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x10, 0xb3, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x44, - 0x77, 0x6f, 0x6c, 0x6c, 0x61, 0x10, 0xb4, 0x01, 0x12, 0x1b, 0x0a, 0x16, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x10, 0xb5, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x53, 0x75, 0x72, 0x67, 0x65, 0x10, 0xb6, - 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x70, 0x61, 0x72, 0x6b, 0x70, 0x6f, 0x73, 0x74, 0x10, 0xb7, - 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x47, 0x6f, 0x43, 0x61, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x10, - 0xb8, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x6f, 0x64, 0x61, 0x63, 0x79, 0x10, 0xb9, 0x01, 0x12, - 0x0b, 0x0a, 0x06, 0x4b, 0x72, 0x61, 0x6b, 0x65, 0x6e, 0x10, 0xba, 0x01, 0x12, 0x0d, 0x0a, 0x08, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x10, 0xbb, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x4b, - 0x61, 0x69, 0x72, 0x6f, 0x73, 0x10, 0xbc, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x63, - 0x6b, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x4d, 0x53, 0x10, 0xbd, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x41, - 0x74, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x61, 0x6e, 0x10, 0xbe, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x4c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x44, 0x61, 0x72, 0x6b, 0x6c, 0x79, 0x10, 0xbf, 0x01, 0x12, 0x0e, - 0x0a, 0x09, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x73, 0x10, 0xc0, 0x01, 0x12, 0x0b, - 0x0a, 0x06, 0x4c, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x10, 0xc1, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x57, - 0x65, 0x50, 0x61, 0x79, 0x10, 0xc2, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x50, 0x6c, 0x61, 0x6e, 0x65, - 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x10, 0xc3, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x44, 0x6f, 0x70, - 0x70, 0x6c, 0x65, 0x72, 0x10, 0xc4, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x67, 0x6f, 0x72, 0x61, - 0x10, 0xc5, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x53, 0x61, 0x6d, 0x73, 0x61, 0x72, 0x61, 0x10, 0xc6, - 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x4f, 0x10, 0xc7, 0x01, 0x12, - 0x0d, 0x0a, 0x08, 0x52, 0x75, 0x62, 0x79, 0x47, 0x65, 0x6d, 0x73, 0x10, 0xc8, 0x01, 0x12, 0x0b, - 0x0a, 0x06, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x49, 0x10, 0xc9, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x53, - 0x75, 0x72, 0x76, 0x65, 0x79, 0x53, 0x70, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x10, 0xca, 0x01, 0x12, - 0x0c, 0x0a, 0x07, 0x53, 0x69, 0x6d, 0x76, 0x6f, 0x6c, 0x79, 0x10, 0xcb, 0x01, 0x12, 0x0e, 0x0a, - 0x09, 0x53, 0x75, 0x72, 0x76, 0x69, 0x63, 0x61, 0x74, 0x65, 0x10, 0xcc, 0x01, 0x12, 0x0d, 0x0a, - 0x08, 0x4f, 0x6d, 0x6e, 0x69, 0x73, 0x65, 0x6e, 0x64, 0x10, 0xcd, 0x01, 0x12, 0x0d, 0x0a, 0x08, - 0x47, 0x72, 0x6f, 0x6f, 0x76, 0x65, 0x68, 0x71, 0x10, 0xce, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x4e, - 0x65, 0x77, 0x73, 0x61, 0x70, 0x69, 0x10, 0xcf, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x68, 0x61, - 0x74, 0x62, 0x6f, 0x74, 0x10, 0xd0, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x63, 0x6b, - 0x53, 0x65, 0x6e, 0x64, 0x73, 0x6d, 0x73, 0x10, 0xd1, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x47, 0x65, - 0x74, 0x67, 0x69, 0x73, 0x74, 0x10, 0xd2, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x4f, 0x10, 0xd3, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x41, 0x70, 0x69, - 0x44, 0x65, 0x63, 0x6b, 0x10, 0xd4, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x4e, 0x66, 0x74, 0x70, 0x6f, - 0x72, 0x74, 0x10, 0xd5, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x6f, 0x70, 0x70, 0x65, 0x72, 0x10, - 0xd6, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x10, 0xd7, 0x01, 0x12, 0x11, - 0x0a, 0x0c, 0x4d, 0x79, 0x66, 0x72, 0x65, 0x73, 0x68, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x10, 0xd8, - 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x61, 0x6c, 0x65, 0x73, 0x66, 0x6c, 0x61, 0x72, 0x65, 0x10, - 0xd9, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x10, 0xda, 0x01, - 0x12, 0x09, 0x0a, 0x04, 0x44, 0x75, 0x64, 0x61, 0x10, 0xdb, 0x01, 0x12, 0x09, 0x0a, 0x04, 0x59, - 0x65, 0x78, 0x74, 0x10, 0xdc, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xdd, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x74, 0x6f, - 0x72, 0x79, 0x62, 0x6c, 0x6f, 0x6b, 0x10, 0xde, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x72, 0x61, - 0x70, 0x68, 0x43, 0x4d, 0x53, 0x10, 0xdf, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x10, 0xe0, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x74, 0x6b, 0x69, 0x74, 0x10, 0xe1, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x43, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x47, 0x75, 0x72, 0x75, 0x10, 0xe2, 0x01, 0x12, 0x0c, - 0x0a, 0x07, 0x4b, 0x61, 0x6c, 0x65, 0x79, 0x72, 0x61, 0x10, 0xe3, 0x01, 0x12, 0x0f, 0x0a, 0x0a, - 0x4d, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x6c, 0x69, 0x74, 0x65, 0x10, 0xe4, 0x01, 0x12, 0x0d, 0x0a, - 0x08, 0x51, 0x75, 0x61, 0x6c, 0x61, 0x72, 0x6f, 0x6f, 0x10, 0xe5, 0x01, 0x12, 0x19, 0x0a, 0x14, - 0x53, 0x61, 0x74, 0x69, 0x73, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x6b, 0x65, 0x79, 0x10, 0xe6, 0x01, 0x12, 0x17, 0x0a, 0x12, 0x53, 0x61, 0x74, 0x69, 0x73, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x57, 0x72, 0x69, 0x74, 0x65, 0x6b, 0x65, 0x79, 0x10, 0xe7, 0x01, - 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x61, 0x74, 0x10, 0xe8, 0x01, - 0x12, 0x13, 0x0a, 0x0e, 0x53, 0x75, 0x72, 0x76, 0x65, 0x79, 0x41, 0x6e, 0x79, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x10, 0xe9, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x75, 0x72, 0x76, 0x65, 0x79, 0x42, - 0x6f, 0x74, 0x10, 0xea, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x57, 0x65, 0x62, 0x65, 0x6e, 0x67, 0x61, - 0x67, 0x65, 0x10, 0xeb, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x5a, 0x6f, 0x6e, 0x6b, 0x61, 0x46, 0x65, - 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x10, 0xec, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x44, 0x65, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x10, 0xed, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x65, 0x65, - 0x64, 0x69, 0x65, 0x72, 0x10, 0xee, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x62, 0x62, 0x79, 0x73, - 0x61, 0x6c, 0x65, 0x10, 0xef, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x61, 0x67, 0x6e, 0x65, 0x74, - 0x69, 0x63, 0x10, 0xf0, 0x01, 0x12, 0x10, 0x0a, 0x07, 0x4e, 0x79, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x10, 0xf1, 0x01, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x6f, 0x6c, 0x79, 0x67, - 0x6f, 0x6e, 0x10, 0xf2, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x6f, 0x77, 0x72, 0x62, 0x6f, 0x74, - 0x10, 0xf3, 0x01, 0x12, 0x13, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x49, - 0x4f, 0x10, 0xf4, 0x01, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x6b, 0x72, 0x61, - 0x70, 0x70, 0x69, 0x6f, 0x10, 0xf5, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x4d, 0x6f, 0x6e, 0x64, 0x61, - 0x79, 0x10, 0xf6, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x6d, 0x61, 0x72, 0x74, 0x73, 0x68, 0x65, - 0x65, 0x74, 0x73, 0x10, 0xf7, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x6b, 0x65, 0x10, - 0xf8, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x10, 0xf9, 0x01, 0x12, 0x0d, - 0x0a, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x6b, 0x69, 0x74, 0x10, 0xfa, 0x01, 0x12, 0x0f, 0x0a, - 0x0a, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x6f, 0x6d, 0x61, 0x74, 0x10, 0xfb, 0x01, 0x12, 0x0f, - 0x0a, 0x0a, 0x53, 0x61, 0x6c, 0x65, 0x73, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x10, 0xfc, 0x01, 0x12, - 0x0a, 0x0a, 0x05, 0x42, 0x6f, 0x72, 0x65, 0x64, 0x10, 0xfd, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x43, - 0x61, 0x6d, 0x70, 0x61, 0x79, 0x6e, 0x10, 0xfe, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6c, 0x69, - 0x6e, 0x63, 0x68, 0x70, 0x61, 0x64, 0x10, 0xff, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x48, 0x75, 0x62, 0x10, 0x80, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x65, - 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x10, 0x81, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x79, 0x73, - 0x70, 0x61, 0x74, 0x63, 0x68, 0x10, 0x82, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x47, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x61, 0x70, 0x69, 0x10, 0x83, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x48, 0x61, - 0x72, 0x76, 0x65, 0x73, 0x74, 0x10, 0x84, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x4d, 0x6f, 0x6f, 0x73, - 0x65, 0x6e, 0x64, 0x10, 0x85, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x57, 0x65, - 0x61, 0x74, 0x68, 0x65, 0x72, 0x10, 0x86, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x69, 0x74, 0x65, - 0x6c, 0x65, 0x61, 0x66, 0x10, 0x87, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x71, 0x75, 0x61, 0x72, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x10, 0x88, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x6c, 0x6f, - 0x77, 0x46, 0x6c, 0x75, 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x4e, 0x69, 0x6d, 0x62, 0x6c, - 0x65, 0x10, 0x8a, 0x02, 0x12, 0x14, 0x0a, 0x0f, 0x4c, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x6e, 0x6f, - 0x79, 0x69, 0x6e, 0x67, 0x43, 0x52, 0x4d, 0x10, 0x8b, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x4e, 0x65, - 0x74, 0x68, 0x75, 0x6e, 0x74, 0x10, 0x8c, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x74, - 0x69, 0x76, 0x6f, 0x10, 0x8d, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x73, 0x75, 0x6c, - 0x65, 0x43, 0x52, 0x4d, 0x10, 0x8e, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x49, 0x6e, 0x73, 0x69, 0x67, - 0x68, 0x74, 0x6c, 0x79, 0x10, 0x8f, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x4b, 0x79, 0x6c, 0x61, 0x73, - 0x10, 0x90, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4f, 0x6e, 0x65, 0x70, 0x61, 0x67, 0x65, 0x43, 0x52, - 0x4d, 0x10, 0x91, 0x02, 0x12, 0x09, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x10, 0x92, 0x02, 0x12, - 0x10, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x52, 0x4d, 0x10, 0x93, - 0x02, 0x12, 0x18, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x53, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x10, 0x94, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x41, - 0x69, 0x72, 0x73, 0x68, 0x69, 0x70, 0x10, 0x95, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x72, 0x74, - 0x73, 0x79, 0x10, 0x96, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x59, 0x61, 0x6e, 0x64, 0x65, 0x78, 0x10, - 0x97, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x66, 0x79, 0x10, 0x98, - 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x10, 0x99, 0x02, - 0x12, 0x10, 0x0a, 0x0b, 0x45, 0x61, 0x73, 0x79, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x10, - 0x9a, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x74, 0x68, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x10, - 0x9b, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x45, 0x76, 0x65, 0x72, 0x68, 0x6f, 0x75, 0x72, 0x10, 0x9c, - 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x75, 0x6c, 0x63, 0x72, 0x75, 0x6d, 0x10, 0x9d, 0x02, 0x12, - 0x0d, 0x0a, 0x08, 0x47, 0x65, 0x6f, 0x49, 0x70, 0x69, 0x66, 0x69, 0x10, 0x9e, 0x02, 0x12, 0x0c, - 0x0a, 0x07, 0x4a, 0x6f, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0x9f, 0x02, 0x12, 0x0c, 0x0a, 0x07, - 0x52, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x72, 0x10, 0xa0, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x54, 0x69, - 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x61, 0x70, 0x69, 0x10, 0xa1, 0x02, 0x12, 0x0f, 0x0a, 0x0a, - 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x10, 0xa2, 0x02, 0x12, 0x0b, 0x0a, - 0x06, 0x56, 0x70, 0x6e, 0x61, 0x70, 0x69, 0x10, 0xa3, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xa4, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x41, 0x70, - 0x6f, 0x6c, 0x6c, 0x6f, 0x10, 0xa5, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x45, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x67, 0x6e, 0x10, 0xa6, 0x02, 0x12, 0x09, 0x0a, 0x04, 0x4a, 0x75, 0x72, 0x6f, 0x10, 0xa7, - 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4b, 0x61, 0x72, 0x6d, 0x61, 0x43, 0x52, 0x4d, 0x10, 0xa8, 0x02, - 0x12, 0x0c, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x6c, 0x6f, 0x10, 0xa9, 0x02, 0x12, 0x0d, - 0x0a, 0x08, 0x50, 0x61, 0x6e, 0x64, 0x61, 0x64, 0x6f, 0x63, 0x10, 0xaa, 0x02, 0x12, 0x0e, 0x0a, - 0x09, 0x52, 0x65, 0x76, 0x61, 0x6d, 0x70, 0x43, 0x52, 0x4d, 0x10, 0xab, 0x02, 0x12, 0x10, 0x0a, - 0x0b, 0x53, 0x61, 0x6c, 0x65, 0x73, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x10, 0xac, 0x02, 0x12, - 0x0d, 0x0a, 0x08, 0x41, 0x6c, 0x63, 0x6f, 0x6e, 0x6f, 0x73, 0x74, 0x10, 0xad, 0x02, 0x12, 0x0c, - 0x0a, 0x07, 0x42, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x10, 0xae, 0x02, 0x12, 0x10, 0x0a, 0x0b, - 0x41, 0x63, 0x63, 0x75, 0x77, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, 0x10, 0xaf, 0x02, 0x12, 0x13, - 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x72, 0x10, 0xb0, 0x02, 0x1a, - 0x02, 0x08, 0x01, 0x12, 0x09, 0x0a, 0x04, 0x52, 0x61, 0x77, 0x67, 0x10, 0xb1, 0x02, 0x12, 0x0e, - 0x0a, 0x09, 0x52, 0x69, 0x6f, 0x74, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x10, 0xb2, 0x02, 0x12, 0x0d, - 0x0a, 0x08, 0x52, 0x6f, 0x6e, 0x69, 0x6e, 0x41, 0x70, 0x70, 0x10, 0xb3, 0x02, 0x12, 0x0f, 0x0a, - 0x0a, 0x53, 0x74, 0x6f, 0x72, 0x6d, 0x67, 0x6c, 0x61, 0x73, 0x73, 0x10, 0xb4, 0x02, 0x12, 0x0b, - 0x0a, 0x06, 0x54, 0x6f, 0x6d, 0x74, 0x6f, 0x6d, 0x10, 0xb5, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x54, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xb6, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x6f, 0x10, 0xb7, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x77, 0x61, - 0x79, 0x73, 0x10, 0xb8, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x56, 0x65, 0x65, 0x76, 0x61, 0x76, 0x61, - 0x75, 0x6c, 0x74, 0x10, 0xb9, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x4b, 0x69, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x10, 0xba, 0x02, 0x12, 0x17, 0x0a, 0x12, 0x53, 0x68, 0x6f, 0x70, - 0x65, 0x65, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0xbb, - 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x54, 0x65, 0x61, 0x6d, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x10, - 0xbc, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x75, 0x6c, 0x62, 0x75, 0x6c, 0x10, 0xbd, 0x02, 0x12, - 0x16, 0x0a, 0x11, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x52, 0x4d, 0x10, 0xbe, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x54, 0x65, 0x61, 0x6d, 0x67, - 0x61, 0x74, 0x65, 0x10, 0xbf, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x41, 0x78, 0x6f, 0x6e, 0x61, 0x75, - 0x74, 0x10, 0xc0, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x79, 0x6e, 0x74, 0x65, 0x63, 0x10, 0xc1, - 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x63, 0x75, 0x65, 0x73, 0x10, 0xc2, 0x02, 0x12, - 0x0e, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x6b, 0x6c, 0x6f, 0x73, 0x65, 0x10, 0xc3, 0x02, 0x12, - 0x0e, 0x0a, 0x09, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x6c, 0x61, 0x6e, 0x10, 0xc4, 0x02, 0x12, - 0x0e, 0x0a, 0x09, 0x44, 0x6f, 0x74, 0x6d, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x10, 0xc5, 0x02, 0x12, - 0x0d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x10, 0xc6, 0x02, 0x12, 0x0e, - 0x0a, 0x09, 0x47, 0x65, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x10, 0xc7, 0x02, 0x12, 0x0c, - 0x0a, 0x07, 0x4b, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x10, 0xc8, 0x02, 0x12, 0x0f, 0x0a, 0x0a, - 0x4c, 0x65, 0x61, 0x64, 0x66, 0x65, 0x65, 0x64, 0x65, 0x72, 0x10, 0xc9, 0x02, 0x12, 0x0a, 0x0a, - 0x05, 0x52, 0x61, 0x76, 0x65, 0x6e, 0x10, 0xca, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x52, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x65, 0x61, 0x63, 0x68, 0x10, 0xcb, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, - 0x70, 0x6c, 0x65, 0x61, 0x64, 0x10, 0xcc, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x42, 0x72, 0x61, 0x6e, - 0x64, 0x66, 0x65, 0x74, 0x63, 0x68, 0x10, 0xcd, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x43, 0x6c, 0x65, - 0x61, 0x72, 0x62, 0x69, 0x74, 0x10, 0xce, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x72, 0x6f, 0x77, - 0x64, 0x69, 0x6e, 0x10, 0xcf, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x61, 0x70, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x10, 0xd0, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x61, - 0x62, 0x6c, 0x65, 0x10, 0xd1, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x4f, 0x6e, 0x62, 0x75, 0x6b, 0x61, - 0x10, 0xd2, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x6f, 0x64, 0x6f, 0x69, 0x73, 0x74, 0x10, 0xd3, - 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x72, 0x79, 0x63, 0x68, 0x69, 0x65, 0x66, 0x10, - 0xd4, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x49, 0x6e, 0x10, 0xd5, - 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x59, 0x6f, 0x75, 0x53, 0x69, 0x67, 0x6e, 0x10, 0xd6, 0x02, 0x12, - 0x0b, 0x0a, 0x06, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x10, 0xd7, 0x02, 0x12, 0x0d, 0x0a, 0x08, - 0x54, 0x65, 0x6c, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x10, 0xd8, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x53, - 0x70, 0x6f, 0x6f, 0x6e, 0x61, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x10, 0xd9, 0x02, 0x12, 0x11, 0x0a, - 0x0c, 0x41, 0x65, 0x72, 0x69, 0x73, 0x77, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, 0x10, 0xda, 0x02, - 0x12, 0x11, 0x0a, 0x0c, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x76, 0x61, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x10, 0xdb, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x6d, 0x67, 0x75, 0x72, 0x10, 0xdc, 0x02, 0x12, - 0x0b, 0x0a, 0x06, 0x49, 0x6d, 0x61, 0x67, 0x67, 0x61, 0x10, 0xdd, 0x02, 0x12, 0x0b, 0x0a, 0x06, - 0x53, 0x4d, 0x53, 0x41, 0x70, 0x69, 0x10, 0xde, 0x02, 0x12, 0x11, 0x0a, 0x0c, 0x44, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0xdf, 0x02, 0x12, 0x12, 0x0a, 0x09, - 0x42, 0x6c, 0x61, 0x62, 0x6c, 0x61, 0x62, 0x75, 0x73, 0x10, 0xe0, 0x02, 0x1a, 0x02, 0x08, 0x01, - 0x12, 0x0d, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x41, 0x70, 0x69, 0x10, 0xe1, 0x02, 0x12, - 0x12, 0x0a, 0x0d, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x10, 0xe2, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x48, 0x74, 0x6d, 0x6c, 0x32, 0x50, 0x64, 0x66, 0x10, - 0xe3, 0x02, 0x12, 0x12, 0x0a, 0x0d, 0x49, 0x50, 0x47, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x10, 0xe4, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x4f, 0x77, 0x6c, 0x62, 0x6f, 0x74, - 0x10, 0xe5, 0x02, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x6d, 0x65, 0x72, 0x73, - 0x69, 0x76, 0x65, 0x10, 0xe6, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x79, 0x6e, 0x61, 0x6c, 0x69, - 0x73, 0x74, 0x10, 0xe7, 0x02, 0x12, 0x14, 0x0a, 0x0f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x52, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x10, 0xe8, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x48, - 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x79, 0x41, 0x50, 0x49, 0x10, 0xe9, 0x02, 0x12, 0x0a, 0x0a, 0x05, - 0x49, 0x70, 0x61, 0x70, 0x69, 0x10, 0xea, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x4d, 0x61, 0x72, 0x6b, - 0x65, 0x74, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xeb, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x4e, 0x75, - 0x74, 0x72, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x78, 0x10, 0xec, 0x02, 0x12, 0x0a, 0x0a, 0x05, - 0x53, 0x77, 0x65, 0x6c, 0x6c, 0x10, 0xed, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x63, - 0x6b, 0x75, 0x70, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x10, 0xee, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x4e, 0x69, 0x74, 0x72, 0x6f, 0x10, 0xef, 0x02, 0x12, - 0x08, 0x0a, 0x03, 0x52, 0x65, 0x76, 0x10, 0xf0, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x52, 0x75, 0x6e, - 0x52, 0x75, 0x6e, 0x49, 0x74, 0x10, 0xf1, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x54, 0x79, 0x70, 0x65, - 0x66, 0x6f, 0x72, 0x6d, 0x10, 0xf2, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x69, 0x78, 0x70, 0x61, - 0x6e, 0x65, 0x6c, 0x10, 0xf3, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x72, 0x61, 0x64, 0x69, 0x65, - 0x72, 0x10, 0xf4, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x10, 0xf5, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, 0x72, 0x79, 0x10, - 0xf6, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x41, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x10, 0xf7, 0x02, 0x12, - 0x09, 0x0a, 0x04, 0x41, 0x75, 0x64, 0x64, 0x10, 0xf8, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x61, - 0x72, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x10, 0xf9, 0x02, 0x12, 0x0c, 0x0a, 0x07, - 0x43, 0x6f, 0x69, 0x6e, 0x6c, 0x69, 0x62, 0x10, 0xfa, 0x02, 0x12, 0x15, 0x0a, 0x10, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x73, 0x41, 0x50, 0x49, 0x10, 0xfb, - 0x02, 0x12, 0x12, 0x0a, 0x0d, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x63, 0x6f, - 0x6f, 0x70, 0x10, 0xfc, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x46, 0x58, 0x4d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x10, 0xfd, 0x02, 0x12, 0x12, 0x0a, 0x0d, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x10, 0xfe, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x47, - 0x65, 0x6f, 0x41, 0x50, 0x49, 0x10, 0xff, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x62, 0x73, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x10, 0x80, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x42, 0x69, 0x6c, 0x6c, 0x6f, - 0x6d, 0x61, 0x74, 0x10, 0x81, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x6f, 0x76, 0x69, 0x63, 0x6f, - 0x10, 0x82, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x69, 0x74, 0x62, 0x61, 0x72, 0x10, 0x83, 0x03, - 0x12, 0x0c, 0x0a, 0x07, 0x42, 0x75, 0x67, 0x73, 0x6e, 0x61, 0x67, 0x10, 0x84, 0x03, 0x12, 0x0f, - 0x0a, 0x0a, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x41, 0x49, 0x10, 0x85, 0x03, 0x12, - 0x0f, 0x0a, 0x0a, 0x41, 0x64, 0x61, 0x66, 0x72, 0x75, 0x69, 0x74, 0x49, 0x4f, 0x10, 0x86, 0x03, - 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x70, 0x69, 0x66, 0x79, 0x10, 0x87, 0x03, 0x12, 0x0e, 0x0a, 0x09, - 0x43, 0x6f, 0x69, 0x6e, 0x47, 0x65, 0x63, 0x6b, 0x6f, 0x10, 0x88, 0x03, 0x12, 0x12, 0x0a, 0x0d, - 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x10, 0x89, 0x03, - 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x75, 0x6c, 0x6c, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x10, 0x8a, 0x03, - 0x12, 0x0e, 0x0a, 0x09, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x10, 0x8b, 0x03, - 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x6f, 0x79, 0x76, 0x65, 0x72, 0x73, 0x65, 0x10, 0x8c, 0x03, 0x12, - 0x0c, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x43, 0x6f, 0x72, 0x65, 0x10, 0x8d, 0x03, 0x12, 0x0e, 0x0a, - 0x09, 0x53, 0x61, 0x75, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x73, 0x10, 0x8e, 0x03, 0x12, 0x0f, 0x0a, - 0x0a, 0x41, 0x6c, 0x69, 0x65, 0x6e, 0x56, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x8f, 0x03, 0x12, 0x0d, - 0x0a, 0x08, 0x41, 0x70, 0x69, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x10, 0x91, 0x03, 0x12, 0x0e, 0x0a, - 0x09, 0x43, 0x6f, 0x69, 0x6e, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x10, 0x92, 0x03, 0x12, 0x10, 0x0a, - 0x0b, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x50, 0x49, 0x10, 0x93, 0x03, 0x12, - 0x0c, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x47, 0x6f, 0x76, 0x10, 0x94, 0x03, 0x12, 0x0b, 0x0a, - 0x06, 0x45, 0x6e, 0x69, 0x67, 0x6d, 0x61, 0x10, 0x95, 0x03, 0x12, 0x1a, 0x0a, 0x15, 0x46, 0x69, - 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x67, 0x50, - 0x72, 0x65, 0x70, 0x10, 0x96, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x65, 0x6f, 0x63, 0x6f, 0x64, - 0x69, 0x6f, 0x10, 0x97, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x48, 0x65, 0x72, 0x65, 0x41, 0x50, 0x49, - 0x10, 0x98, 0x03, 0x12, 0x13, 0x0a, 0x0a, 0x4d, 0x61, 0x63, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x10, 0x99, 0x03, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x4f, 0x4f, 0x50, 0x53, - 0x70, 0x61, 0x6d, 0x10, 0x9a, 0x03, 0x12, 0x10, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x73, 0x49, 0x4f, 0x10, 0x9b, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x63, 0x72, 0x61, - 0x70, 0x65, 0x72, 0x41, 0x50, 0x49, 0x10, 0x9c, 0x03, 0x12, 0x13, 0x0a, 0x0e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x54, 0x72, 0x61, 0x69, 0x6c, 0x73, 0x10, 0x9d, 0x03, 0x12, 0x0f, - 0x0a, 0x0a, 0x54, 0x6f, 0x6d, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x49, 0x4f, 0x10, 0x9e, 0x03, 0x12, - 0x13, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x10, 0x9f, 0x03, 0x12, 0x11, 0x0a, 0x0c, 0x46, 0x61, 0x63, 0x65, 0x50, 0x6c, 0x75, 0x73, - 0x50, 0x6c, 0x75, 0x73, 0x10, 0xa0, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x6f, 0x69, 0x63, 0x65, - 0x67, 0x61, 0x69, 0x6e, 0x10, 0xa1, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x67, - 0x72, 0x61, 0x6d, 0x10, 0xa2, 0x03, 0x12, 0x13, 0x0a, 0x0e, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, - 0x43, 0x72, 0x6f, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x10, 0xa3, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x46, - 0x69, 0x6e, 0x6e, 0x68, 0x75, 0x62, 0x10, 0xa4, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x69, 0x69, - 0x6e, 0x67, 0x6f, 0x10, 0xa5, 0x03, 0x12, 0x10, 0x0a, 0x0b, 0x52, 0x69, 0x6e, 0x67, 0x43, 0x65, - 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x10, 0xa6, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x46, 0x69, 0x6e, 0x61, - 0x67, 0x65, 0x10, 0xa7, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x45, 0x64, 0x61, 0x6d, 0x61, 0x6d, 0x10, - 0xa8, 0x03, 0x12, 0x10, 0x0a, 0x0b, 0x48, 0x79, 0x70, 0x65, 0x41, 0x75, 0x64, 0x69, 0x74, 0x6f, - 0x72, 0x10, 0xa9, 0x03, 0x12, 0x0a, 0x0a, 0x05, 0x47, 0x65, 0x6e, 0x67, 0x6f, 0x10, 0xaa, 0x03, - 0x12, 0x0a, 0x0a, 0x05, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x10, 0xab, 0x03, 0x12, 0x0e, 0x0a, 0x09, - 0x46, 0x6c, 0x65, 0x65, 0x74, 0x62, 0x61, 0x73, 0x65, 0x10, 0xac, 0x03, 0x12, 0x0b, 0x0a, 0x06, - 0x42, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x10, 0xad, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x42, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x62, 0x65, 0x61, 0x72, 0x10, 0xae, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x41, 0x64, - 0x7a, 0x75, 0x6e, 0x61, 0x10, 0xaf, 0x03, 0x12, 0x13, 0x0a, 0x0e, 0x42, 0x69, 0x74, 0x63, 0x6f, - 0x69, 0x6e, 0x41, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x10, 0xb0, 0x03, 0x12, 0x0f, 0x0a, 0x0a, - 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x65, 0x4a, 0x53, 0x10, 0xb1, 0x03, 0x12, 0x13, 0x0a, - 0x0e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x10, - 0xb2, 0x03, 0x12, 0x11, 0x0a, 0x08, 0x46, 0x61, 0x6b, 0x65, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0xb3, - 0x03, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x70, 0x68, 0x68, 0x6f, - 0x70, 0x70, 0x65, 0x72, 0x10, 0xb4, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x65, 0x78, 0x69, 0x67, - 0x72, 0x61, 0x6d, 0x10, 0xb5, 0x03, 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, 0x6b, 0x50, 0x72, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x10, 0xb6, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x4e, 0x75, 0x6d, 0x76, - 0x65, 0x72, 0x69, 0x66, 0x79, 0x10, 0xb7, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x78, - 0x79, 0x43, 0x72, 0x61, 0x77, 0x6c, 0x10, 0xb8, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x5a, 0x69, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x49, 0x10, 0xb9, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6f, - 0x6d, 0x65, 0x74, 0x63, 0x68, 0x61, 0x74, 0x10, 0xba, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x4b, 0x65, - 0x79, 0x67, 0x65, 0x6e, 0x10, 0xbb, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x69, 0x78, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x10, 0xbc, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x61, 0x74, 0x75, 0x6d, 0x49, - 0x4f, 0x10, 0xbd, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x10, - 0xbe, 0x03, 0x12, 0x0f, 0x0a, 0x06, 0x4c, 0x61, 0x73, 0x74, 0x66, 0x6d, 0x10, 0xbf, 0x03, 0x1a, - 0x02, 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x42, 0x72, 0x6f, 0x77, 0x73, 0x68, 0x6f, 0x74, 0x10, - 0xc0, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x4a, 0x53, 0x4f, 0x4e, 0x62, 0x69, 0x6e, 0x10, 0xc1, 0x03, - 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x51, 0x10, 0xc2, - 0x03, 0x12, 0x12, 0x0a, 0x0d, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x73, 0x68, 0x6f, 0x74, 0x41, - 0x50, 0x49, 0x10, 0xc3, 0x03, 0x12, 0x11, 0x0a, 0x0c, 0x57, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xc4, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x41, 0x6d, 0x61, 0x64, - 0x65, 0x75, 0x73, 0x10, 0xc5, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x46, 0x6f, 0x75, 0x72, 0x53, 0x71, - 0x75, 0x61, 0x72, 0x65, 0x10, 0xc6, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x46, 0x6c, 0x69, 0x63, 0x6b, - 0x72, 0x10, 0xc7, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x48, 0x65, 0x6c, - 0x70, 0x10, 0xc8, 0x03, 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x6d, 0x62, 0x65, 0x65, 0x10, 0xc9, 0x03, - 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x70, 0x69, 0x32, 0x43, 0x61, 0x72, 0x74, 0x10, 0xca, 0x03, 0x12, - 0x0f, 0x0a, 0x0a, 0x48, 0x79, 0x70, 0x65, 0x72, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x10, 0xcb, 0x03, - 0x12, 0x0e, 0x0a, 0x09, 0x4b, 0x61, 0x6b, 0x61, 0x6f, 0x54, 0x61, 0x6c, 0x6b, 0x10, 0xcc, 0x03, - 0x12, 0x0c, 0x0a, 0x07, 0x52, 0x69, 0x74, 0x65, 0x4b, 0x69, 0x74, 0x10, 0xcd, 0x03, 0x12, 0x11, - 0x0a, 0x0c, 0x53, 0x68, 0x75, 0x74, 0x74, 0x65, 0x72, 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x10, 0xce, - 0x03, 0x12, 0x12, 0x0a, 0x09, 0x54, 0x65, 0x78, 0x74, 0x32, 0x44, 0x61, 0x74, 0x61, 0x10, 0xcf, - 0x03, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x13, 0x0a, 0x0e, 0x59, 0x6f, 0x75, 0x4e, 0x65, 0x65, 0x64, - 0x41, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x10, 0xd0, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x72, - 0x69, 0x63, 0x6b, 0x65, 0x74, 0x10, 0xd1, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xd2, 0x03, 0x12, 0x0a, 0x0a, 0x05, 0x47, 0x79, 0x61, 0x7a, - 0x6f, 0x10, 0xd3, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x4d, 0x61, 0x76, 0x65, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x10, 0xd4, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x68, 0x65, 0x65, 0x74, 0x79, 0x10, 0xd5, - 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x6d, 0x6f, 0x6e, 0x6b, 0x10, - 0xd6, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x64, 0x61, 0x74, 0x61, 0x10, - 0xd7, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x55, 0x6e, 0x73, 0x70, 0x6c, 0x61, 0x73, 0x68, 0x10, 0xd8, - 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x6c, 0x6c, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x10, 0xd9, - 0x03, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x61, 0x6c, 0x6f, 0x72, 0x69, 0x65, 0x4e, 0x69, 0x6e, 0x6a, - 0x61, 0x10, 0xda, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x57, 0x61, 0x6c, 0x6b, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x10, 0xdb, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x61, 0x76, 0x61, 0x10, 0xdc, - 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x69, 0x63, 0x65, 0x72, 0x6f, 0x10, 0xdd, 0x03, 0x12, 0x0e, - 0x0a, 0x09, 0x49, 0x50, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x10, 0xde, 0x03, 0x12, 0x11, - 0x0a, 0x0c, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x44, 0x6f, 0x74, 0x73, 0x10, 0xdf, - 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x52, 0x6f, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x10, 0xe0, 0x03, 0x12, - 0x0c, 0x0a, 0x07, 0x4d, 0x61, 0x69, 0x6c, 0x73, 0x61, 0x63, 0x10, 0xe1, 0x03, 0x12, 0x0a, 0x0a, - 0x05, 0x57, 0x68, 0x6f, 0x78, 0x79, 0x10, 0xe2, 0x03, 0x12, 0x11, 0x0a, 0x0c, 0x57, 0x6f, 0x72, - 0x6c, 0x64, 0x57, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, 0x10, 0xe3, 0x03, 0x12, 0x0e, 0x0a, 0x09, - 0x41, 0x70, 0x69, 0x46, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x10, 0xe4, 0x03, 0x12, 0x0b, 0x0a, 0x06, - 0x41, 0x79, 0x6c, 0x69, 0x65, 0x6e, 0x10, 0xe5, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x47, 0x65, 0x6f, - 0x63, 0x6f, 0x64, 0x65, 0x10, 0xe6, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x63, 0x6f, 0x6e, 0x46, - 0x69, 0x6e, 0x64, 0x65, 0x72, 0x10, 0xe7, 0x03, 0x12, 0x0e, 0x0a, 0x05, 0x49, 0x70, 0x69, 0x66, - 0x79, 0x10, 0xe8, 0x03, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x4c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x10, 0xe9, 0x03, 0x12, 0x08, 0x0a, 0x03, - 0x4c, 0x6f, 0x62, 0x10, 0xea, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x4f, 0x6e, 0x57, 0x61, 0x74, 0x65, - 0x72, 0x49, 0x4f, 0x10, 0xeb, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x74, 0x65, 0x62, - 0x69, 0x6e, 0x10, 0xec, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x64, 0x66, 0x4c, 0x61, 0x79, 0x65, - 0x72, 0x10, 0xed, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x69, 0x78, 0x61, 0x62, 0x61, 0x79, 0x10, - 0xee, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x10, 0xef, 0x03, 0x12, - 0x0d, 0x0a, 0x08, 0x56, 0x61, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x10, 0xf0, 0x03, 0x12, 0x0f, - 0x0a, 0x0a, 0x56, 0x69, 0x72, 0x75, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x10, 0xf1, 0x03, 0x12, - 0x0e, 0x0a, 0x09, 0x41, 0x69, 0x72, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x10, 0xf2, 0x03, 0x12, - 0x13, 0x0a, 0x0e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x66, 0x72, 0x65, 0x61, 0x6b, - 0x73, 0x10, 0xf3, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x75, 0x66, 0x66, 0x65, 0x6c, 0x10, 0xf4, - 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x46, 0x6c, 0x61, 0x74, 0x49, 0x4f, 0x10, 0xf5, 0x03, 0x12, 0x08, - 0x0a, 0x03, 0x4d, 0x33, 0x6f, 0x10, 0xf6, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x4d, 0x65, 0x73, 0x69, - 0x62, 0x6f, 0x10, 0xf7, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x4f, 0x70, 0x65, 0x6e, 0x75, 0x76, 0x10, - 0xf8, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x6e, 0x69, 0x70, 0x63, 0x61, 0x72, 0x74, 0x10, 0xf9, - 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x42, 0x65, 0x73, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x10, 0xfa, 0x03, - 0x12, 0x10, 0x0a, 0x0b, 0x48, 0x61, 0x70, 0x70, 0x79, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x10, - 0xfb, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x69, 0x74, 0x79, 0x10, 0xfc, - 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x6d, 0x70, 0x61, 0x6c, 0x61, 0x10, 0xfd, 0x03, 0x12, 0x10, - 0x0a, 0x0b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x10, 0xfe, 0x03, - 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x10, 0xff, 0x03, - 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x69, 0x74, 0x6d, 0x65, 0x78, 0x10, 0x80, 0x04, 0x12, 0x0d, 0x0a, - 0x08, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x44, 0x6f, 0x63, 0x10, 0x81, 0x04, 0x12, 0x0c, 0x0a, 0x07, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x72, 0x69, 0x10, 0x82, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x64, - 0x66, 0x53, 0x68, 0x69, 0x66, 0x74, 0x10, 0x83, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x6f, 0x6c, - 0x6f, 0x6e, 0x69, 0x65, 0x78, 0x10, 0x84, 0x04, 0x12, 0x19, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x74, - 0x70, 0x61, 0x63, 0x6b, 0x48, 0x74, 0x6d, 0x6c, 0x54, 0x6f, 0x50, 0x64, 0x66, 0x41, 0x50, 0x49, - 0x10, 0x85, 0x04, 0x12, 0x1a, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x74, 0x70, 0x61, 0x63, 0x6b, 0x53, - 0x63, 0x72, 0x65, 0x65, 0x6e, 0x73, 0x68, 0x6f, 0x74, 0x41, 0x50, 0x49, 0x10, 0x86, 0x04, 0x12, - 0x16, 0x0a, 0x11, 0x53, 0x68, 0x75, 0x74, 0x74, 0x65, 0x72, 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x4f, - 0x41, 0x75, 0x74, 0x68, 0x10, 0x87, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x6b, 0x79, 0x42, 0x69, - 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x10, 0x88, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x62, 0x75, - 0x73, 0x65, 0x49, 0x50, 0x44, 0x42, 0x10, 0x89, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x41, 0x6c, 0x65, - 0x74, 0x68, 0x65, 0x69, 0x61, 0x41, 0x70, 0x69, 0x10, 0x8a, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x42, - 0x6c, 0x69, 0x74, 0x41, 0x70, 0x70, 0x10, 0x8b, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x65, 0x6e, - 0x73, 0x79, 0x73, 0x10, 0x8c, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x43, 0x6c, 0x6f, 0x76, 0x65, 0x72, - 0x6c, 0x79, 0x10, 0x8d, 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, - 0x4c, 0x61, 0x79, 0x65, 0x72, 0x10, 0x8e, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x65, - 0x49, 0x4f, 0x10, 0x8f, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x41, - 0x70, 0x69, 0x10, 0x90, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x65, 0x6f, 0x61, 0x70, 0x69, 0x66, - 0x79, 0x10, 0x91, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x50, 0x69, 0x6e, 0x66, 0x6f, 0x44, 0x42, - 0x10, 0x92, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x10, 0x93, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x4e, 0x61, 0x73, 0x64, 0x61, 0x71, 0x44, 0x61, - 0x74, 0x61, 0x4c, 0x69, 0x6e, 0x6b, 0x10, 0x94, 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x4f, 0x70, 0x65, - 0x6e, 0x43, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x10, 0x95, 0x04, 0x12, 0x0d, 0x0a, 0x08, - 0x50, 0x61, 0x79, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x10, 0x96, 0x04, 0x12, 0x12, 0x0a, 0x0d, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0x97, 0x04, 0x12, - 0x0e, 0x0a, 0x09, 0x52, 0x65, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x6c, 0x79, 0x10, 0x98, 0x04, 0x12, - 0x14, 0x0a, 0x0f, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x73, 0x68, 0x6f, 0x74, 0x4c, 0x61, 0x79, - 0x65, 0x72, 0x10, 0x99, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x74, 0x79, 0x74, 0x63, 0x68, 0x10, - 0x9a, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x55, 0x6e, 0x70, 0x6c, 0x75, 0x67, 0x67, 0x10, 0x9b, 0x04, - 0x12, 0x10, 0x0a, 0x0b, 0x55, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x10, - 0x9c, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, - 0x9d, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x47, 0x65, 0x6f, 0x63, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x10, - 0x9e, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x73, 0x63, 0x61, 0x74, 0x63, 0x68, 0x65, - 0x72, 0x10, 0x9f, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x4e, 0x69, 0x63, 0x65, 0x72, 0x65, 0x70, 0x6c, - 0x79, 0x10, 0xa0, 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, 0x73, - 0x74, 0x61, 0x63, 0x6b, 0x10, 0xa1, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x34, 0x6d, 0x65, 0x10, 0xa2, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x63, 0x72, 0x61, 0x70, 0x65, - 0x6f, 0x77, 0x6c, 0x10, 0xa3, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x63, 0x72, 0x61, 0x70, 0x69, - 0x6e, 0x67, 0x44, 0x6f, 0x67, 0x10, 0xa4, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6b, 0x10, 0xa5, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x69, 0x70, 0x68, 0x6f, - 0x6e, 0x65, 0x10, 0xa6, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x57, 0x65, 0x62, 0x73, 0x63, 0x72, 0x61, - 0x70, 0x69, 0x6e, 0x67, 0x10, 0xa7, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x5a, 0x65, 0x6e, 0x73, 0x63, - 0x72, 0x61, 0x70, 0x65, 0x10, 0xa8, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x5a, 0x65, 0x6e, 0x73, 0x65, - 0x72, 0x70, 0x10, 0xa9, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x6f, 0x69, 0x6e, 0x41, 0x70, 0x69, - 0x10, 0xaa, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x47, 0x69, 0x74, 0x74, 0x65, 0x72, 0x10, 0xab, 0x04, - 0x12, 0x09, 0x0a, 0x04, 0x48, 0x6f, 0x73, 0x74, 0x10, 0xac, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x49, - 0x65, 0x78, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x10, 0xad, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x52, 0x65, - 0x73, 0x74, 0x70, 0x61, 0x63, 0x6b, 0x10, 0xae, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x63, 0x72, - 0x61, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x78, 0x10, 0xaf, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x63, - 0x72, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x74, 0x10, 0xb0, 0x04, 0x12, 0x0e, 0x0a, 0x09, - 0x53, 0x65, 0x72, 0x70, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xb1, 0x04, 0x12, 0x12, 0x0a, 0x0d, - 0x53, 0x6d, 0x61, 0x72, 0x74, 0x79, 0x53, 0x74, 0x72, 0x65, 0x65, 0x74, 0x73, 0x10, 0xb2, 0x04, - 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, - 0x10, 0xb3, 0x04, 0x12, 0x12, 0x0a, 0x0d, 0x41, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x10, 0xb4, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x42, 0x6f, 0x6d, 0x62, 0x42, - 0x6f, 0x6d, 0x62, 0x10, 0xb5, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x64, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x10, 0xb6, 0x04, 0x12, 0x0a, 0x0a, 0x05, 0x44, 0x66, 0x75, 0x73, - 0x65, 0x10, 0xb7, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x45, 0x64, 0x65, 0x6e, 0x41, 0x49, 0x10, 0xb8, - 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x47, 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x6f, 0x64, 0x65, 0x10, 0xb9, - 0x04, 0x12, 0x09, 0x0a, 0x04, 0x47, 0x75, 0x72, 0x75, 0x10, 0xba, 0x04, 0x12, 0x09, 0x0a, 0x04, - 0x48, 0x69, 0x76, 0x65, 0x10, 0xbb, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x48, 0x69, 0x76, 0x65, 0x61, - 0x67, 0x65, 0x10, 0xbc, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x4b, 0x69, 0x63, 0x6b, 0x62, 0x6f, 0x78, - 0x10, 0xbd, 0x04, 0x12, 0x11, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x62, 0x61, 0x73, 0x65, 0x10, - 0xbe, 0x04, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x50, 0x6f, 0x73, 0x74, 0x61, 0x67, - 0x65, 0x41, 0x70, 0x70, 0x10, 0xbf, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x50, 0x75, 0x72, 0x65, 0x53, - 0x74, 0x61, 0x6b, 0x65, 0x10, 0xc0, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x51, 0x75, 0x62, 0x6f, 0x6c, - 0x65, 0x10, 0xc1, 0x04, 0x12, 0x14, 0x0a, 0x0f, 0x43, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x10, 0xc2, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x6e, - 0x74, 0x72, 0x69, 0x6e, 0x69, 0x6f, 0x10, 0xc3, 0x04, 0x12, 0x15, 0x0a, 0x0c, 0x51, 0x75, 0x69, - 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x10, 0xc4, 0x04, 0x1a, 0x02, 0x08, 0x01, - 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x63, 0x72, 0x61, 0x70, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, - 0xc5, 0x04, 0x12, 0x19, 0x0a, 0x14, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x41, - 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x41, 0x70, 0x69, 0x10, 0xc6, 0x04, 0x12, 0x0c, 0x0a, - 0x07, 0x55, 0x72, 0x6c, 0x73, 0x63, 0x61, 0x6e, 0x10, 0xc7, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x65, 0x41, 0x70, 0x69, 0x49, 0x4f, 0x10, 0xc8, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x44, - 0x61, 0x69, 0x6c, 0x79, 0x43, 0x4f, 0x10, 0xc9, 0x04, 0x12, 0x08, 0x0a, 0x03, 0x54, 0x4c, 0x79, - 0x10, 0xca, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x10, - 0xcb, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x10, - 0xcc, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x69, 0x66, 0x69, 0x63, 0x10, - 0xcd, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x46, 0x65, 0x65, 0x64, 0x6c, 0x79, 0x10, 0xce, 0x04, 0x12, - 0x0f, 0x0a, 0x0a, 0x53, 0x74, 0x69, 0x74, 0x63, 0x68, 0x64, 0x61, 0x74, 0x61, 0x10, 0xcf, 0x04, - 0x12, 0x0d, 0x0a, 0x08, 0x46, 0x65, 0x74, 0x63, 0x68, 0x72, 0x73, 0x73, 0x10, 0xd0, 0x04, 0x12, - 0x11, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x67, 0x65, 0x6e, 0x69, 0x75, 0x73, 0x10, - 0xd1, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x69, 0x74, - 0x10, 0xd2, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x6c, - 0x79, 0x10, 0xd3, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x4f, 0x63, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x10, 0xd4, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x57, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, 0x42, 0x69, - 0x74, 0x10, 0xd5, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x42, 0x75, 0x64, 0x64, 0x79, 0x4e, 0x53, 0x10, - 0xd6, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x5a, 0x69, 0x70, 0x41, 0x50, 0x49, 0x10, 0xd7, 0x04, 0x12, - 0x0d, 0x0a, 0x08, 0x5a, 0x69, 0x70, 0x42, 0x6f, 0x6f, 0x6b, 0x73, 0x10, 0xd8, 0x04, 0x12, 0x0c, - 0x0a, 0x07, 0x4f, 0x6e, 0x65, 0x64, 0x65, 0x73, 0x6b, 0x10, 0xd9, 0x04, 0x12, 0x0c, 0x0a, 0x07, - 0x42, 0x75, 0x67, 0x68, 0x65, 0x72, 0x64, 0x10, 0xda, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x42, 0x6c, - 0x61, 0x7a, 0x65, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x10, 0xdb, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x41, - 0x75, 0x74, 0x6f, 0x64, 0x65, 0x73, 0x6b, 0x10, 0xdc, 0x04, 0x12, 0x08, 0x0a, 0x03, 0x54, 0x72, - 0x75, 0x10, 0xdd, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x55, 0x6e, 0x69, 0x66, 0x79, 0x49, 0x44, 0x10, - 0xde, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x72, 0x69, 0x6d, 0x62, 0x6c, 0x65, 0x10, 0xdf, 0x04, - 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x6d, 0x6f, 0x6f, 0x63, 0x68, 0x10, 0xe0, 0x04, 0x12, 0x0e, 0x0a, - 0x09, 0x53, 0x65, 0x6d, 0x61, 0x70, 0x68, 0x6f, 0x72, 0x65, 0x10, 0xe1, 0x04, 0x12, 0x0b, 0x0a, - 0x06, 0x54, 0x65, 0x6c, 0x6e, 0x79, 0x78, 0x10, 0xe2, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x6c, 0x77, 0x69, 0x72, 0x65, 0x10, 0xe3, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x54, - 0x65, 0x78, 0x74, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x10, 0xe4, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x53, - 0x65, 0x72, 0x70, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x10, 0xe5, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x50, - 0x6c, 0x61, 0x6e, 0x79, 0x6f, 0x10, 0xe6, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x69, 0x6d, 0x70, - 0x6c, 0x79, 0x62, 0x6f, 0x6f, 0x6b, 0x10, 0xe7, 0x04, 0x12, 0x09, 0x0a, 0x04, 0x56, 0x79, 0x74, - 0x65, 0x10, 0xe8, 0x04, 0x12, 0x0a, 0x0a, 0x05, 0x4e, 0x79, 0x6c, 0x61, 0x73, 0x10, 0xe9, 0x04, - 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x71, 0x75, 0x61, 0x72, 0x65, 0x75, 0x70, 0x10, 0xea, 0x04, 0x12, - 0x0e, 0x0a, 0x09, 0x44, 0x61, 0x6e, 0x64, 0x65, 0x6c, 0x69, 0x6f, 0x6e, 0x10, 0xeb, 0x04, 0x12, - 0x11, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x46, 0x69, 0x72, 0x65, 0x10, 0xec, 0x04, 0x1a, 0x02, - 0x08, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x65, 0x65, 0x70, 0x41, 0x49, 0x10, 0xed, 0x04, 0x12, - 0x11, 0x0a, 0x0c, 0x4d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x10, - 0xee, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x4e, 0x65, 0x75, 0x74, 0x72, 0x69, 0x6e, 0x6f, 0x41, 0x70, - 0x69, 0x10, 0xef, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x63, 0x6f, 0x76, - 0x65, 0x10, 0xf0, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x53, 0x68, 0x69, 0x70, 0x64, 0x61, 0x79, 0x10, - 0xf1, 0x04, 0x12, 0x12, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x10, - 0xf2, 0x04, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x18, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x10, 0xf3, 0x04, - 0x12, 0x10, 0x0a, 0x0b, 0x54, 0x65, 0x61, 0x6d, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x52, 0x4d, 0x10, - 0xf4, 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x65, 0x61, 0x6d, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, - 0x73, 0x6b, 0x10, 0xf5, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x65, 0x61, 0x6d, 0x77, 0x6f, 0x72, - 0x6b, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x10, 0xf6, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x54, 0x68, - 0x65, 0x4f, 0x64, 0x64, 0x73, 0x41, 0x70, 0x69, 0x10, 0xf7, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x41, - 0x70, 0x61, 0x63, 0x74, 0x61, 0x10, 0xf8, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x10, 0xf9, 0x04, 0x12, 0x0e, 0x0a, 0x05, 0x48, 0x61, 0x70, - 0x70, 0x69, 0x10, 0xfa, 0x04, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x4f, 0x61, 0x6e, - 0x64, 0x61, 0x10, 0xfb, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x61, 0x73, 0x74, 0x46, 0x6f, 0x72, - 0x65, 0x78, 0x10, 0xfc, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x50, 0x49, 0x4d, 0x61, 0x74, 0x69, - 0x63, 0x10, 0xfd, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x45, - 0x79, 0x65, 0x10, 0xfe, 0x04, 0x12, 0x15, 0x0a, 0x10, 0x45, 0x61, 0x67, 0x6c, 0x65, 0x45, 0x79, - 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x10, 0xff, 0x04, 0x12, 0x11, 0x0a, 0x0c, - 0x54, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x45, 0x79, 0x65, 0x73, 0x10, 0x80, 0x05, 0x12, - 0x0e, 0x0a, 0x09, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x50, 0x44, 0x46, 0x10, 0x81, 0x05, 0x12, - 0x10, 0x0a, 0x0b, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x74, 0x61, 0x74, 0x73, 0x10, 0x82, - 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x68, 0x65, 0x63, 0x49, 0x4f, 0x10, 0x83, 0x05, 0x12, 0x0d, - 0x0a, 0x08, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x10, 0x84, 0x05, 0x12, 0x0f, 0x0a, - 0x0a, 0x41, 0x70, 0x69, 0x53, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x10, 0x85, 0x05, 0x12, 0x0f, - 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x53, 0x79, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x10, 0x86, 0x05, 0x12, - 0x0b, 0x0a, 0x06, 0x43, 0x61, 0x66, 0x6c, 0x6f, 0x75, 0x10, 0x87, 0x05, 0x12, 0x0b, 0x0a, 0x06, - 0x43, 0x61, 0x73, 0x70, 0x69, 0x6f, 0x10, 0x88, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x6c, 0x79, 0x48, 0x51, 0x10, 0x89, 0x05, 0x12, 0x12, 0x0a, 0x0d, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x10, 0x8a, 0x05, 0x12, 0x0c, 0x0a, - 0x07, 0x44, 0x72, 0x6f, 0x6e, 0x61, 0x48, 0x51, 0x10, 0x8b, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x78, 0x10, 0x8c, 0x05, 0x12, 0x09, 0x0a, 0x04, 0x46, 0x6d, 0x66, - 0x77, 0x10, 0x8d, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x44, 0x61, 0x79, 0x10, - 0x8e, 0x05, 0x12, 0x09, 0x0a, 0x04, 0x4c, 0x75, 0x6e, 0x6f, 0x10, 0x8f, 0x05, 0x12, 0x10, 0x0a, - 0x0b, 0x4d, 0x65, 0x69, 0x73, 0x74, 0x65, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x10, 0x90, 0x05, 0x12, - 0x10, 0x0a, 0x0b, 0x4d, 0x69, 0x6e, 0x64, 0x6d, 0x65, 0x69, 0x73, 0x74, 0x65, 0x72, 0x10, 0x91, - 0x05, 0x12, 0x13, 0x0a, 0x0e, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x4c, - 0x61, 0x62, 0x73, 0x10, 0x92, 0x05, 0x12, 0x14, 0x0a, 0x0b, 0x53, 0x63, 0x72, 0x61, 0x70, 0x65, - 0x72, 0x53, 0x69, 0x74, 0x65, 0x10, 0x93, 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x08, - 0x53, 0x63, 0x72, 0x61, 0x70, 0x66, 0x6c, 0x79, 0x10, 0x94, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x53, - 0x69, 0x6d, 0x70, 0x6c, 0x79, 0x4e, 0x6f, 0x74, 0x65, 0x64, 0x10, 0x95, 0x05, 0x12, 0x12, 0x0a, - 0x0d, 0x54, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x10, 0x96, - 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x57, 0x65, 0x62, 0x53, 0x63, 0x72, 0x61, 0x70, 0x65, 0x72, 0x10, - 0x97, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x69, 0x65, 0x72, 0x10, 0x98, 0x05, - 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x10, 0x99, 0x05, 0x12, 0x0a, - 0x0a, 0x05, 0x44, 0x69, 0x74, 0x74, 0x6f, 0x10, 0x9a, 0x05, 0x12, 0x0a, 0x0a, 0x05, 0x46, 0x69, - 0x6e, 0x64, 0x6c, 0x10, 0x9b, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x65, 0x6e, 0x64, 0x66, 0x6c, - 0x6f, 0x77, 0x10, 0x9c, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x10, 0x9d, 0x05, 0x12, 0x11, 0x0a, 0x0c, 0x4f, 0x70, 0x65, 0x6e, 0x64, 0x61, - 0x74, 0x61, 0x73, 0x6f, 0x66, 0x74, 0x10, 0x9e, 0x05, 0x12, 0x0a, 0x0a, 0x05, 0x50, 0x6f, 0x64, - 0x69, 0x6f, 0x10, 0x9f, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x52, 0x6f, 0x63, 0x6b, 0x73, 0x65, 0x74, - 0x10, 0xa0, 0x05, 0x12, 0x0a, 0x0a, 0x05, 0x52, 0x6f, 0x77, 0x6e, 0x64, 0x10, 0xa1, 0x05, 0x12, - 0x0e, 0x0a, 0x09, 0x53, 0x68, 0x6f, 0x74, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xa2, 0x05, 0x12, - 0x0d, 0x0a, 0x08, 0x53, 0x77, 0x69, 0x66, 0x74, 0x79, 0x70, 0x65, 0x10, 0xa3, 0x05, 0x12, 0x0c, - 0x0a, 0x07, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x10, 0xa4, 0x05, 0x12, 0x0a, 0x0a, 0x05, - 0x48, 0x6f, 0x6e, 0x65, 0x79, 0x10, 0xa5, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x72, 0x65, 0x73, - 0x68, 0x64, 0x65, 0x73, 0x6b, 0x10, 0xa6, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x70, 0x77, 0x61, - 0x76, 0x65, 0x10, 0xa7, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x46, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x10, 0xa8, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x46, 0x72, 0x65, 0x73, 0x68, 0x62, 0x6f, 0x6f, - 0x6b, 0x73, 0x10, 0xa9, 0x05, 0x12, 0x09, 0x0a, 0x04, 0x4d, 0x69, 0x74, 0x65, 0x10, 0xaa, 0x05, - 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x65, 0x70, 0x75, 0x74, 0x79, 0x10, 0xab, 0x05, 0x12, 0x0c, 0x0a, - 0x07, 0x42, 0x65, 0x65, 0x62, 0x6f, 0x6c, 0x65, 0x10, 0xac, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x43, - 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x10, 0xad, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x4b, - 0x61, 0x6e, 0x62, 0x61, 0x6e, 0x10, 0xae, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x10, 0xaf, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x4d, 0x79, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x10, 0xb0, 0x05, 0x12, 0x11, 0x0a, 0x0c, 0x49, 0x6e, - 0x76, 0x6f, 0x69, 0x63, 0x65, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x10, 0xb1, 0x05, 0x12, 0x0f, 0x0a, - 0x0a, 0x53, 0x68, 0x65, 0x72, 0x70, 0x61, 0x64, 0x65, 0x73, 0x6b, 0x10, 0xb2, 0x05, 0x12, 0x0f, - 0x0a, 0x0a, 0x4d, 0x72, 0x74, 0x69, 0x63, 0x6b, 0x74, 0x6f, 0x63, 0x6b, 0x10, 0xb3, 0x05, 0x12, - 0x0d, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x66, 0x75, 0x6c, 0x65, 0x10, 0xb4, 0x05, 0x12, 0x11, - 0x0a, 0x0c, 0x41, 0x65, 0x72, 0x6f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x10, 0xb5, - 0x05, 0x12, 0x11, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x6f, 0x63, 0x74, 0x6f, 0x70, 0x75, - 0x73, 0x10, 0xb6, 0x05, 0x12, 0x11, 0x0a, 0x08, 0x46, 0x75, 0x73, 0x65, 0x62, 0x69, 0x6c, 0x6c, - 0x10, 0xb7, 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x47, 0x65, 0x63, 0x6b, 0x6f, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x10, 0xb8, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x47, 0x6f, 0x73, 0x71, - 0x75, 0x61, 0x72, 0x65, 0x64, 0x10, 0xb9, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x4d, 0x6f, 0x6f, 0x6e, - 0x63, 0x6c, 0x65, 0x72, 0x6b, 0x10, 0xba, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x61, 0x79, 0x6d, - 0x6f, 0x61, 0x70, 0x70, 0x10, 0xbb, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x4d, 0x69, 0x78, 0x6d, 0x61, - 0x78, 0x10, 0xbc, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x73, - 0x74, 0x10, 0xbd, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x61, 0x69, 0x72, 0x73, 0x68, - 0x6f, 0x70, 0x72, 0x10, 0xbe, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x6f, 0x73, 0x68, 0x69, 0x70, - 0x70, 0x6f, 0x10, 0xbf, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6f, 0x70, 0x74, 0x10, - 0xc0, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x75, 0x67, 0x65, 0x73, 0x74, 0x65, 0x72, 0x10, 0xc1, - 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x56, 0x69, 0x65, 0x77, 0x6e, 0x65, 0x6f, 0x10, 0xc2, 0x05, 0x12, - 0x0e, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x10, 0xc3, 0x05, 0x12, - 0x10, 0x0a, 0x0b, 0x43, 0x61, 0x70, 0x74, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x10, 0xc4, - 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x76, 0x69, 0x73, 0x74, 0x10, 0xc5, - 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x67, 0x6f, 0x10, 0xc6, 0x05, 0x12, - 0x0a, 0x0a, 0x05, 0x43, 0x6c, 0x6f, 0x7a, 0x65, 0x10, 0xc7, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x46, - 0x6f, 0x72, 0x6d, 0x49, 0x4f, 0x10, 0xc8, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x6d, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x10, 0xc9, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x6f, 0x43, - 0x61, 0x6e, 0x76, 0x61, 0x73, 0x10, 0xca, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x4d, 0x61, 0x64, 0x4b, - 0x75, 0x64, 0x75, 0x10, 0xcb, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x4e, 0x6f, 0x7a, 0x62, 0x65, 0x54, - 0x65, 0x61, 0x6d, 0x73, 0x10, 0xcc, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x50, 0x61, 0x70, 0x79, 0x72, - 0x73, 0x10, 0xcd, 0x05, 0x12, 0x12, 0x0a, 0x0d, 0x53, 0x75, 0x70, 0x65, 0x72, 0x4e, 0x6f, 0x74, - 0x65, 0x73, 0x41, 0x50, 0x49, 0x10, 0xce, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x61, 0x6c, 0x6c, - 0x79, 0x66, 0x79, 0x10, 0xcf, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x5a, 0x65, 0x6e, 0x6b, 0x69, 0x74, - 0x41, 0x50, 0x49, 0x10, 0xd0, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x10, 0xd1, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x55, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x43, 0x61, 0x72, 0x65, 0x10, 0xd2, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x42, 0x6f, 0x72, 0x67, - 0x62, 0x61, 0x73, 0x65, 0x10, 0xd3, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x50, 0x69, 0x70, 0x65, 0x64, - 0x72, 0x65, 0x61, 0x6d, 0x10, 0xd4, 0x05, 0x12, 0x09, 0x0a, 0x04, 0x53, 0x69, 0x72, 0x76, 0x10, - 0xd5, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x44, 0x69, 0x66, 0x66, 0x62, 0x6f, 0x74, 0x10, 0xd6, 0x05, - 0x12, 0x10, 0x0a, 0x0b, 0x45, 0x69, 0x67, 0x68, 0x74, 0x78, 0x45, 0x69, 0x67, 0x68, 0x74, 0x10, - 0xd7, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x53, 0x65, 0x6e, 0x64, 0x6f, 0x73, 0x6f, 0x10, 0xd8, 0x05, - 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x10, 0xd9, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x10, 0xda, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x50, 0x61, 0x6e, 0x64, 0x61, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x10, 0xdb, 0x05, 0x12, 0x0a, 0x0a, 0x05, 0x50, 0x61, 0x79, 0x6d, 0x6f, 0x10, 0xdc, 0x05, - 0x12, 0x1d, 0x0a, 0x18, 0x41, 0x76, 0x61, 0x7a, 0x61, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, - 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xdd, 0x05, 0x12, - 0x14, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x6e, 0x76, 0x69, 0x65, 0x77, 0x4c, 0x65, 0x61, 0x6e, 0x4b, - 0x69, 0x74, 0x10, 0xde, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x69, 0x76, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x6d, 0x10, 0xdf, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x4b, 0x75, 0x43, 0x6f, 0x69, 0x6e, 0x10, - 0xe0, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x61, 0x41, 0x50, 0x49, 0x10, 0xe1, 0x05, - 0x12, 0x0d, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x65, 0x48, 0x61, 0x73, 0x68, 0x10, 0xe2, 0x05, 0x12, - 0x0a, 0x0a, 0x05, 0x43, 0x65, 0x78, 0x49, 0x4f, 0x10, 0xe3, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x4b, - 0x6c, 0x69, 0x70, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x10, 0xe4, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x44, - 0x79, 0x6e, 0x61, 0x74, 0x72, 0x61, 0x63, 0x65, 0x10, 0xe5, 0x05, 0x12, 0x11, 0x0a, 0x0c, 0x4d, - 0x6f, 0x6c, 0x6c, 0x69, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x10, 0xe6, 0x05, 0x12, 0x16, - 0x0a, 0x11, 0x4d, 0x6f, 0x6c, 0x6c, 0x69, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x10, 0xe7, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x61, 0x73, 0x69, 0x73, 0x54, - 0x68, 0x65, 0x6f, 0x72, 0x79, 0x10, 0xe8, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x4e, 0x6f, 0x72, 0x64, - 0x69, 0x67, 0x65, 0x6e, 0x10, 0xe9, 0x05, 0x12, 0x1c, 0x0a, 0x17, 0x46, 0x6c, 0x61, 0x67, 0x73, - 0x6d, 0x69, 0x74, 0x68, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4b, - 0x65, 0x79, 0x10, 0xea, 0x05, 0x12, 0x13, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x6d, 0x69, - 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xeb, 0x05, 0x12, 0x08, 0x0a, 0x03, 0x4d, 0x75, - 0x78, 0x10, 0xec, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x10, 0xed, - 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x65, 0x6e, 0x64, 0x62, 0x69, 0x72, 0x64, 0x10, 0xee, 0x05, - 0x12, 0x1c, 0x0a, 0x17, 0x53, 0x65, 0x6e, 0x64, 0x62, 0x69, 0x72, 0x64, 0x4f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x50, 0x49, 0x10, 0xef, 0x05, 0x12, 0x0b, - 0x0a, 0x06, 0x4d, 0x69, 0x64, 0x69, 0x73, 0x65, 0x10, 0xf0, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x4d, - 0x6f, 0x63, 0x6b, 0x61, 0x72, 0x6f, 0x6f, 0x10, 0xf1, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x34, 0x10, 0xf2, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x50, 0x69, 0x6e, 0x61, 0x74, - 0x61, 0x10, 0xf3, 0x05, 0x12, 0x11, 0x0a, 0x0c, 0x42, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x10, 0xf4, 0x05, 0x12, 0x1c, 0x0a, 0x13, 0x43, 0x72, 0x6f, 0x73, 0x73, - 0x42, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x10, 0xf5, - 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x6f, 0x61, 0x64, 0x6d, 0x69, 0x6c, - 0x6c, 0x10, 0xf6, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x42, - 0x6f, 0x74, 0x10, 0xf7, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x4b, 0x6e, 0x61, 0x70, 0x73, 0x61, 0x63, - 0x6b, 0x50, 0x72, 0x6f, 0x10, 0xf8, 0x05, 0x12, 0x09, 0x0a, 0x04, 0x51, 0x61, 0x73, 0x65, 0x10, - 0xf9, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x44, 0x61, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x10, - 0xfa, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x54, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x78, 0x10, 0xfb, - 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x48, 0x6f, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x63, 0x10, 0xfc, 0x05, - 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x73, 0x65, 0x72, 0x73, 0x10, 0xfd, 0x05, 0x12, 0x12, - 0x0a, 0x0d, 0x53, 0x63, 0x72, 0x75, 0x74, 0x69, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x69, 0x10, - 0xfe, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x6f, 0x6e, 0x61, 0x72, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x10, 0xff, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x41, 0x50, 0x49, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x10, 0x80, 0x06, 0x12, 0x14, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x10, 0x81, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x43, - 0x72, 0x61, 0x66, 0x74, 0x4d, 0x79, 0x50, 0x44, 0x46, 0x10, 0x82, 0x06, 0x12, 0x0e, 0x0a, 0x09, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x44, 0x4b, 0x10, 0x83, 0x06, 0x12, 0x15, 0x0a, 0x0c, - 0x47, 0x6c, 0x69, 0x74, 0x74, 0x65, 0x72, 0x6c, 0x79, 0x41, 0x50, 0x49, 0x10, 0x84, 0x06, 0x1a, - 0x02, 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x48, 0x79, 0x62, 0x69, 0x73, 0x63, 0x75, 0x73, 0x10, - 0x85, 0x06, 0x12, 0x09, 0x0a, 0x04, 0x4d, 0x69, 0x72, 0x6f, 0x10, 0x86, 0x06, 0x12, 0x0f, 0x0a, - 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x70, 0x61, 0x67, 0x65, 0x10, 0x87, 0x06, 0x12, 0x0e, - 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x70, 0x61, 0x6c, 0x10, 0x88, 0x06, 0x12, 0x0d, - 0x0a, 0x08, 0x54, 0x65, 0x6c, 0x65, 0x74, 0x79, 0x70, 0x65, 0x10, 0x89, 0x06, 0x12, 0x0d, 0x0a, - 0x08, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x61, 0x6d, 0x70, 0x10, 0x8a, 0x06, 0x12, 0x0d, 0x0a, 0x08, - 0x55, 0x73, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x10, 0x8b, 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x57, - 0x69, 0x73, 0x74, 0x69, 0x61, 0x10, 0x8c, 0x06, 0x12, 0x13, 0x0a, 0x0a, 0x53, 0x70, 0x6f, 0x72, - 0x74, 0x52, 0x61, 0x64, 0x61, 0x72, 0x10, 0x8d, 0x06, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x10, 0x0a, - 0x0b, 0x55, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x10, 0x8e, 0x06, 0x12, - 0x0e, 0x0a, 0x09, 0x43, 0x6f, 0x64, 0x65, 0x71, 0x75, 0x69, 0x72, 0x79, 0x10, 0x8f, 0x06, 0x12, - 0x11, 0x0a, 0x0c, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x41, 0x50, 0x49, 0x10, - 0x90, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x10, 0x91, - 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4d, 0x61, 0x67, 0x69, 0x63, 0x42, 0x65, 0x6c, 0x6c, 0x10, 0x92, - 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x72, 0x6d, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x10, - 0x93, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x70, 0x69, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x10, 0x94, - 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x69, 0x73, 0x71, 0x75, 0x73, 0x10, 0x95, 0x06, 0x12, 0x0b, - 0x0a, 0x06, 0x57, 0x6f, 0x6f, 0x70, 0x72, 0x61, 0x10, 0x96, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x50, - 0x61, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0x97, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x47, - 0x75, 0x6d, 0x72, 0x6f, 0x61, 0x64, 0x10, 0x98, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x50, 0x61, 0x79, - 0x64, 0x69, 0x72, 0x74, 0x61, 0x70, 0x70, 0x10, 0x99, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x44, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x66, 0x79, 0x10, 0x9a, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x63, 0x61, 0x6b, 0x65, 0x10, 0x9b, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x4a, - 0x75, 0x6d, 0x70, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x10, 0x9c, 0x06, 0x12, 0x0f, 0x0a, 0x0a, - 0x4c, 0x75, 0x6e, 0x63, 0x68, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x10, 0x9d, 0x06, 0x12, 0x0c, 0x0a, - 0x07, 0x52, 0x6f, 0x73, 0x65, 0x74, 0x74, 0x65, 0x10, 0x9e, 0x06, 0x12, 0x09, 0x0a, 0x04, 0x59, - 0x65, 0x6c, 0x70, 0x10, 0x9f, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x74, 0x65, 0x72, 0x61, 0x10, - 0xa0, 0x06, 0x12, 0x12, 0x0a, 0x0d, 0x45, 0x63, 0x6f, 0x53, 0x74, 0x72, 0x75, 0x78, 0x75, 0x72, - 0x65, 0x49, 0x54, 0x10, 0xa1, 0x06, 0x12, 0x08, 0x0a, 0x03, 0x41, 0x68, 0x61, 0x10, 0xa2, 0x06, - 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x61, 0x72, 0x73, 0x65, 0x68, 0x75, 0x62, 0x10, 0xa3, 0x06, 0x12, - 0x11, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x10, - 0xa4, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x6d, 0x69, 0x74, 0x68, - 0x10, 0xa5, 0x06, 0x12, 0x11, 0x0a, 0x08, 0x46, 0x6c, 0x6f, 0x77, 0x64, 0x61, 0x73, 0x68, 0x10, - 0xa6, 0x06, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x11, 0x0a, 0x08, 0x46, 0x6c, 0x6f, 0x77, 0x64, 0x6f, - 0x63, 0x6b, 0x10, 0xa7, 0x06, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x46, 0x69, 0x62, - 0x65, 0x72, 0x79, 0x10, 0xa8, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x54, 0x79, 0x70, 0x65, 0x74, 0x61, - 0x6c, 0x6b, 0x10, 0xa9, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x6f, 0x6f, 0x64, 0x6f, 0x6f, 0x53, - 0x4d, 0x53, 0x10, 0xaa, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x5a, 0x75, 0x6c, 0x69, 0x70, 0x43, 0x68, - 0x61, 0x74, 0x10, 0xab, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x6f, 0x72, 0x6d, 0x63, 0x72, 0x61, - 0x66, 0x74, 0x10, 0xac, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x65, 0x78, 0x61, 0x70, 0x69, 0x73, - 0x10, 0xad, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x52, 0x65, 0x61, 0x63, 0x68, 0x6d, 0x61, 0x69, 0x6c, - 0x10, 0xae, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x72, 0x74, 0x6d, 0x6f, 0x67, 0x75, - 0x6c, 0x10, 0xaf, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x64, 0x64, 0x10, 0xb0, 0x06, 0x12, 0x08, 0x0a, 0x03, 0x57, 0x69, 0x74, 0x10, 0xb1, 0x06, 0x12, - 0x15, 0x0a, 0x10, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x10, 0xb2, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x44, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x6e, 0x61, 0x75, 0x74, 0x10, 0xb3, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x4d, 0x6f, 0x6e, 0x6b, 0x65, - 0x79, 0x4c, 0x65, 0x61, 0x72, 0x6e, 0x10, 0xb4, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x44, 0x75, 0x70, - 0x6c, 0x79, 0x10, 0xb5, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x50, 0x6f, 0x73, 0x74, 0x62, 0x61, 0x63, - 0x6b, 0x73, 0x10, 0xb6, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x32, 0x10, 0xb7, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x5a, 0x65, 0x6e, 0x52, 0x6f, 0x77, 0x73, 0x10, - 0xb8, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x5a, 0x69, 0x70, 0x63, 0x6f, 0x64, 0x65, 0x62, 0x61, 0x73, - 0x65, 0x10, 0xb9, 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x65, 0x66, 0x74, 0x65, 0x72, 0x10, 0xba, - 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x54, 0x77, 0x69, 0x73, 0x74, 0x10, 0xbb, 0x06, 0x12, 0x16, 0x0a, - 0x11, 0x42, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x72, 0x65, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x10, 0xbc, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x74, 0x10, 0xbd, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x47, 0x72, 0x61, 0x66, - 0x61, 0x6e, 0x61, 0x10, 0xbe, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x74, 0x41, 0x70, 0x69, 0x10, 0xbf, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x10, 0xc0, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x42, 0x75, - 0x6c, 0x6b, 0x73, 0x6d, 0x73, 0x10, 0xc1, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x6f, 0x78, 0x10, 0xc2, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4f, 0x6e, 0x65, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x6c, 0x10, 0xc3, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x52, 0x65, 0x6e, 0x74, 0x6d, 0x61, - 0x6e, 0x10, 0xc4, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x73, 0x65, 0x75, 0x72, 0x10, - 0xc5, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x44, 0x6f, 0x63, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x10, - 0xc6, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x46, 0x6f, 0x72, 0x6d, 0x73, 0x69, 0x74, 0x65, 0x10, 0xc7, - 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x74, 0x61, 0x69, 0x6c, 0x6f, - 0x72, 0x10, 0xc8, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x4c, 0x65, 0x6d, 0x6c, 0x69, 0x73, 0x74, 0x10, - 0xc9, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x64, 0x70, 0x61, 0x64, 0x10, 0xca, 0x06, - 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x6f, 0x72, 0x6d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xcb, 0x06, - 0x12, 0x10, 0x0a, 0x0b, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x10, - 0xcc, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6f, 0x64, 0x65, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x10, - 0xcd, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x56, 0x62, 0x6f, 0x75, 0x74, 0x10, 0xce, 0x06, 0x12, 0x0e, - 0x0a, 0x09, 0x4e, 0x69, 0x67, 0x68, 0x74, 0x66, 0x61, 0x6c, 0x6c, 0x10, 0xcf, 0x06, 0x12, 0x0f, - 0x0a, 0x0a, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4c, 0x61, 0x62, 0x73, 0x10, 0xd0, 0x06, 0x12, - 0x11, 0x0a, 0x0c, 0x53, 0x70, 0x65, 0x65, 0x63, 0x68, 0x54, 0x65, 0x78, 0x74, 0x41, 0x49, 0x10, - 0xd1, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x6f, 0x6c, 0x6c, 0x73, 0x41, 0x50, 0x49, 0x10, 0xd2, - 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x69, 0x6d, 0x46, 0x69, 0x6e, 0x10, 0xd3, 0x06, 0x12, 0x0a, - 0x0a, 0x05, 0x53, 0x63, 0x61, 0x6c, 0x72, 0x10, 0xd4, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x4b, 0x61, - 0x6e, 0x62, 0x61, 0x6e, 0x74, 0x6f, 0x6f, 0x6c, 0x10, 0xd5, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x42, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x10, 0xd6, 0x06, 0x12, 0x0c, 0x0a, - 0x07, 0x48, 0x6f, 0x74, 0x77, 0x69, 0x72, 0x65, 0x10, 0xd7, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6f, 0x74, 0x10, 0xd8, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x69, - 0x6d, 0x65, 0x6b, 0x69, 0x74, 0x10, 0xd9, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x10, 0xda, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x4d, 0x6f, - 0x6a, 0x6f, 0x68, 0x65, 0x6c, 0x70, 0x64, 0x65, 0x73, 0x6b, 0x10, 0xdb, 0x06, 0x12, 0x0f, 0x0a, - 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x10, 0xdc, 0x06, 0x12, 0x10, - 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x10, 0xdd, 0x06, - 0x12, 0x0c, 0x0a, 0x07, 0x44, 0x79, 0x6e, 0x61, 0x64, 0x6f, 0x74, 0x10, 0xde, 0x06, 0x12, 0x0a, - 0x0a, 0x05, 0x44, 0x65, 0x6d, 0x69, 0x6f, 0x10, 0xdf, 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x6f, - 0x6b, 0x65, 0x65, 0x74, 0x10, 0xe0, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x4d, 0x79, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0xe1, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6f, - 0x70, 0x79, 0x73, 0x63, 0x61, 0x70, 0x65, 0x10, 0xe2, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x42, 0x65, - 0x73, 0x6e, 0x61, 0x70, 0x70, 0x79, 0x10, 0xe3, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x61, 0x6c, - 0x65, 0x73, 0x6d, 0x61, 0x74, 0x65, 0x10, 0xe4, 0x06, 0x12, 0x13, 0x0a, 0x0a, 0x48, 0x65, 0x61, - 0x74, 0x6d, 0x61, 0x70, 0x61, 0x70, 0x69, 0x10, 0xe5, 0x06, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x11, - 0x0a, 0x0c, 0x57, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x70, 0x75, 0x6c, 0x73, 0x65, 0x10, 0xe6, - 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x55, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x79, 0x10, 0xe7, - 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x10, 0xe8, 0x06, 0x12, - 0x0d, 0x0a, 0x08, 0x50, 0x44, 0x46, 0x6d, 0x79, 0x55, 0x52, 0x4c, 0x10, 0xe9, 0x06, 0x12, 0x10, - 0x0a, 0x0b, 0x41, 0x70, 0x69, 0x32, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x10, 0xea, 0x06, - 0x12, 0x0d, 0x0a, 0x08, 0x4f, 0x70, 0x73, 0x67, 0x65, 0x6e, 0x69, 0x65, 0x10, 0xeb, 0x06, 0x12, - 0x0b, 0x0a, 0x06, 0x47, 0x65, 0x6d, 0x69, 0x6e, 0x69, 0x10, 0xec, 0x06, 0x12, 0x0e, 0x0a, 0x09, - 0x48, 0x6f, 0x6e, 0x65, 0x79, 0x63, 0x6f, 0x6d, 0x62, 0x10, 0xed, 0x06, 0x12, 0x14, 0x0a, 0x0f, - 0x4b, 0x61, 0x6c, 0x74, 0x75, 0x72, 0x61, 0x41, 0x70, 0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, - 0xee, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4b, 0x61, 0x6c, 0x74, 0x75, 0x72, 0x61, 0x53, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x10, 0xef, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x42, 0x69, 0x74, 0x47, 0x6f, - 0x10, 0xf0, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x4f, 0x70, 0x74, 0x69, 0x64, 0x61, 0x73, 0x68, 0x10, - 0xf1, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x6d, 0x67, 0x69, 0x78, 0x10, 0xf2, 0x06, 0x12, 0x10, - 0x0a, 0x0b, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x54, 0x65, 0x78, 0x74, 0x10, 0xf3, 0x06, - 0x12, 0x10, 0x0a, 0x0b, 0x50, 0x61, 0x67, 0x65, 0x32, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x10, - 0xf4, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x51, 0x75, 0x69, 0x63, 0x6b, 0x62, 0x61, 0x73, 0x65, 0x10, - 0xf5, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x52, 0x65, 0x64, 0x62, 0x6f, 0x6f, 0x74, 0x68, 0x10, 0xf6, - 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x4e, 0x75, 0x62, 0x65, 0x6c, 0x61, 0x10, 0xf7, 0x06, 0x12, 0x0c, - 0x0a, 0x07, 0x49, 0x6e, 0x66, 0x6f, 0x62, 0x69, 0x70, 0x10, 0xf8, 0x06, 0x12, 0x0a, 0x0a, 0x05, - 0x55, 0x70, 0x72, 0x6f, 0x63, 0x10, 0xf9, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x62, 0x65, 0x65, 0x10, 0xfa, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x66, 0x74, - 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x10, 0xfb, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x45, 0x64, 0x75, - 0x73, 0x69, 0x67, 0x6e, 0x10, 0xfc, 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x65, 0x61, 0x6d, 0x75, - 0x70, 0x10, 0xfd, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x57, 0x6f, 0x72, 0x6b, 0x64, 0x61, 0x79, 0x10, - 0xfe, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x10, 0xff, 0x06, - 0x12, 0x08, 0x0a, 0x03, 0x4e, 0x47, 0x43, 0x10, 0x80, 0x07, 0x12, 0x13, 0x0a, 0x0e, 0x44, 0x69, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x56, 0x32, 0x10, 0x81, 0x07, 0x12, - 0x0e, 0x0a, 0x09, 0x53, 0x51, 0x4c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x10, 0x82, 0x07, 0x12, - 0x08, 0x0a, 0x03, 0x46, 0x54, 0x50, 0x10, 0x83, 0x07, 0x12, 0x0a, 0x0a, 0x05, 0x52, 0x65, 0x64, - 0x69, 0x73, 0x10, 0x84, 0x07, 0x12, 0x09, 0x0a, 0x04, 0x4c, 0x44, 0x41, 0x50, 0x10, 0x85, 0x07, - 0x12, 0x0c, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x69, 0x66, 0x79, 0x10, 0x86, 0x07, 0x12, 0x0d, - 0x0a, 0x08, 0x52, 0x61, 0x62, 0x62, 0x69, 0x74, 0x4d, 0x51, 0x10, 0x87, 0x07, 0x12, 0x10, 0x0a, - 0x0b, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x67, 0x65, 0x78, 0x10, 0x88, 0x07, 0x12, - 0x0e, 0x0a, 0x09, 0x45, 0x74, 0x68, 0x65, 0x72, 0x73, 0x63, 0x61, 0x6e, 0x10, 0x89, 0x07, 0x12, - 0x0b, 0x0a, 0x06, 0x49, 0x6e, 0x66, 0x75, 0x72, 0x61, 0x10, 0x8a, 0x07, 0x12, 0x0c, 0x0a, 0x07, - 0x41, 0x6c, 0x63, 0x68, 0x65, 0x6d, 0x79, 0x10, 0x8b, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x4e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x10, 0x8c, 0x07, 0x12, 0x0c, 0x0a, 0x07, - 0x4d, 0x6f, 0x72, 0x61, 0x6c, 0x69, 0x73, 0x10, 0x8d, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x42, 0x73, - 0x63, 0x53, 0x63, 0x61, 0x6e, 0x10, 0x8e, 0x07, 0x12, 0x16, 0x0a, 0x0d, 0x43, 0x6f, 0x69, 0x6e, - 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x43, 0x61, 0x70, 0x10, 0x8f, 0x07, 0x1a, 0x02, 0x08, 0x01, - 0x12, 0x0a, 0x0a, 0x05, 0x50, 0x65, 0x72, 0x63, 0x79, 0x10, 0x90, 0x07, 0x12, 0x11, 0x0a, 0x0c, - 0x54, 0x69, 0x6e, 0x65, 0x73, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x10, 0x91, 0x07, 0x12, - 0x0b, 0x0a, 0x06, 0x50, 0x75, 0x6c, 0x75, 0x6d, 0x69, 0x10, 0x92, 0x07, 0x12, 0x12, 0x0a, 0x0d, - 0x53, 0x75, 0x70, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x93, 0x07, - 0x12, 0x10, 0x0a, 0x0b, 0x4e, 0x75, 0x47, 0x65, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, - 0x94, 0x07, 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x69, 0x76, 0x65, 0x6e, 0x10, 0x95, 0x07, 0x12, 0x0c, - 0x0a, 0x07, 0x50, 0x72, 0x65, 0x66, 0x65, 0x63, 0x74, 0x10, 0x96, 0x07, 0x12, 0x0d, 0x0a, 0x08, - 0x44, 0x6f, 0x63, 0x75, 0x73, 0x69, 0x67, 0x6e, 0x10, 0x97, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x43, - 0x6f, 0x75, 0x63, 0x68, 0x62, 0x61, 0x73, 0x65, 0x10, 0x98, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x44, - 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x68, 0x75, 0x62, 0x10, 0x99, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x54, - 0x72, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x68, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x69, 0x73, 0x65, 0x10, 0x9a, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x41, - 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x9b, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x47, 0x69, 0x74, 0x48, - 0x75, 0x62, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x10, 0x9c, 0x07, 0x12, 0x0f, 0x0a, 0x0a, 0x53, - 0x61, 0x6c, 0x65, 0x73, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x10, 0x9d, 0x07, 0x12, 0x10, 0x0a, 0x0b, - 0x48, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x65, 0x10, 0x9e, 0x07, 0x12, 0x0e, - 0x0a, 0x09, 0x53, 0x6e, 0x6f, 0x77, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x10, 0x9f, 0x07, 0x12, 0x10, - 0x0a, 0x0b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x67, 0x72, 0x61, 0x70, 0x68, 0x10, 0xa0, 0x07, - 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x61, 0x69, 0x6c, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x10, 0xa1, 0x07, - 0x12, 0x10, 0x0a, 0x0b, 0x57, 0x65, 0x62, 0x33, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x10, - 0xa2, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x10, 0xa3, 0x07, 0x12, 0x12, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x53, - 0x63, 0x61, 0x6c, 0x65, 0x44, 0x62, 0x10, 0xa4, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x6e, 0x74, - 0x68, 0x72, 0x6f, 0x70, 0x69, 0x63, 0x10, 0xa5, 0x07, 0x12, 0x09, 0x0a, 0x04, 0x52, 0x61, 0x6d, - 0x70, 0x10, 0xa6, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x4b, 0x6c, 0x61, 0x76, 0x69, 0x79, 0x6f, 0x10, - 0xa7, 0x07, 0x12, 0x14, 0x0a, 0x0f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x43, 0x6f, 0x64, 0x79, 0x10, 0xa8, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x6f, 0x69, 0x63, - 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x10, 0xa9, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x72, 0x69, 0x76, - 0x61, 0x63, 0x79, 0x10, 0xaa, 0x07, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x50, 0x49, 0x6e, 0x66, 0x6f, - 0x10, 0xab, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x49, 0x70, 0x32, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x10, 0xac, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6d, 0x6f, - 0x6a, 0x6f, 0x10, 0xad, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x10, 0xae, 0x07, 0x12, 0x13, 0x0a, 0x0e, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xaf, 0x07, 0x12, 0x0b, 0x0a, 0x06, 0x4c, 0x6f, - 0x67, 0x67, 0x6c, 0x79, 0x10, 0xb0, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x4f, 0x70, 0x65, 0x6e, 0x56, - 0x70, 0x6e, 0x10, 0xb1, 0x07, 0x12, 0x1e, 0x0a, 0x19, 0x56, 0x61, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x10, 0xb2, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x65, 0x74, 0x74, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x10, 0xb3, 0x07, 0x12, 0x0d, 0x0a, 0x08, 0x5a, 0x65, 0x72, 0x6f, 0x54, - 0x69, 0x65, 0x72, 0x10, 0xb4, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x4f, 0x70, 0x74, - 0x69, 0x63, 0x73, 0x10, 0xb5, 0x07, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x10, 0xb6, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, - 0x65, 0x57, 0x61, 0x61, 0x53, 0x10, 0xb7, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x4c, 0x65, 0x6d, 0x6f, - 0x6e, 0x53, 0x71, 0x75, 0x65, 0x65, 0x7a, 0x79, 0x10, 0xb8, 0x07, 0x12, 0x0d, 0x0a, 0x08, 0x42, - 0x75, 0x64, 0x69, 0x62, 0x61, 0x73, 0x65, 0x10, 0xb9, 0x07, 0x12, 0x0f, 0x0a, 0x0a, 0x44, 0x65, - 0x6e, 0x6f, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x10, 0xba, 0x07, 0x12, 0x0b, 0x0a, 0x06, 0x53, - 0x74, 0x72, 0x69, 0x70, 0x6f, 0x10, 0xbb, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x49, 0x4f, 0x10, 0xbc, 0x07, 0x12, 0x0f, 0x0a, 0x0a, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x10, 0xbd, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x41, 0x7a, 0x75, 0x72, 0x65, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x10, 0xbe, 0x07, 0x12, 0x12, 0x0a, 0x0d, 0x41, 0x57, 0x53, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0xbf, 0x07, 0x12, 0x09, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x61, - 0x10, 0xc0, 0x07, 0x12, 0x0b, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x7a, 0x49, 0x4f, 0x10, 0xc1, 0x07, - 0x12, 0x0f, 0x0a, 0x0a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x62, 0x72, 0x69, 0x74, 0x65, 0x10, 0xc2, - 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x47, 0x72, 0x61, 0x66, 0x61, 0x6e, 0x61, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xc3, 0x07, 0x12, 0x13, 0x0a, - 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x10, - 0xc4, 0x07, 0x12, 0x0d, 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x6f, 0x70, 0x10, 0xc5, - 0x07, 0x12, 0x0a, 0x0a, 0x05, 0x4e, 0x67, 0x72, 0x6f, 0x6b, 0x10, 0xc6, 0x07, 0x12, 0x0e, 0x0a, - 0x09, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x10, 0xc7, 0x07, 0x12, 0x0d, 0x0a, - 0x08, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x10, 0xc8, 0x07, 0x12, 0x2a, 0x0a, 0x25, - 0x41, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x10, 0xc9, 0x07, 0x12, 0x20, 0x0a, 0x1b, 0x41, 0x7a, 0x75, 0x72, - 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x64, 0x69, 0x73, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x10, 0xca, 0x07, 0x12, 0x21, 0x0a, 0x1c, 0x41, 0x7a, - 0x75, 0x72, 0x65, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x44, 0x42, 0x4b, 0x65, 0x79, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x10, 0xcb, 0x07, 0x12, 0x23, 0x0a, - 0x1e, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x65, 0x76, 0x6f, 0x70, 0x73, 0x50, 0x65, 0x72, 0x73, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x13, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, + 0x2e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x11, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x3c, 0x0a, 0x0e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x53, 0x0a, 0x11, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x77, 0x6f, 0x72, 0x64, + 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x77, 0x6f, + 0x72, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x77, 0x5f, 0x65, + 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6c, 0x6f, + 0x77, 0x45, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x79, 0x22, 0x91, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x0f, 0x74, + 0x6c, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, + 0x2e, 0x54, 0x6c, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x0d, + 0x74, 0x6c, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x3d, 0x0a, + 0x0e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x73, 0x2e, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x52, 0x0c, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x53, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x22, 0xa6, 0x01, 0x0a, + 0x0d, 0x54, 0x6c, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x37, + 0x0a, 0x17, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x69, + 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x16, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6e, 0x67, + 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, + 0x72, 0x6c, 0x12, 0x31, 0x0a, 0x14, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x13, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x58, 0x0a, 0x0c, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x53, + 0x53, 0x48, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, + 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x2a, + 0x51, 0x0a, 0x0b, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x50, + 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x41, 0x53, 0x45, 0x36, 0x34, + 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x54, 0x46, 0x31, 0x36, 0x10, 0x03, 0x12, 0x13, 0x0a, + 0x0f, 0x45, 0x53, 0x43, 0x41, 0x50, 0x45, 0x44, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x4f, 0x44, 0x45, + 0x10, 0x04, 0x2a, 0xf7, 0x7d, 0x0a, 0x0c, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x6c, 0x69, 0x62, 0x61, 0x62, 0x61, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x41, 0x4d, 0x51, 0x50, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x57, + 0x53, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x10, 0x03, 0x12, 0x0a, + 0x0a, 0x06, 0x43, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x6f, + 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x43, 0x50, 0x10, + 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x10, 0x07, 0x12, 0x0a, + 0x0a, 0x06, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x69, + 0x74, 0x6c, 0x61, 0x62, 0x10, 0x09, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x44, 0x42, 0x43, 0x10, 0x0a, + 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x61, 0x7a, 0x6f, 0x72, 0x50, 0x61, 0x79, 0x10, 0x0b, 0x12, 0x0c, + 0x0a, 0x08, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x72, 0x69, 0x64, 0x10, 0x0c, 0x12, 0x09, 0x0a, 0x05, + 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x10, 0x0d, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x71, 0x75, 0x61, 0x72, + 0x65, 0x10, 0x0e, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, + 0x79, 0x10, 0x0f, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x69, 0x70, 0x65, 0x10, 0x10, 0x12, + 0x07, 0x0a, 0x03, 0x55, 0x52, 0x49, 0x10, 0x11, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x72, 0x6f, 0x70, + 0x62, 0x6f, 0x78, 0x10, 0x12, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x65, 0x72, 0x6f, 0x6b, 0x75, 0x10, + 0x13, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x61, 0x69, 0x6c, 0x63, 0x68, 0x69, 0x6d, 0x70, 0x10, 0x14, + 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x6b, 0x74, 0x61, 0x10, 0x15, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x6e, + 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x10, 0x16, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x69, 0x76, 0x6f, + 0x74, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x10, 0x17, 0x12, 0x0d, 0x0a, 0x09, + 0x53, 0x71, 0x75, 0x61, 0x72, 0x65, 0x41, 0x70, 0x70, 0x10, 0x19, 0x12, 0x0a, 0x0a, 0x06, 0x54, + 0x77, 0x69, 0x6c, 0x69, 0x6f, 0x10, 0x1a, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x65, 0x73, 0x74, 0x10, + 0x1b, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x76, 0x69, 0x73, 0x43, 0x49, 0x10, 0x1d, 0x12, + 0x10, 0x0a, 0x0c, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x10, + 0x1e, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x61, 0x79, 0x70, 0x61, 0x6c, 0x4f, 0x61, 0x75, 0x74, 0x68, + 0x10, 0x1f, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x61, 0x67, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x41, + 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x20, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x69, 0x72, 0x65, 0x62, + 0x61, 0x73, 0x65, 0x10, 0x21, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x61, 0x69, 0x6c, 0x67, 0x75, 0x6e, + 0x10, 0x22, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x75, 0x62, 0x53, 0x70, 0x6f, 0x74, 0x10, 0x23, 0x12, + 0x0d, 0x0a, 0x09, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x41, 0x70, 0x70, 0x10, 0x24, 0x12, 0x0c, + 0x0a, 0x08, 0x43, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x43, 0x49, 0x10, 0x25, 0x12, 0x0c, 0x0a, 0x08, + 0x57, 0x70, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x10, 0x26, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x61, + 0x74, 0x61, 0x64, 0x6f, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x27, 0x12, 0x11, 0x0a, 0x0d, + 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x10, 0x28, 0x12, + 0x1c, 0x0a, 0x18, 0x41, 0x73, 0x61, 0x6e, 0x61, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x29, 0x12, 0x13, 0x0a, + 0x0f, 0x41, 0x6d, 0x70, 0x6c, 0x69, 0x74, 0x75, 0x64, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x10, 0x2a, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x69, 0x74, 0x4c, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x2b, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x6c, 0x79, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x2c, 0x12, 0x11, 0x0a, 0x0d, + 0x5a, 0x61, 0x70, 0x69, 0x65, 0x72, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x10, 0x2d, 0x12, + 0x11, 0x0a, 0x0d, 0x59, 0x6f, 0x75, 0x74, 0x75, 0x62, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x10, 0x2e, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x61, 0x6c, 0x65, 0x73, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x10, 0x2f, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x77, 0x69, 0x74, + 0x74, 0x65, 0x72, 0x41, 0x70, 0x69, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x10, 0x30, 0x12, 0x0c, + 0x0a, 0x08, 0x4e, 0x70, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x31, 0x12, 0x1a, 0x0a, 0x16, + 0x4e, 0x65, 0x77, 0x52, 0x65, 0x6c, 0x69, 0x63, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, + 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x32, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x69, 0x72, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x33, 0x12, 0x0f, 0x0a, 0x0b, + 0x41, 0x6b, 0x61, 0x6d, 0x61, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x34, 0x12, 0x0d, 0x0a, + 0x09, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x4d, 0x57, 0x53, 0x10, 0x35, 0x12, 0x0e, 0x0a, 0x0a, + 0x4b, 0x75, 0x62, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x36, 0x12, 0x0e, 0x0a, 0x0a, + 0x41, 0x75, 0x74, 0x68, 0x30, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x10, 0x37, 0x12, 0x0c, 0x0a, 0x08, + 0x42, 0x69, 0x74, 0x66, 0x69, 0x6e, 0x65, 0x78, 0x10, 0x38, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x6c, + 0x61, 0x72, 0x69, 0x66, 0x61, 0x69, 0x10, 0x39, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x66, 0x6c, 0x61, 0x72, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x41, 0x70, 0x69, 0x4b, + 0x65, 0x79, 0x10, 0x3a, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x66, 0x6c, 0x61, + 0x72, 0x65, 0x43, 0x61, 0x4b, 0x65, 0x79, 0x10, 0x3b, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x6f, 0x6e, + 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x74, 0x10, 0x3c, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x66, 0x75, 0x6c, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x10, 0x3d, + 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x62, 0x72, 0x69, 0x63, 0x6b, 0x73, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x10, 0x3e, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x10, 0x3f, 0x12, 0x15, 0x0a, + 0x11, 0x44, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x10, 0x40, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x42, + 0x6f, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x41, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x72, 0x64, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x10, 0x42, 0x12, 0x12, 0x0a, + 0x0a, 0x45, 0x74, 0x73, 0x79, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x43, 0x1a, 0x02, 0x08, + 0x01, 0x12, 0x17, 0x0a, 0x13, 0x46, 0x61, 0x73, 0x74, 0x6c, 0x79, 0x50, 0x65, 0x72, 0x73, 0x6f, + 0x6e, 0x61, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x44, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x10, 0x45, 0x12, 0x0d, 0x0a, 0x09, + 0x52, 0x65, 0x43, 0x41, 0x50, 0x54, 0x43, 0x48, 0x41, 0x10, 0x46, 0x12, 0x10, 0x0a, 0x0c, 0x47, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x47, 0x12, 0x0a, 0x0a, + 0x06, 0x48, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x10, 0x48, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x62, 0x6d, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x10, 0x49, 0x12, 0x0b, + 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x6c, 0x69, 0x66, 0x79, 0x10, 0x4a, 0x12, 0x0a, 0x0a, 0x06, 0x56, + 0x6f, 0x6e, 0x61, 0x67, 0x65, 0x10, 0x4b, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x71, 0x75, 0x69, 0x6e, + 0x69, 0x78, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x10, 0x4c, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x61, 0x79, + 0x73, 0x74, 0x61, 0x63, 0x6b, 0x10, 0x4d, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x69, 0x64, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x4e, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x69, 0x64, + 0x4b, 0x65, 0x79, 0x10, 0x4f, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x6c, 0x69, 0x76, 0x6f, 0x10, 0x50, + 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x74, 0x6d, 0x61, 0x72, 0x6b, 0x10, 0x51, 0x12, 0x14, + 0x0a, 0x10, 0x50, 0x75, 0x62, 0x4e, 0x75, 0x62, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4b, + 0x65, 0x79, 0x10, 0x52, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x75, 0x62, 0x4e, 0x75, 0x62, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0x53, 0x12, + 0x14, 0x0a, 0x10, 0x50, 0x75, 0x73, 0x68, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x4b, 0x65, 0x79, 0x10, 0x54, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x77, 0x61, + 0x79, 0x4b, 0x65, 0x79, 0x10, 0x55, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x42, 0x6c, 0x75, 0x65, 0x56, 0x32, 0x10, 0x56, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x74, + 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x57, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x68, 0x6f, + 0x64, 0x61, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0x58, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x6e, 0x79, 0x6b, + 0x4b, 0x65, 0x79, 0x10, 0x59, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x4b, 0x65, 0x79, 0x10, 0x5a, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x65, 0x6c, 0x65, 0x67, 0x72, 0x61, + 0x6d, 0x42, 0x6f, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x5b, 0x12, 0x13, 0x0a, 0x0f, 0x54, + 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4b, 0x65, 0x79, 0x10, 0x5c, + 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, + 0x5d, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x72, 0x65, 0x6c, 0x6c, 0x6f, 0x41, 0x70, 0x69, 0x4b, 0x65, + 0x79, 0x10, 0x5e, 0x12, 0x0e, 0x0a, 0x0a, 0x5a, 0x65, 0x6e, 0x64, 0x65, 0x73, 0x6b, 0x41, 0x70, + 0x69, 0x10, 0x5f, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x61, 0x78, 0x4d, 0x69, 0x6e, 0x64, 0x4c, 0x69, + 0x63, 0x65, 0x6e, 0x73, 0x65, 0x10, 0x60, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x69, 0x72, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x70, 0x69, 0x4b, 0x65, + 0x79, 0x10, 0x61, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x73, 0x61, 0x6e, 0x61, 0x4f, 0x61, 0x75, 0x74, + 0x68, 0x10, 0x62, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x61, 0x70, 0x69, 0x64, 0x41, 0x70, 0x69, 0x10, + 0x63, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x66, 0x6c, 0x61, 0x72, 0x65, 0x41, + 0x70, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x64, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x65, 0x62, + 0x65, 0x78, 0x10, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x69, 0x72, 0x65, 0x62, 0x61, 0x73, 0x65, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x10, 0x66, + 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x66, 0x75, 0x6c, 0x50, 0x65, + 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x10, 0x67, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x78, 0x10, 0x68, 0x12, + 0x14, 0x0a, 0x10, 0x4d, 0x61, 0x69, 0x6c, 0x4a, 0x65, 0x74, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, + 0x75, 0x74, 0x68, 0x10, 0x69, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x61, 0x69, 0x6c, 0x4a, 0x65, 0x74, + 0x53, 0x4d, 0x53, 0x10, 0x6a, 0x12, 0x11, 0x0a, 0x0d, 0x48, 0x75, 0x62, 0x53, 0x70, 0x6f, 0x74, + 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x6b, 0x12, 0x10, 0x0a, 0x0c, 0x48, 0x75, 0x62, 0x53, + 0x70, 0x6f, 0x74, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x10, 0x6c, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x73, + 0x6c, 0x4d, 0x61, 0x74, 0x65, 0x10, 0x6d, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x75, 0x74, 0x68, 0x30, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x69, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x10, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, + 0x69, 0x72, 0x64, 0x10, 0x6f, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, + 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x10, 0x70, 0x12, 0x1c, 0x0a, 0x18, 0x46, 0x69, 0x67, 0x6d, 0x61, + 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x10, 0x71, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, + 0x66, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x10, 0x72, + 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x4f, 0x6c, 0x64, 0x10, 0x73, 0x12, + 0x0f, 0x0a, 0x0b, 0x56, 0x75, 0x6c, 0x74, 0x72, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x74, + 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x65, 0x70, 0x69, 0x70, 0x6f, 0x73, 0x74, 0x10, 0x75, 0x12, 0x0b, + 0x0a, 0x07, 0x50, 0x6f, 0x73, 0x74, 0x6d, 0x61, 0x6e, 0x10, 0x76, 0x12, 0x11, 0x0a, 0x0d, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x69, 0x67, 0x68, 0x74, 0x4b, 0x65, 0x79, 0x10, 0x77, 0x12, 0x0d, + 0x0a, 0x09, 0x4a, 0x69, 0x72, 0x61, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x78, 0x12, 0x0f, 0x0a, + 0x0b, 0x4e, 0x65, 0x78, 0x6d, 0x6f, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x79, 0x12, 0x11, + 0x0a, 0x0d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, + 0x7a, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x75, 0x6d, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x10, 0x7b, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x75, 0x73, 0x68, 0x42, 0x75, 0x6c, 0x6c, 0x65, + 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x7c, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x69, 0x72, + 0x62, 0x72, 0x61, 0x6b, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x10, + 0x7d, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x69, 0x72, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x4b, 0x65, 0x79, 0x10, 0x7e, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x65, 0x6e, 0x64, 0x6f, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0x7f, 0x12, + 0x1f, 0x0a, 0x1a, 0x53, 0x70, 0x6c, 0x75, 0x6e, 0x6b, 0x4f, 0x62, 0x65, 0x72, 0x73, 0x65, 0x72, + 0x76, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x80, 0x01, + 0x12, 0x12, 0x0a, 0x0d, 0x4c, 0x6f, 0x6b, 0x61, 0x6c, 0x69, 0x73, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x10, 0x81, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, + 0x69, 0x66, 0x69, 0x63, 0x10, 0x82, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x4a, 0x75, 0x6d, 0x70, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x10, 0x83, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x70, 0x53, 0x74, 0x61, + 0x63, 0x6b, 0x10, 0x85, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x10, + 0x86, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x44, 0x72, 0x6f, 0x6e, 0x65, 0x43, 0x49, 0x10, 0x87, 0x01, + 0x12, 0x0c, 0x0a, 0x07, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x49, 0x4f, 0x10, 0x88, 0x01, 0x12, 0x0f, + 0x0a, 0x0a, 0x54, 0x77, 0x65, 0x6c, 0x76, 0x65, 0x44, 0x61, 0x74, 0x61, 0x10, 0x89, 0x01, 0x12, + 0x0e, 0x0a, 0x09, 0x44, 0x37, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x10, 0x8a, 0x01, 0x12, + 0x10, 0x0a, 0x0b, 0x53, 0x63, 0x72, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x65, 0x65, 0x10, 0x8b, + 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x4b, 0x65, 0x65, 0x6e, 0x49, 0x4f, 0x10, 0x8c, 0x01, 0x12, 0x0d, + 0x0a, 0x08, 0x57, 0x61, 0x6b, 0x61, 0x74, 0x69, 0x6d, 0x65, 0x10, 0x8d, 0x01, 0x12, 0x0e, 0x0a, + 0x09, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x6b, 0x69, 0x74, 0x65, 0x10, 0x8e, 0x01, 0x12, 0x0d, 0x0a, + 0x08, 0x56, 0x65, 0x72, 0x69, 0x6d, 0x61, 0x69, 0x6c, 0x10, 0x8f, 0x01, 0x12, 0x0f, 0x0a, 0x0a, + 0x5a, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x10, 0x90, 0x01, 0x12, 0x11, 0x0a, + 0x0c, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x10, 0x91, 0x01, + 0x12, 0x0f, 0x0a, 0x0a, 0x46, 0x61, 0x73, 0x74, 0x73, 0x70, 0x72, 0x69, 0x6e, 0x67, 0x10, 0x92, + 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x50, 0x61, 0x64, 0x64, 0x6c, 0x65, 0x10, 0x93, 0x01, 0x12, 0x0b, + 0x0a, 0x06, 0x53, 0x65, 0x6c, 0x6c, 0x66, 0x79, 0x10, 0x94, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x46, + 0x69, 0x78, 0x65, 0x72, 0x49, 0x4f, 0x10, 0x95, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x42, 0x75, 0x74, + 0x74, 0x65, 0x72, 0x43, 0x4d, 0x53, 0x10, 0x96, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x61, 0x78, + 0x6a, 0x61, 0x72, 0x10, 0x97, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x41, 0x76, 0x61, 0x6c, 0x61, 0x72, + 0x61, 0x10, 0x98, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x48, 0x65, 0x6c, 0x70, 0x73, 0x63, 0x6f, 0x75, + 0x74, 0x10, 0x99, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x50, + 0x61, 0x74, 0x68, 0x10, 0x9a, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x5a, 0x65, 0x70, 0x6c, 0x69, 0x6e, + 0x10, 0x9b, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x10, + 0x9c, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x61, 0x69, 0x6c, 0x6d, 0x6f, 0x64, 0x6f, 0x10, 0x9d, + 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x61, 0x6e, 0x6e, 0x79, 0x49, 0x6f, 0x10, 0x9e, 0x01, 0x12, + 0x0e, 0x0a, 0x09, 0x50, 0x69, 0x70, 0x65, 0x64, 0x72, 0x69, 0x76, 0x65, 0x10, 0x9f, 0x01, 0x12, + 0x0b, 0x0a, 0x06, 0x56, 0x65, 0x72, 0x63, 0x65, 0x6c, 0x10, 0xa0, 0x01, 0x12, 0x0f, 0x0a, 0x0a, + 0x50, 0x6f, 0x73, 0x74, 0x68, 0x6f, 0x67, 0x41, 0x70, 0x70, 0x10, 0xa1, 0x01, 0x12, 0x11, 0x0a, + 0x0c, 0x53, 0x69, 0x6e, 0x63, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xa2, 0x01, + 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x79, 0x72, 0x73, 0x68, 0x61, 0x72, 0x65, 0x10, 0xa3, 0x01, 0x12, + 0x0f, 0x0a, 0x0a, 0x48, 0x65, 0x6c, 0x70, 0x43, 0x72, 0x75, 0x6e, 0x63, 0x68, 0x10, 0xa4, 0x01, + 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x69, 0x76, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x10, 0xa5, 0x01, + 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x6d, 0x65, 0x72, 0x10, 0xa6, 0x01, 0x12, 0x11, 0x0a, + 0x0c, 0x57, 0x65, 0x43, 0x68, 0x61, 0x74, 0x41, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x10, 0xa7, 0x01, + 0x12, 0x12, 0x0a, 0x0d, 0x4c, 0x69, 0x6e, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, + 0x67, 0x10, 0xa8, 0x01, 0x12, 0x14, 0x0a, 0x0f, 0x55, 0x62, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa9, 0x01, 0x12, 0x14, 0x0a, 0x0f, 0x41, 0x6c, + 0x67, 0x6f, 0x6c, 0x69, 0x61, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0xaa, 0x01, + 0x12, 0x10, 0x0a, 0x0b, 0x46, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x10, + 0xab, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x61, 0x6e, 0x64, 0x72, 0x69, 0x6c, 0x6c, 0x10, 0xac, + 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x46, 0x6c, 0x75, 0x74, 0x74, 0x65, 0x72, 0x77, 0x61, 0x76, 0x65, + 0x10, 0xad, 0x01, 0x12, 0x1c, 0x0a, 0x17, 0x4d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6d, 0x6f, 0x73, + 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xae, + 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x61, 0x6e, 0x74, 0x10, 0xaf, 0x01, + 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x10, 0xb0, + 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x41, 0x50, 0x49, 0x10, 0xb1, + 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x55, 0x62, 0x69, 0x64, 0x6f, 0x74, 0x73, 0x10, 0xb2, 0x01, 0x12, + 0x0d, 0x0a, 0x08, 0x41, 0x6e, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x10, 0xb3, 0x01, 0x12, 0x0b, + 0x0a, 0x06, 0x44, 0x77, 0x6f, 0x6c, 0x6c, 0x61, 0x10, 0xb4, 0x01, 0x12, 0x1b, 0x0a, 0x16, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xb5, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x53, 0x75, 0x72, 0x67, + 0x65, 0x10, 0xb6, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x70, 0x61, 0x72, 0x6b, 0x70, 0x6f, 0x73, + 0x74, 0x10, 0xb7, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x47, 0x6f, 0x43, 0x61, 0x72, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x10, 0xb8, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x6f, 0x64, 0x61, 0x63, 0x79, 0x10, + 0xb9, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x4b, 0x72, 0x61, 0x6b, 0x65, 0x6e, 0x10, 0xba, 0x01, 0x12, + 0x0d, 0x0a, 0x08, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x10, 0xbb, 0x01, 0x12, 0x0b, + 0x0a, 0x06, 0x4b, 0x61, 0x69, 0x72, 0x6f, 0x73, 0x10, 0xbc, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x43, + 0x6c, 0x6f, 0x63, 0x6b, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x4d, 0x53, 0x10, 0xbd, 0x01, 0x12, 0x0e, + 0x0a, 0x09, 0x41, 0x74, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x61, 0x6e, 0x10, 0xbe, 0x01, 0x12, 0x11, + 0x0a, 0x0c, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x44, 0x61, 0x72, 0x6b, 0x6c, 0x79, 0x10, 0xbf, + 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x73, 0x10, 0xc0, + 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x4c, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x10, 0xc1, 0x01, 0x12, 0x0a, + 0x0a, 0x05, 0x57, 0x65, 0x50, 0x61, 0x79, 0x10, 0xc2, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x50, 0x6c, + 0x61, 0x6e, 0x65, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x10, 0xc3, 0x01, 0x12, 0x0c, 0x0a, 0x07, + 0x44, 0x6f, 0x70, 0x70, 0x6c, 0x65, 0x72, 0x10, 0xc4, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x67, + 0x6f, 0x72, 0x61, 0x10, 0xc5, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x53, 0x61, 0x6d, 0x73, 0x61, 0x72, + 0x61, 0x10, 0xc6, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x4f, 0x10, + 0xc7, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x52, 0x75, 0x62, 0x79, 0x47, 0x65, 0x6d, 0x73, 0x10, 0xc8, + 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x49, 0x10, 0xc9, 0x01, 0x12, 0x12, + 0x0a, 0x0d, 0x53, 0x75, 0x72, 0x76, 0x65, 0x79, 0x53, 0x70, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x10, + 0xca, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x53, 0x69, 0x6d, 0x76, 0x6f, 0x6c, 0x79, 0x10, 0xcb, 0x01, + 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x75, 0x72, 0x76, 0x69, 0x63, 0x61, 0x74, 0x65, 0x10, 0xcc, 0x01, + 0x12, 0x0d, 0x0a, 0x08, 0x4f, 0x6d, 0x6e, 0x69, 0x73, 0x65, 0x6e, 0x64, 0x10, 0xcd, 0x01, 0x12, + 0x0d, 0x0a, 0x08, 0x47, 0x72, 0x6f, 0x6f, 0x76, 0x65, 0x68, 0x71, 0x10, 0xce, 0x01, 0x12, 0x0c, + 0x0a, 0x07, 0x4e, 0x65, 0x77, 0x73, 0x61, 0x70, 0x69, 0x10, 0xcf, 0x01, 0x12, 0x0c, 0x0a, 0x07, + 0x43, 0x68, 0x61, 0x74, 0x62, 0x6f, 0x74, 0x10, 0xd0, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6c, + 0x69, 0x63, 0x6b, 0x53, 0x65, 0x6e, 0x64, 0x73, 0x6d, 0x73, 0x10, 0xd1, 0x01, 0x12, 0x0c, 0x0a, + 0x07, 0x47, 0x65, 0x74, 0x67, 0x69, 0x73, 0x74, 0x10, 0xd2, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x4f, 0x10, 0xd3, 0x01, 0x12, 0x0c, 0x0a, 0x07, + 0x41, 0x70, 0x69, 0x44, 0x65, 0x63, 0x6b, 0x10, 0xd4, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x4e, 0x66, + 0x74, 0x70, 0x6f, 0x72, 0x74, 0x10, 0xd5, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x6f, 0x70, 0x70, + 0x65, 0x72, 0x10, 0xd6, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x10, 0xd7, + 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x4d, 0x79, 0x66, 0x72, 0x65, 0x73, 0x68, 0x77, 0x6f, 0x72, 0x6b, + 0x73, 0x10, 0xd8, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x61, 0x6c, 0x65, 0x73, 0x66, 0x6c, 0x61, + 0x72, 0x65, 0x10, 0xd9, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x66, 0x6c, 0x6f, 0x77, + 0x10, 0xda, 0x01, 0x12, 0x09, 0x0a, 0x04, 0x44, 0x75, 0x64, 0x61, 0x10, 0xdb, 0x01, 0x12, 0x09, + 0x0a, 0x04, 0x59, 0x65, 0x78, 0x74, 0x10, 0xdc, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xdd, 0x01, 0x12, 0x0e, 0x0a, 0x09, + 0x53, 0x74, 0x6f, 0x72, 0x79, 0x62, 0x6c, 0x6f, 0x6b, 0x10, 0xde, 0x01, 0x12, 0x0d, 0x0a, 0x08, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x4d, 0x53, 0x10, 0xdf, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x10, 0xe0, 0x01, 0x12, 0x0f, 0x0a, + 0x0a, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x6b, 0x69, 0x74, 0x10, 0xe1, 0x01, 0x12, 0x11, + 0x0a, 0x0c, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x47, 0x75, 0x72, 0x75, 0x10, 0xe2, + 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x4b, 0x61, 0x6c, 0x65, 0x79, 0x72, 0x61, 0x10, 0xe3, 0x01, 0x12, + 0x0f, 0x0a, 0x0a, 0x4d, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x6c, 0x69, 0x74, 0x65, 0x10, 0xe4, 0x01, + 0x12, 0x0d, 0x0a, 0x08, 0x51, 0x75, 0x61, 0x6c, 0x61, 0x72, 0x6f, 0x6f, 0x10, 0xe5, 0x01, 0x12, + 0x19, 0x0a, 0x14, 0x53, 0x61, 0x74, 0x69, 0x73, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x6b, 0x65, 0x79, 0x10, 0xe6, 0x01, 0x12, 0x17, 0x0a, 0x12, 0x53, 0x61, + 0x74, 0x69, 0x73, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x57, 0x72, 0x69, 0x74, 0x65, 0x6b, 0x65, 0x79, + 0x10, 0xe7, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x61, 0x74, + 0x10, 0xe8, 0x01, 0x12, 0x13, 0x0a, 0x0e, 0x53, 0x75, 0x72, 0x76, 0x65, 0x79, 0x41, 0x6e, 0x79, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x10, 0xe9, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x75, 0x72, 0x76, + 0x65, 0x79, 0x42, 0x6f, 0x74, 0x10, 0xea, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x57, 0x65, 0x62, 0x65, + 0x6e, 0x67, 0x61, 0x67, 0x65, 0x10, 0xeb, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x5a, 0x6f, 0x6e, 0x6b, + 0x61, 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x10, 0xec, 0x01, 0x12, 0x0e, 0x0a, 0x09, + 0x44, 0x65, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x10, 0xed, 0x01, 0x12, 0x0c, 0x0a, 0x07, + 0x46, 0x65, 0x65, 0x64, 0x69, 0x65, 0x72, 0x10, 0xee, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x62, + 0x62, 0x79, 0x73, 0x61, 0x6c, 0x65, 0x10, 0xef, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x61, 0x67, + 0x6e, 0x65, 0x74, 0x69, 0x63, 0x10, 0xf0, 0x01, 0x12, 0x10, 0x0a, 0x07, 0x4e, 0x79, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x10, 0xf1, 0x01, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x6f, + 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x10, 0xf2, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x6f, 0x77, 0x72, + 0x62, 0x6f, 0x74, 0x10, 0xf3, 0x01, 0x12, 0x13, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x49, 0x4f, 0x10, 0xf4, 0x01, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x53, + 0x6b, 0x72, 0x61, 0x70, 0x70, 0x69, 0x6f, 0x10, 0xf5, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x4d, 0x6f, + 0x6e, 0x64, 0x61, 0x79, 0x10, 0xf6, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x6d, 0x61, 0x72, 0x74, + 0x73, 0x68, 0x65, 0x65, 0x74, 0x73, 0x10, 0xf7, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x57, 0x72, 0x69, + 0x6b, 0x65, 0x10, 0xf8, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x10, 0xf9, + 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x6b, 0x69, 0x74, 0x10, 0xfa, 0x01, + 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x6f, 0x6d, 0x61, 0x74, 0x10, 0xfb, + 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x61, 0x6c, 0x65, 0x73, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x10, + 0xfc, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x42, 0x6f, 0x72, 0x65, 0x64, 0x10, 0xfd, 0x01, 0x12, 0x0c, + 0x0a, 0x07, 0x43, 0x61, 0x6d, 0x70, 0x61, 0x79, 0x6e, 0x10, 0xfe, 0x01, 0x12, 0x0e, 0x0a, 0x09, + 0x43, 0x6c, 0x69, 0x6e, 0x63, 0x68, 0x70, 0x61, 0x64, 0x10, 0xff, 0x01, 0x12, 0x0f, 0x0a, 0x0a, + 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x48, 0x75, 0x62, 0x10, 0x80, 0x02, 0x12, 0x0d, 0x0a, + 0x08, 0x44, 0x65, 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x10, 0x81, 0x02, 0x12, 0x0d, 0x0a, 0x08, + 0x44, 0x79, 0x73, 0x70, 0x61, 0x74, 0x63, 0x68, 0x10, 0x82, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x47, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x70, 0x69, 0x10, 0x83, 0x02, 0x12, 0x0c, 0x0a, + 0x07, 0x48, 0x61, 0x72, 0x76, 0x65, 0x73, 0x74, 0x10, 0x84, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x4d, + 0x6f, 0x6f, 0x73, 0x65, 0x6e, 0x64, 0x10, 0x85, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x4f, 0x70, 0x65, + 0x6e, 0x57, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, 0x10, 0x86, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x53, + 0x69, 0x74, 0x65, 0x6c, 0x65, 0x61, 0x66, 0x10, 0x87, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x71, + 0x75, 0x61, 0x72, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x10, 0x88, 0x02, 0x12, 0x0c, 0x0a, 0x07, + 0x46, 0x6c, 0x6f, 0x77, 0x46, 0x6c, 0x75, 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x4e, 0x69, + 0x6d, 0x62, 0x6c, 0x65, 0x10, 0x8a, 0x02, 0x12, 0x14, 0x0a, 0x0f, 0x4c, 0x65, 0x73, 0x73, 0x41, + 0x6e, 0x6e, 0x6f, 0x79, 0x69, 0x6e, 0x67, 0x43, 0x52, 0x4d, 0x10, 0x8b, 0x02, 0x12, 0x0c, 0x0a, + 0x07, 0x4e, 0x65, 0x74, 0x68, 0x75, 0x6e, 0x74, 0x10, 0x8c, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x41, + 0x70, 0x70, 0x74, 0x69, 0x76, 0x6f, 0x10, 0x8d, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x61, 0x70, + 0x73, 0x75, 0x6c, 0x65, 0x43, 0x52, 0x4d, 0x10, 0x8e, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x49, 0x6e, + 0x73, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x10, 0x8f, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x4b, 0x79, + 0x6c, 0x61, 0x73, 0x10, 0x90, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4f, 0x6e, 0x65, 0x70, 0x61, 0x67, + 0x65, 0x43, 0x52, 0x4d, 0x10, 0x91, 0x02, 0x12, 0x09, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x10, + 0x92, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x43, 0x52, + 0x4d, 0x10, 0x93, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x53, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x10, 0x94, 0x02, 0x12, 0x0c, + 0x0a, 0x07, 0x41, 0x69, 0x72, 0x73, 0x68, 0x69, 0x70, 0x10, 0x95, 0x02, 0x12, 0x0a, 0x0a, 0x05, + 0x41, 0x72, 0x74, 0x73, 0x79, 0x10, 0x96, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x59, 0x61, 0x6e, 0x64, + 0x65, 0x78, 0x10, 0x97, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x66, + 0x79, 0x10, 0x98, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x10, 0x99, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x45, 0x61, 0x73, 0x79, 0x49, 0x6e, 0x73, 0x69, 0x67, + 0x68, 0x74, 0x10, 0x9a, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x74, 0x68, 0x70, 0x6c, 0x6f, 0x72, + 0x65, 0x72, 0x10, 0x9b, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x45, 0x76, 0x65, 0x72, 0x68, 0x6f, 0x75, + 0x72, 0x10, 0x9c, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x75, 0x6c, 0x63, 0x72, 0x75, 0x6d, 0x10, + 0x9d, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x65, 0x6f, 0x49, 0x70, 0x69, 0x66, 0x69, 0x10, 0x9e, + 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x4a, 0x6f, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0x9f, 0x02, 0x12, + 0x0c, 0x0a, 0x07, 0x52, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x72, 0x10, 0xa0, 0x02, 0x12, 0x10, 0x0a, + 0x0b, 0x54, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x61, 0x70, 0x69, 0x10, 0xa1, 0x02, 0x12, + 0x0f, 0x0a, 0x0a, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x10, 0xa2, 0x02, + 0x12, 0x0b, 0x0a, 0x06, 0x56, 0x70, 0x6e, 0x61, 0x70, 0x69, 0x10, 0xa3, 0x02, 0x12, 0x0e, 0x0a, + 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xa4, 0x02, 0x12, 0x0b, 0x0a, + 0x06, 0x41, 0x70, 0x6f, 0x6c, 0x6c, 0x6f, 0x10, 0xa5, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x45, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x67, 0x6e, 0x10, 0xa6, 0x02, 0x12, 0x09, 0x0a, 0x04, 0x4a, 0x75, 0x72, + 0x6f, 0x10, 0xa7, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4b, 0x61, 0x72, 0x6d, 0x61, 0x43, 0x52, 0x4d, + 0x10, 0xa8, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x6c, 0x6f, 0x10, 0xa9, + 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x61, 0x6e, 0x64, 0x61, 0x64, 0x6f, 0x63, 0x10, 0xaa, 0x02, + 0x12, 0x0e, 0x0a, 0x09, 0x52, 0x65, 0x76, 0x61, 0x6d, 0x70, 0x43, 0x52, 0x4d, 0x10, 0xab, 0x02, + 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x61, 0x6c, 0x65, 0x73, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x10, + 0xac, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x6c, 0x63, 0x6f, 0x6e, 0x6f, 0x73, 0x74, 0x10, 0xad, + 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x42, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x10, 0xae, 0x02, 0x12, + 0x10, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x75, 0x77, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, 0x10, 0xaf, + 0x02, 0x12, 0x13, 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x72, 0x10, + 0xb0, 0x02, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x09, 0x0a, 0x04, 0x52, 0x61, 0x77, 0x67, 0x10, 0xb1, + 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x52, 0x69, 0x6f, 0x74, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x10, 0xb2, + 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x52, 0x6f, 0x6e, 0x69, 0x6e, 0x41, 0x70, 0x70, 0x10, 0xb3, 0x02, + 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x72, 0x6d, 0x67, 0x6c, 0x61, 0x73, 0x73, 0x10, 0xb4, + 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x6f, 0x6d, 0x74, 0x6f, 0x6d, 0x10, 0xb5, 0x02, 0x12, 0x0b, + 0x0a, 0x06, 0x54, 0x77, 0x69, 0x74, 0x63, 0x68, 0x10, 0xb6, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x44, + 0x6f, 0x63, 0x75, 0x6d, 0x6f, 0x10, 0xb7, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x77, 0x61, 0x79, 0x73, 0x10, 0xb8, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x56, 0x65, 0x65, 0x76, + 0x61, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x10, 0xb9, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x4b, 0x69, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x10, 0xba, 0x02, 0x12, 0x17, 0x0a, 0x12, 0x53, + 0x68, 0x6f, 0x70, 0x65, 0x65, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x10, 0xbb, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x54, 0x65, 0x61, 0x6d, 0x56, 0x69, 0x65, 0x77, + 0x65, 0x72, 0x10, 0xbc, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x75, 0x6c, 0x62, 0x75, 0x6c, 0x10, + 0xbd, 0x02, 0x12, 0x16, 0x0a, 0x11, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x52, 0x4d, 0x10, 0xbe, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x54, 0x65, + 0x61, 0x6d, 0x67, 0x61, 0x74, 0x65, 0x10, 0xbf, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x41, 0x78, 0x6f, + 0x6e, 0x61, 0x75, 0x74, 0x10, 0xc0, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x79, 0x6e, 0x74, 0x65, + 0x63, 0x10, 0xc1, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x63, 0x75, 0x65, 0x73, 0x10, + 0xc2, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x6b, 0x6c, 0x6f, 0x73, 0x65, 0x10, + 0xc3, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x70, 0x6c, 0x61, 0x6e, 0x10, + 0xc4, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x44, 0x6f, 0x74, 0x6d, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x10, + 0xc5, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x10, 0xc6, + 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x10, 0xc7, + 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x4b, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x10, 0xc8, 0x02, 0x12, + 0x0f, 0x0a, 0x0a, 0x4c, 0x65, 0x61, 0x64, 0x66, 0x65, 0x65, 0x64, 0x65, 0x72, 0x10, 0xc9, 0x02, + 0x12, 0x0a, 0x0a, 0x05, 0x52, 0x61, 0x76, 0x65, 0x6e, 0x10, 0xca, 0x02, 0x12, 0x10, 0x0a, 0x0b, + 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x61, 0x63, 0x68, 0x10, 0xcb, 0x02, 0x12, 0x0b, + 0x0a, 0x06, 0x55, 0x70, 0x6c, 0x65, 0x61, 0x64, 0x10, 0xcc, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x42, + 0x72, 0x61, 0x6e, 0x64, 0x66, 0x65, 0x74, 0x63, 0x68, 0x10, 0xcd, 0x02, 0x12, 0x0d, 0x0a, 0x08, + 0x43, 0x6c, 0x65, 0x61, 0x72, 0x62, 0x69, 0x74, 0x10, 0xce, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x43, + 0x72, 0x6f, 0x77, 0x64, 0x69, 0x6e, 0x10, 0xcf, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x61, 0x70, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x10, 0xd0, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4e, 0x6f, 0x74, 0x69, + 0x63, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x10, 0xd1, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x4f, 0x6e, 0x62, + 0x75, 0x6b, 0x61, 0x10, 0xd2, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x6f, 0x64, 0x6f, 0x69, 0x73, + 0x74, 0x10, 0xd3, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x72, 0x79, 0x63, 0x68, 0x69, + 0x65, 0x66, 0x10, 0xd4, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x49, + 0x6e, 0x10, 0xd5, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x59, 0x6f, 0x75, 0x53, 0x69, 0x67, 0x6e, 0x10, + 0xd6, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x10, 0xd7, 0x02, 0x12, + 0x0d, 0x0a, 0x08, 0x54, 0x65, 0x6c, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x10, 0xd8, 0x02, 0x12, 0x10, + 0x0a, 0x0b, 0x53, 0x70, 0x6f, 0x6f, 0x6e, 0x61, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x10, 0xd9, 0x02, + 0x12, 0x11, 0x0a, 0x0c, 0x41, 0x65, 0x72, 0x69, 0x73, 0x77, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, + 0x10, 0xda, 0x02, 0x12, 0x11, 0x0a, 0x0c, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x76, 0x61, 0x6e, 0x74, + 0x61, 0x67, 0x65, 0x10, 0xdb, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x6d, 0x67, 0x75, 0x72, 0x10, + 0xdc, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x6d, 0x61, 0x67, 0x67, 0x61, 0x10, 0xdd, 0x02, 0x12, + 0x0b, 0x0a, 0x06, 0x53, 0x4d, 0x53, 0x41, 0x70, 0x69, 0x10, 0xde, 0x02, 0x12, 0x11, 0x0a, 0x0c, + 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0xdf, 0x02, 0x12, + 0x12, 0x0a, 0x09, 0x42, 0x6c, 0x61, 0x62, 0x6c, 0x61, 0x62, 0x75, 0x73, 0x10, 0xe0, 0x02, 0x1a, + 0x02, 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x41, 0x70, 0x69, 0x10, + 0xe1, 0x02, 0x12, 0x12, 0x0a, 0x0d, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x10, 0xe2, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x48, 0x74, 0x6d, 0x6c, 0x32, 0x50, + 0x64, 0x66, 0x10, 0xe3, 0x02, 0x12, 0x12, 0x0a, 0x0d, 0x49, 0x50, 0x47, 0x65, 0x6f, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0xe4, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x4f, 0x77, 0x6c, + 0x62, 0x6f, 0x74, 0x10, 0xe5, 0x02, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x6d, + 0x65, 0x72, 0x73, 0x69, 0x76, 0x65, 0x10, 0xe6, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x79, 0x6e, + 0x61, 0x6c, 0x69, 0x73, 0x74, 0x10, 0xe7, 0x02, 0x12, 0x14, 0x0a, 0x0f, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x41, 0x50, 0x49, 0x10, 0xe8, 0x02, 0x12, 0x0f, + 0x0a, 0x0a, 0x48, 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x79, 0x41, 0x50, 0x49, 0x10, 0xe9, 0x02, 0x12, + 0x0a, 0x0a, 0x05, 0x49, 0x70, 0x61, 0x70, 0x69, 0x10, 0xea, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x4d, + 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xeb, 0x02, 0x12, 0x10, 0x0a, + 0x0b, 0x4e, 0x75, 0x74, 0x72, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x78, 0x10, 0xec, 0x02, 0x12, + 0x0a, 0x0a, 0x05, 0x53, 0x77, 0x65, 0x6c, 0x6c, 0x10, 0xed, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x43, + 0x6c, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x10, 0xee, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x4e, 0x69, 0x74, 0x72, 0x6f, 0x10, + 0xef, 0x02, 0x12, 0x08, 0x0a, 0x03, 0x52, 0x65, 0x76, 0x10, 0xf0, 0x02, 0x12, 0x0d, 0x0a, 0x08, + 0x52, 0x75, 0x6e, 0x52, 0x75, 0x6e, 0x49, 0x74, 0x10, 0xf1, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x54, + 0x79, 0x70, 0x65, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0xf2, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x69, + 0x78, 0x70, 0x61, 0x6e, 0x65, 0x6c, 0x10, 0xf3, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x72, 0x61, + 0x64, 0x69, 0x65, 0x72, 0x10, 0xf4, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x10, 0xf5, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x56, 0x6f, 0x75, 0x63, 0x68, 0x65, + 0x72, 0x79, 0x10, 0xf6, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x41, 0x6c, 0x65, 0x67, 0x72, 0x61, 0x10, + 0xf7, 0x02, 0x12, 0x09, 0x0a, 0x04, 0x41, 0x75, 0x64, 0x64, 0x10, 0xf8, 0x02, 0x12, 0x10, 0x0a, + 0x0b, 0x42, 0x61, 0x72, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x10, 0xf9, 0x02, 0x12, + 0x0c, 0x0a, 0x07, 0x43, 0x6f, 0x69, 0x6e, 0x6c, 0x69, 0x62, 0x10, 0xfa, 0x02, 0x12, 0x15, 0x0a, + 0x10, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x73, 0x41, 0x50, + 0x49, 0x10, 0xfb, 0x02, 0x12, 0x12, 0x0a, 0x0d, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x53, 0x63, 0x6f, 0x6f, 0x70, 0x10, 0xfc, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x46, 0x58, 0x4d, 0x61, + 0x72, 0x6b, 0x65, 0x74, 0x10, 0xfd, 0x02, 0x12, 0x12, 0x0a, 0x0d, 0x43, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x10, 0xfe, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x47, + 0x65, 0x74, 0x47, 0x65, 0x6f, 0x41, 0x50, 0x49, 0x10, 0xff, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x41, + 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x10, 0x80, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x42, 0x69, + 0x6c, 0x6c, 0x6f, 0x6d, 0x61, 0x74, 0x10, 0x81, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x6f, 0x76, + 0x69, 0x63, 0x6f, 0x10, 0x82, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x69, 0x74, 0x62, 0x61, 0x72, + 0x10, 0x83, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x42, 0x75, 0x67, 0x73, 0x6e, 0x61, 0x67, 0x10, 0x84, + 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x41, 0x49, 0x10, + 0x85, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x41, 0x64, 0x61, 0x66, 0x72, 0x75, 0x69, 0x74, 0x49, 0x4f, + 0x10, 0x86, 0x03, 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x70, 0x69, 0x66, 0x79, 0x10, 0x87, 0x03, 0x12, + 0x0e, 0x0a, 0x09, 0x43, 0x6f, 0x69, 0x6e, 0x47, 0x65, 0x63, 0x6b, 0x6f, 0x10, 0x88, 0x03, 0x12, + 0x12, 0x0a, 0x0d, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, + 0x10, 0x89, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x75, 0x6c, 0x6c, 0x73, 0x74, 0x6f, 0x72, 0x79, + 0x10, 0x8a, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x53, 0x69, 0x67, 0x6e, + 0x10, 0x8b, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x6f, 0x79, 0x76, 0x65, 0x72, 0x73, 0x65, 0x10, + 0x8c, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x43, 0x6f, 0x72, 0x65, 0x10, 0x8d, 0x03, + 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x61, 0x75, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x73, 0x10, 0x8e, 0x03, + 0x12, 0x0f, 0x0a, 0x0a, 0x41, 0x6c, 0x69, 0x65, 0x6e, 0x56, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x8f, + 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x70, 0x69, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x10, 0x91, 0x03, + 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6f, 0x69, 0x6e, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x10, 0x92, 0x03, + 0x12, 0x10, 0x0a, 0x0b, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x50, 0x49, 0x10, + 0x93, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x47, 0x6f, 0x76, 0x10, 0x94, 0x03, + 0x12, 0x0b, 0x0a, 0x06, 0x45, 0x6e, 0x69, 0x67, 0x6d, 0x61, 0x10, 0x95, 0x03, 0x12, 0x1a, 0x0a, + 0x15, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x69, + 0x6e, 0x67, 0x50, 0x72, 0x65, 0x70, 0x10, 0x96, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x65, 0x6f, + 0x63, 0x6f, 0x64, 0x69, 0x6f, 0x10, 0x97, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x48, 0x65, 0x72, 0x65, + 0x41, 0x50, 0x49, 0x10, 0x98, 0x03, 0x12, 0x13, 0x0a, 0x0a, 0x4d, 0x61, 0x63, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x10, 0x99, 0x03, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x4f, + 0x4f, 0x50, 0x53, 0x70, 0x61, 0x6d, 0x10, 0x9a, 0x03, 0x12, 0x10, 0x0a, 0x0b, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x49, 0x4f, 0x10, 0x9b, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x53, + 0x63, 0x72, 0x61, 0x70, 0x65, 0x72, 0x41, 0x50, 0x49, 0x10, 0x9c, 0x03, 0x12, 0x13, 0x0a, 0x0e, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x54, 0x72, 0x61, 0x69, 0x6c, 0x73, 0x10, 0x9d, + 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x54, 0x6f, 0x6d, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x49, 0x4f, 0x10, + 0x9e, 0x03, 0x12, 0x13, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x10, 0x9f, 0x03, 0x12, 0x11, 0x0a, 0x0c, 0x46, 0x61, 0x63, 0x65, 0x50, + 0x6c, 0x75, 0x73, 0x50, 0x6c, 0x75, 0x73, 0x10, 0xa0, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x6f, + 0x69, 0x63, 0x65, 0x67, 0x61, 0x69, 0x6e, 0x10, 0xa1, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x65, + 0x65, 0x70, 0x67, 0x72, 0x61, 0x6d, 0x10, 0xa2, 0x03, 0x12, 0x13, 0x0a, 0x0e, 0x56, 0x69, 0x73, + 0x75, 0x61, 0x6c, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x10, 0xa3, 0x03, 0x12, 0x0c, + 0x0a, 0x07, 0x46, 0x69, 0x6e, 0x6e, 0x68, 0x75, 0x62, 0x10, 0xa4, 0x03, 0x12, 0x0b, 0x0a, 0x06, + 0x54, 0x69, 0x69, 0x6e, 0x67, 0x6f, 0x10, 0xa5, 0x03, 0x12, 0x10, 0x0a, 0x0b, 0x52, 0x69, 0x6e, + 0x67, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x10, 0xa6, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x46, + 0x69, 0x6e, 0x61, 0x67, 0x65, 0x10, 0xa7, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x45, 0x64, 0x61, 0x6d, + 0x61, 0x6d, 0x10, 0xa8, 0x03, 0x12, 0x10, 0x0a, 0x0b, 0x48, 0x79, 0x70, 0x65, 0x41, 0x75, 0x64, + 0x69, 0x74, 0x6f, 0x72, 0x10, 0xa9, 0x03, 0x12, 0x0a, 0x0a, 0x05, 0x47, 0x65, 0x6e, 0x67, 0x6f, + 0x10, 0xaa, 0x03, 0x12, 0x0a, 0x0a, 0x05, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x10, 0xab, 0x03, 0x12, + 0x0e, 0x0a, 0x09, 0x46, 0x6c, 0x65, 0x65, 0x74, 0x62, 0x61, 0x73, 0x65, 0x10, 0xac, 0x03, 0x12, + 0x0b, 0x0a, 0x06, 0x42, 0x75, 0x62, 0x62, 0x6c, 0x65, 0x10, 0xad, 0x03, 0x12, 0x0f, 0x0a, 0x0a, + 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x62, 0x65, 0x61, 0x72, 0x10, 0xae, 0x03, 0x12, 0x0b, 0x0a, + 0x06, 0x41, 0x64, 0x7a, 0x75, 0x6e, 0x61, 0x10, 0xaf, 0x03, 0x12, 0x13, 0x0a, 0x0e, 0x42, 0x69, + 0x74, 0x63, 0x6f, 0x69, 0x6e, 0x41, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x10, 0xb0, 0x03, 0x12, + 0x0f, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x65, 0x4a, 0x53, 0x10, 0xb1, 0x03, + 0x12, 0x13, 0x0a, 0x0e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, + 0x67, 0x65, 0x10, 0xb2, 0x03, 0x12, 0x11, 0x0a, 0x08, 0x46, 0x61, 0x6b, 0x65, 0x4a, 0x53, 0x4f, + 0x4e, 0x10, 0xb3, 0x03, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x68, 0x6f, 0x70, 0x70, 0x65, 0x72, 0x10, 0xb4, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x65, + 0x78, 0x69, 0x67, 0x72, 0x61, 0x6d, 0x10, 0xb5, 0x03, 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x69, 0x6e, + 0x6b, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x10, 0xb6, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x4e, + 0x75, 0x6d, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x10, 0xb7, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x50, + 0x72, 0x6f, 0x78, 0x79, 0x43, 0x72, 0x61, 0x77, 0x6c, 0x10, 0xb8, 0x03, 0x12, 0x0f, 0x0a, 0x0a, + 0x5a, 0x69, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x49, 0x10, 0xb9, 0x03, 0x12, 0x0e, 0x0a, + 0x09, 0x43, 0x6f, 0x6d, 0x65, 0x74, 0x63, 0x68, 0x61, 0x74, 0x10, 0xba, 0x03, 0x12, 0x0b, 0x0a, + 0x06, 0x4b, 0x65, 0x79, 0x67, 0x65, 0x6e, 0x10, 0xbb, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x69, + 0x78, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x10, 0xbc, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x61, 0x74, + 0x75, 0x6d, 0x49, 0x4f, 0x10, 0xbd, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x10, 0xbe, 0x03, 0x12, 0x0f, 0x0a, 0x06, 0x4c, 0x61, 0x73, 0x74, 0x66, 0x6d, 0x10, + 0xbf, 0x03, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x42, 0x72, 0x6f, 0x77, 0x73, 0x68, + 0x6f, 0x74, 0x10, 0xc0, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x4a, 0x53, 0x4f, 0x4e, 0x62, 0x69, 0x6e, + 0x10, 0xc1, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x51, 0x10, 0xc2, 0x03, 0x12, 0x12, 0x0a, 0x0d, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x73, 0x68, + 0x6f, 0x74, 0x41, 0x50, 0x49, 0x10, 0xc3, 0x03, 0x12, 0x11, 0x0a, 0x0c, 0x57, 0x65, 0x61, 0x74, + 0x68, 0x65, 0x72, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xc4, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x41, + 0x6d, 0x61, 0x64, 0x65, 0x75, 0x73, 0x10, 0xc5, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x46, 0x6f, 0x75, + 0x72, 0x53, 0x71, 0x75, 0x61, 0x72, 0x65, 0x10, 0xc6, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x46, 0x6c, + 0x69, 0x63, 0x6b, 0x72, 0x10, 0xc7, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x48, 0x65, 0x6c, 0x70, 0x10, 0xc8, 0x03, 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x6d, 0x62, 0x65, 0x65, + 0x10, 0xc9, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x70, 0x69, 0x32, 0x43, 0x61, 0x72, 0x74, 0x10, + 0xca, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x48, 0x79, 0x70, 0x65, 0x72, 0x74, 0x72, 0x61, 0x63, 0x6b, + 0x10, 0xcb, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x4b, 0x61, 0x6b, 0x61, 0x6f, 0x54, 0x61, 0x6c, 0x6b, + 0x10, 0xcc, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x52, 0x69, 0x74, 0x65, 0x4b, 0x69, 0x74, 0x10, 0xcd, + 0x03, 0x12, 0x11, 0x0a, 0x0c, 0x53, 0x68, 0x75, 0x74, 0x74, 0x65, 0x72, 0x73, 0x74, 0x6f, 0x63, + 0x6b, 0x10, 0xce, 0x03, 0x12, 0x12, 0x0a, 0x09, 0x54, 0x65, 0x78, 0x74, 0x32, 0x44, 0x61, 0x74, + 0x61, 0x10, 0xcf, 0x03, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x13, 0x0a, 0x0e, 0x59, 0x6f, 0x75, 0x4e, + 0x65, 0x65, 0x64, 0x41, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x10, 0xd0, 0x03, 0x12, 0x0c, 0x0a, + 0x07, 0x43, 0x72, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x10, 0xd1, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xd2, 0x03, 0x12, 0x0a, 0x0a, 0x05, 0x47, + 0x79, 0x61, 0x7a, 0x6f, 0x10, 0xd3, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x4d, 0x61, 0x76, 0x65, 0x6e, + 0x6c, 0x69, 0x6e, 0x6b, 0x10, 0xd4, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x68, 0x65, 0x65, 0x74, + 0x79, 0x10, 0xd5, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x6d, 0x6f, + 0x6e, 0x6b, 0x10, 0xd6, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x64, 0x61, + 0x74, 0x61, 0x10, 0xd7, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x55, 0x6e, 0x73, 0x70, 0x6c, 0x61, 0x73, + 0x68, 0x10, 0xd8, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x6c, 0x6c, 0x73, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x10, 0xd9, 0x03, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x61, 0x6c, 0x6f, 0x72, 0x69, 0x65, 0x4e, + 0x69, 0x6e, 0x6a, 0x61, 0x10, 0xda, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x57, 0x61, 0x6c, 0x6b, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x10, 0xdb, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x61, 0x76, + 0x61, 0x10, 0xdc, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x69, 0x63, 0x65, 0x72, 0x6f, 0x10, 0xdd, + 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x49, 0x50, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x10, 0xde, + 0x03, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x44, 0x6f, 0x74, + 0x73, 0x10, 0xdf, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x52, 0x6f, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x10, + 0xe0, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x4d, 0x61, 0x69, 0x6c, 0x73, 0x61, 0x63, 0x10, 0xe1, 0x03, + 0x12, 0x0a, 0x0a, 0x05, 0x57, 0x68, 0x6f, 0x78, 0x79, 0x10, 0xe2, 0x03, 0x12, 0x11, 0x0a, 0x0c, + 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x57, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, 0x10, 0xe3, 0x03, 0x12, + 0x0e, 0x0a, 0x09, 0x41, 0x70, 0x69, 0x46, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x10, 0xe4, 0x03, 0x12, + 0x0b, 0x0a, 0x06, 0x41, 0x79, 0x6c, 0x69, 0x65, 0x6e, 0x10, 0xe5, 0x03, 0x12, 0x0c, 0x0a, 0x07, + 0x47, 0x65, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x10, 0xe6, 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x63, + 0x6f, 0x6e, 0x46, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x10, 0xe7, 0x03, 0x12, 0x0e, 0x0a, 0x05, 0x49, + 0x70, 0x69, 0x66, 0x79, 0x10, 0xe8, 0x03, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x4c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x10, 0xe9, 0x03, 0x12, + 0x08, 0x0a, 0x03, 0x4c, 0x6f, 0x62, 0x10, 0xea, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x4f, 0x6e, 0x57, + 0x61, 0x74, 0x65, 0x72, 0x49, 0x4f, 0x10, 0xeb, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x61, 0x73, + 0x74, 0x65, 0x62, 0x69, 0x6e, 0x10, 0xec, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x64, 0x66, 0x4c, + 0x61, 0x79, 0x65, 0x72, 0x10, 0xed, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x69, 0x78, 0x61, 0x62, + 0x61, 0x79, 0x10, 0xee, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x10, + 0xef, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x56, 0x61, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x10, 0xf0, + 0x03, 0x12, 0x0f, 0x0a, 0x0a, 0x56, 0x69, 0x72, 0x75, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x10, + 0xf1, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x69, 0x72, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x10, + 0xf2, 0x03, 0x12, 0x13, 0x0a, 0x0e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x66, 0x72, + 0x65, 0x61, 0x6b, 0x73, 0x10, 0xf3, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x75, 0x66, 0x66, 0x65, + 0x6c, 0x10, 0xf4, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x46, 0x6c, 0x61, 0x74, 0x49, 0x4f, 0x10, 0xf5, + 0x03, 0x12, 0x08, 0x0a, 0x03, 0x4d, 0x33, 0x6f, 0x10, 0xf6, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x4d, + 0x65, 0x73, 0x69, 0x62, 0x6f, 0x10, 0xf7, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x4f, 0x70, 0x65, 0x6e, + 0x75, 0x76, 0x10, 0xf8, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x6e, 0x69, 0x70, 0x63, 0x61, 0x72, + 0x74, 0x10, 0xf9, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x42, 0x65, 0x73, 0x74, 0x74, 0x69, 0x6d, 0x65, + 0x10, 0xfa, 0x03, 0x12, 0x10, 0x0a, 0x0b, 0x48, 0x61, 0x70, 0x70, 0x79, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x10, 0xfb, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x69, 0x74, + 0x79, 0x10, 0xfc, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x6d, 0x70, 0x61, 0x6c, 0x61, 0x10, 0xfd, + 0x03, 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, + 0x10, 0xfe, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x6f, 0x50, 0x69, 0x6c, 0x6f, 0x74, + 0x10, 0xff, 0x03, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x69, 0x74, 0x6d, 0x65, 0x78, 0x10, 0x80, 0x04, + 0x12, 0x0d, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x44, 0x6f, 0x63, 0x10, 0x81, 0x04, 0x12, + 0x0c, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x72, 0x69, 0x10, 0x82, 0x04, 0x12, 0x0d, 0x0a, + 0x08, 0x50, 0x64, 0x66, 0x53, 0x68, 0x69, 0x66, 0x74, 0x10, 0x83, 0x04, 0x12, 0x0d, 0x0a, 0x08, + 0x50, 0x6f, 0x6c, 0x6f, 0x6e, 0x69, 0x65, 0x78, 0x10, 0x84, 0x04, 0x12, 0x19, 0x0a, 0x14, 0x52, + 0x65, 0x73, 0x74, 0x70, 0x61, 0x63, 0x6b, 0x48, 0x74, 0x6d, 0x6c, 0x54, 0x6f, 0x50, 0x64, 0x66, + 0x41, 0x50, 0x49, 0x10, 0x85, 0x04, 0x12, 0x1a, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x74, 0x70, 0x61, + 0x63, 0x6b, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x73, 0x68, 0x6f, 0x74, 0x41, 0x50, 0x49, 0x10, + 0x86, 0x04, 0x12, 0x16, 0x0a, 0x11, 0x53, 0x68, 0x75, 0x74, 0x74, 0x65, 0x72, 0x73, 0x74, 0x6f, + 0x63, 0x6b, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x10, 0x87, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x6b, + 0x79, 0x42, 0x69, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x10, 0x88, 0x04, 0x12, 0x0e, 0x0a, 0x09, + 0x41, 0x62, 0x75, 0x73, 0x65, 0x49, 0x50, 0x44, 0x42, 0x10, 0x89, 0x04, 0x12, 0x10, 0x0a, 0x0b, + 0x41, 0x6c, 0x65, 0x74, 0x68, 0x65, 0x69, 0x61, 0x41, 0x70, 0x69, 0x10, 0x8a, 0x04, 0x12, 0x0c, + 0x0a, 0x07, 0x42, 0x6c, 0x69, 0x74, 0x41, 0x70, 0x70, 0x10, 0x8b, 0x04, 0x12, 0x0b, 0x0a, 0x06, + 0x43, 0x65, 0x6e, 0x73, 0x79, 0x73, 0x10, 0x8c, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x43, 0x6c, 0x6f, + 0x76, 0x65, 0x72, 0x6c, 0x79, 0x10, 0x8d, 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x72, 0x79, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x10, 0x8e, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x46, + 0x69, 0x6c, 0x65, 0x49, 0x4f, 0x10, 0x8f, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x41, 0x70, 0x69, 0x10, 0x90, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x65, 0x6f, 0x61, + 0x70, 0x69, 0x66, 0x79, 0x10, 0x91, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x50, 0x69, 0x6e, 0x66, + 0x6f, 0x44, 0x42, 0x10, 0x92, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x53, + 0x74, 0x61, 0x63, 0x6b, 0x10, 0x93, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x4e, 0x61, 0x73, 0x64, 0x61, + 0x71, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x6e, 0x6b, 0x10, 0x94, 0x04, 0x12, 0x11, 0x0a, 0x0c, + 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x10, 0x95, 0x04, 0x12, + 0x0d, 0x0a, 0x08, 0x50, 0x61, 0x79, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x10, 0x96, 0x04, 0x12, 0x12, + 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, + 0x97, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x52, 0x65, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x6c, 0x79, 0x10, + 0x98, 0x04, 0x12, 0x14, 0x0a, 0x0f, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x73, 0x68, 0x6f, 0x74, + 0x4c, 0x61, 0x79, 0x65, 0x72, 0x10, 0x99, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x74, 0x79, 0x74, + 0x63, 0x68, 0x10, 0x9a, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x55, 0x6e, 0x70, 0x6c, 0x75, 0x67, 0x67, + 0x10, 0x9b, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x55, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x10, 0x9c, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x63, 0x6b, 0x10, 0x9d, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x47, 0x65, 0x6f, 0x63, 0x6f, 0x64, 0x69, + 0x66, 0x79, 0x10, 0x9e, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x73, 0x63, 0x61, 0x74, + 0x63, 0x68, 0x65, 0x72, 0x10, 0x9f, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x4e, 0x69, 0x63, 0x65, 0x72, + 0x65, 0x70, 0x6c, 0x79, 0x10, 0xa0, 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x61, 0x72, 0x74, 0x6e, + 0x65, 0x72, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xa1, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x34, 0x6d, 0x65, 0x10, 0xa2, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x63, 0x72, + 0x61, 0x70, 0x65, 0x6f, 0x77, 0x6c, 0x10, 0xa3, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x63, 0x72, + 0x61, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x67, 0x10, 0xa4, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6b, 0x10, 0xa5, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x69, + 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x10, 0xa6, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x57, 0x65, 0x62, 0x73, + 0x63, 0x72, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x10, 0xa7, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x5a, 0x65, + 0x6e, 0x73, 0x63, 0x72, 0x61, 0x70, 0x65, 0x10, 0xa8, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x5a, 0x65, + 0x6e, 0x73, 0x65, 0x72, 0x70, 0x10, 0xa9, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x6f, 0x69, 0x6e, + 0x41, 0x70, 0x69, 0x10, 0xaa, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x47, 0x69, 0x74, 0x74, 0x65, 0x72, + 0x10, 0xab, 0x04, 0x12, 0x09, 0x0a, 0x04, 0x48, 0x6f, 0x73, 0x74, 0x10, 0xac, 0x04, 0x12, 0x0d, + 0x0a, 0x08, 0x49, 0x65, 0x78, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x10, 0xad, 0x04, 0x12, 0x0d, 0x0a, + 0x08, 0x52, 0x65, 0x73, 0x74, 0x70, 0x61, 0x63, 0x6b, 0x10, 0xae, 0x04, 0x12, 0x0f, 0x0a, 0x0a, + 0x53, 0x63, 0x72, 0x61, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x78, 0x10, 0xaf, 0x04, 0x12, 0x10, 0x0a, + 0x0b, 0x53, 0x63, 0x72, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x74, 0x10, 0xb0, 0x04, 0x12, + 0x0e, 0x0a, 0x09, 0x53, 0x65, 0x72, 0x70, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xb1, 0x04, 0x12, + 0x12, 0x0a, 0x0d, 0x53, 0x6d, 0x61, 0x72, 0x74, 0x79, 0x53, 0x74, 0x72, 0x65, 0x65, 0x74, 0x73, + 0x10, 0xb2, 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x10, 0xb3, 0x04, 0x12, 0x12, 0x0a, 0x0d, 0x41, 0x76, 0x69, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xb4, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x42, 0x6f, + 0x6d, 0x62, 0x42, 0x6f, 0x6d, 0x62, 0x10, 0xb5, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x64, 0x69, 0x74, 0x69, 0x65, 0x73, 0x10, 0xb6, 0x04, 0x12, 0x0a, 0x0a, 0x05, 0x44, + 0x66, 0x75, 0x73, 0x65, 0x10, 0xb7, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x45, 0x64, 0x65, 0x6e, 0x41, + 0x49, 0x10, 0xb8, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x47, 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x6f, 0x64, + 0x65, 0x10, 0xb9, 0x04, 0x12, 0x09, 0x0a, 0x04, 0x47, 0x75, 0x72, 0x75, 0x10, 0xba, 0x04, 0x12, + 0x09, 0x0a, 0x04, 0x48, 0x69, 0x76, 0x65, 0x10, 0xbb, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x48, 0x69, + 0x76, 0x65, 0x61, 0x67, 0x65, 0x10, 0xbc, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x4b, 0x69, 0x63, 0x6b, + 0x62, 0x6f, 0x78, 0x10, 0xbd, 0x04, 0x12, 0x11, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x62, 0x61, + 0x73, 0x65, 0x10, 0xbe, 0x04, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x50, 0x6f, 0x73, + 0x74, 0x61, 0x67, 0x65, 0x41, 0x70, 0x70, 0x10, 0xbf, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x50, 0x75, + 0x72, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x10, 0xc0, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x51, 0x75, + 0x62, 0x6f, 0x6c, 0x65, 0x10, 0xc1, 0x04, 0x12, 0x14, 0x0a, 0x0f, 0x43, 0x61, 0x72, 0x62, 0x6f, + 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x10, 0xc2, 0x04, 0x12, 0x0d, 0x0a, + 0x08, 0x49, 0x6e, 0x74, 0x72, 0x69, 0x6e, 0x69, 0x6f, 0x10, 0xc3, 0x04, 0x12, 0x15, 0x0a, 0x0c, + 0x51, 0x75, 0x69, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x10, 0xc4, 0x04, 0x1a, + 0x02, 0x08, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x63, 0x72, 0x61, 0x70, 0x65, 0x53, 0x74, 0x61, + 0x63, 0x6b, 0x10, 0xc5, 0x04, 0x12, 0x19, 0x0a, 0x14, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x63, + 0x61, 0x6c, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x41, 0x70, 0x69, 0x10, 0xc6, 0x04, + 0x12, 0x0c, 0x0a, 0x07, 0x55, 0x72, 0x6c, 0x73, 0x63, 0x61, 0x6e, 0x10, 0xc7, 0x04, 0x12, 0x0e, + 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x41, 0x70, 0x69, 0x49, 0x4f, 0x10, 0xc8, 0x04, 0x12, 0x0c, + 0x0a, 0x07, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x43, 0x4f, 0x10, 0xc9, 0x04, 0x12, 0x08, 0x0a, 0x03, + 0x54, 0x4c, 0x79, 0x10, 0xca, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, + 0x75, 0x74, 0x10, 0xcb, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x66, 0x6f, 0x6c, 0x6c, + 0x6f, 0x77, 0x10, 0xcc, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x69, 0x66, + 0x69, 0x63, 0x10, 0xcd, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x46, 0x65, 0x65, 0x64, 0x6c, 0x79, 0x10, + 0xce, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x74, 0x69, 0x74, 0x63, 0x68, 0x64, 0x61, 0x74, 0x61, + 0x10, 0xcf, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x46, 0x65, 0x74, 0x63, 0x68, 0x72, 0x73, 0x73, 0x10, + 0xd0, 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x67, 0x65, 0x6e, 0x69, + 0x75, 0x73, 0x10, 0xd1, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x69, 0x74, 0x10, 0xd2, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, + 0x7a, 0x65, 0x6c, 0x79, 0x10, 0xd3, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x4f, 0x63, 0x72, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x10, 0xd4, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x57, 0x65, 0x61, 0x74, 0x68, 0x65, + 0x72, 0x42, 0x69, 0x74, 0x10, 0xd5, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x42, 0x75, 0x64, 0x64, 0x79, + 0x4e, 0x53, 0x10, 0xd6, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x5a, 0x69, 0x70, 0x41, 0x50, 0x49, 0x10, + 0xd7, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x5a, 0x69, 0x70, 0x42, 0x6f, 0x6f, 0x6b, 0x73, 0x10, 0xd8, + 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x4f, 0x6e, 0x65, 0x64, 0x65, 0x73, 0x6b, 0x10, 0xd9, 0x04, 0x12, + 0x0c, 0x0a, 0x07, 0x42, 0x75, 0x67, 0x68, 0x65, 0x72, 0x64, 0x10, 0xda, 0x04, 0x12, 0x0f, 0x0a, + 0x0a, 0x42, 0x6c, 0x61, 0x7a, 0x65, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x10, 0xdb, 0x04, 0x12, 0x0d, + 0x0a, 0x08, 0x41, 0x75, 0x74, 0x6f, 0x64, 0x65, 0x73, 0x6b, 0x10, 0xdc, 0x04, 0x12, 0x08, 0x0a, + 0x03, 0x54, 0x72, 0x75, 0x10, 0xdd, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x55, 0x6e, 0x69, 0x66, 0x79, + 0x49, 0x44, 0x10, 0xde, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x72, 0x69, 0x6d, 0x62, 0x6c, 0x65, + 0x10, 0xdf, 0x04, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x6d, 0x6f, 0x6f, 0x63, 0x68, 0x10, 0xe0, 0x04, + 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x65, 0x6d, 0x61, 0x70, 0x68, 0x6f, 0x72, 0x65, 0x10, 0xe1, 0x04, + 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x65, 0x6c, 0x6e, 0x79, 0x78, 0x10, 0xe2, 0x04, 0x12, 0x0f, 0x0a, + 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x77, 0x69, 0x72, 0x65, 0x10, 0xe3, 0x04, 0x12, 0x0e, + 0x0a, 0x09, 0x54, 0x65, 0x78, 0x74, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x10, 0xe4, 0x04, 0x12, 0x0e, + 0x0a, 0x09, 0x53, 0x65, 0x72, 0x70, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x10, 0xe5, 0x04, 0x12, 0x0b, + 0x0a, 0x06, 0x50, 0x6c, 0x61, 0x6e, 0x79, 0x6f, 0x10, 0xe6, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x53, + 0x69, 0x6d, 0x70, 0x6c, 0x79, 0x62, 0x6f, 0x6f, 0x6b, 0x10, 0xe7, 0x04, 0x12, 0x09, 0x0a, 0x04, + 0x56, 0x79, 0x74, 0x65, 0x10, 0xe8, 0x04, 0x12, 0x0a, 0x0a, 0x05, 0x4e, 0x79, 0x6c, 0x61, 0x73, + 0x10, 0xe9, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x71, 0x75, 0x61, 0x72, 0x65, 0x75, 0x70, 0x10, + 0xea, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x44, 0x61, 0x6e, 0x64, 0x65, 0x6c, 0x69, 0x6f, 0x6e, 0x10, + 0xeb, 0x04, 0x12, 0x11, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x46, 0x69, 0x72, 0x65, 0x10, 0xec, + 0x04, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x65, 0x65, 0x70, 0x41, 0x49, 0x10, + 0xed, 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x4d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x10, 0xee, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x4e, 0x65, 0x75, 0x74, 0x72, 0x69, 0x6e, + 0x6f, 0x41, 0x70, 0x69, 0x10, 0xef, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x63, 0x6f, 0x76, 0x65, 0x10, 0xf0, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x53, 0x68, 0x69, 0x70, 0x64, + 0x61, 0x79, 0x10, 0xf1, 0x04, 0x12, 0x12, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x10, 0xf2, 0x04, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x18, 0x0a, 0x13, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, + 0x10, 0xf3, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x54, 0x65, 0x61, 0x6d, 0x77, 0x6f, 0x72, 0x6b, 0x43, + 0x52, 0x4d, 0x10, 0xf4, 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x65, 0x61, 0x6d, 0x77, 0x6f, 0x72, + 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x10, 0xf5, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x65, 0x61, 0x6d, + 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x10, 0xf6, 0x04, 0x12, 0x0f, 0x0a, + 0x0a, 0x54, 0x68, 0x65, 0x4f, 0x64, 0x64, 0x73, 0x41, 0x70, 0x69, 0x10, 0xf7, 0x04, 0x12, 0x0b, + 0x0a, 0x06, 0x41, 0x70, 0x61, 0x63, 0x74, 0x61, 0x10, 0xf8, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x47, + 0x65, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x10, 0xf9, 0x04, 0x12, 0x0e, 0x0a, 0x05, + 0x48, 0x61, 0x70, 0x70, 0x69, 0x10, 0xfa, 0x04, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0a, 0x0a, 0x05, + 0x4f, 0x61, 0x6e, 0x64, 0x61, 0x10, 0xfb, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x61, 0x73, 0x74, + 0x46, 0x6f, 0x72, 0x65, 0x78, 0x10, 0xfc, 0x04, 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x50, 0x49, 0x4d, + 0x61, 0x74, 0x69, 0x63, 0x10, 0xfd, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x45, 0x79, 0x65, 0x10, 0xfe, 0x04, 0x12, 0x15, 0x0a, 0x10, 0x45, 0x61, 0x67, 0x6c, + 0x65, 0x45, 0x79, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x10, 0xff, 0x04, 0x12, + 0x11, 0x0a, 0x0c, 0x54, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x45, 0x79, 0x65, 0x73, 0x10, + 0x80, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x50, 0x44, 0x46, 0x10, + 0x81, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x74, 0x61, 0x74, + 0x73, 0x10, 0x82, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x68, 0x65, 0x63, 0x49, 0x4f, 0x10, 0x83, + 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x10, 0x84, 0x05, + 0x12, 0x0f, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x53, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x10, 0x85, + 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x53, 0x79, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x10, + 0x86, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x61, 0x66, 0x6c, 0x6f, 0x75, 0x10, 0x87, 0x05, 0x12, + 0x0b, 0x0a, 0x06, 0x43, 0x61, 0x73, 0x70, 0x69, 0x6f, 0x10, 0x88, 0x05, 0x12, 0x0e, 0x0a, 0x09, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6c, 0x79, 0x48, 0x51, 0x10, 0x89, 0x05, 0x12, 0x12, 0x0a, 0x0d, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x10, 0x8a, 0x05, + 0x12, 0x0c, 0x0a, 0x07, 0x44, 0x72, 0x6f, 0x6e, 0x61, 0x48, 0x51, 0x10, 0x8b, 0x05, 0x12, 0x0c, + 0x0a, 0x07, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x78, 0x10, 0x8c, 0x05, 0x12, 0x09, 0x0a, 0x04, + 0x46, 0x6d, 0x66, 0x77, 0x10, 0x8d, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x44, + 0x61, 0x79, 0x10, 0x8e, 0x05, 0x12, 0x09, 0x0a, 0x04, 0x4c, 0x75, 0x6e, 0x6f, 0x10, 0x8f, 0x05, + 0x12, 0x10, 0x0a, 0x0b, 0x4d, 0x65, 0x69, 0x73, 0x74, 0x65, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x10, + 0x90, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x4d, 0x69, 0x6e, 0x64, 0x6d, 0x65, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x10, 0x91, 0x05, 0x12, 0x13, 0x0a, 0x0e, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x4c, 0x61, 0x62, 0x73, 0x10, 0x92, 0x05, 0x12, 0x14, 0x0a, 0x0b, 0x53, 0x63, 0x72, + 0x61, 0x70, 0x65, 0x72, 0x53, 0x69, 0x74, 0x65, 0x10, 0x93, 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, + 0x0d, 0x0a, 0x08, 0x53, 0x63, 0x72, 0x61, 0x70, 0x66, 0x6c, 0x79, 0x10, 0x94, 0x05, 0x12, 0x10, + 0x0a, 0x0b, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x79, 0x4e, 0x6f, 0x74, 0x65, 0x64, 0x10, 0x95, 0x05, + 0x12, 0x12, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, + 0x73, 0x10, 0x96, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x57, 0x65, 0x62, 0x53, 0x63, 0x72, 0x61, 0x70, + 0x65, 0x72, 0x10, 0x97, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x69, 0x65, 0x72, + 0x10, 0x98, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x10, 0x99, + 0x05, 0x12, 0x0a, 0x0a, 0x05, 0x44, 0x69, 0x74, 0x74, 0x6f, 0x10, 0x9a, 0x05, 0x12, 0x0a, 0x0a, + 0x05, 0x46, 0x69, 0x6e, 0x64, 0x6c, 0x10, 0x9b, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x65, 0x6e, + 0x64, 0x66, 0x6c, 0x6f, 0x77, 0x10, 0x9c, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x9d, 0x05, 0x12, 0x11, 0x0a, 0x0c, 0x4f, 0x70, 0x65, + 0x6e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x6f, 0x66, 0x74, 0x10, 0x9e, 0x05, 0x12, 0x0a, 0x0a, 0x05, + 0x50, 0x6f, 0x64, 0x69, 0x6f, 0x10, 0x9f, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x52, 0x6f, 0x63, 0x6b, + 0x73, 0x65, 0x74, 0x10, 0xa0, 0x05, 0x12, 0x0a, 0x0a, 0x05, 0x52, 0x6f, 0x77, 0x6e, 0x64, 0x10, + 0xa1, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x68, 0x6f, 0x74, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x10, + 0xa2, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x77, 0x69, 0x66, 0x74, 0x79, 0x70, 0x65, 0x10, 0xa3, + 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x54, 0x77, 0x69, 0x74, 0x74, 0x65, 0x72, 0x10, 0xa4, 0x05, 0x12, + 0x0a, 0x0a, 0x05, 0x48, 0x6f, 0x6e, 0x65, 0x79, 0x10, 0xa5, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x46, + 0x72, 0x65, 0x73, 0x68, 0x64, 0x65, 0x73, 0x6b, 0x10, 0xa6, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x55, + 0x70, 0x77, 0x61, 0x76, 0x65, 0x10, 0xa7, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x46, 0x6f, 0x75, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x10, 0xa8, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x46, 0x72, 0x65, 0x73, 0x68, + 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x10, 0xa9, 0x05, 0x12, 0x09, 0x0a, 0x04, 0x4d, 0x69, 0x74, 0x65, + 0x10, 0xaa, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x65, 0x70, 0x75, 0x74, 0x79, 0x10, 0xab, 0x05, + 0x12, 0x0c, 0x0a, 0x07, 0x42, 0x65, 0x65, 0x62, 0x6f, 0x6c, 0x65, 0x10, 0xac, 0x05, 0x12, 0x0e, + 0x0a, 0x09, 0x43, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x10, 0xad, 0x05, 0x12, 0x0b, + 0x0a, 0x06, 0x4b, 0x61, 0x6e, 0x62, 0x61, 0x6e, 0x10, 0xae, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x10, 0xaf, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x4d, + 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x10, 0xb0, 0x05, 0x12, 0x11, 0x0a, + 0x0c, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x10, 0xb1, 0x05, + 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x68, 0x65, 0x72, 0x70, 0x61, 0x64, 0x65, 0x73, 0x6b, 0x10, 0xb2, + 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x4d, 0x72, 0x74, 0x69, 0x63, 0x6b, 0x74, 0x6f, 0x63, 0x6b, 0x10, + 0xb3, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x66, 0x75, 0x6c, 0x65, 0x10, 0xb4, + 0x05, 0x12, 0x11, 0x0a, 0x0c, 0x41, 0x65, 0x72, 0x6f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x10, 0xb5, 0x05, 0x12, 0x11, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x6f, 0x63, 0x74, + 0x6f, 0x70, 0x75, 0x73, 0x10, 0xb6, 0x05, 0x12, 0x11, 0x0a, 0x08, 0x46, 0x75, 0x73, 0x65, 0x62, + 0x69, 0x6c, 0x6c, 0x10, 0xb7, 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x47, 0x65, + 0x63, 0x6b, 0x6f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x10, 0xb8, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x47, + 0x6f, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x64, 0x10, 0xb9, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x4d, + 0x6f, 0x6f, 0x6e, 0x63, 0x6c, 0x65, 0x72, 0x6b, 0x10, 0xba, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x50, + 0x61, 0x79, 0x6d, 0x6f, 0x61, 0x70, 0x70, 0x10, 0xbb, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x4d, 0x69, + 0x78, 0x6d, 0x61, 0x78, 0x10, 0xbc, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x73, 0x74, 0x10, 0xbd, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x61, 0x69, + 0x72, 0x73, 0x68, 0x6f, 0x70, 0x72, 0x10, 0xbe, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x6f, 0x73, + 0x68, 0x69, 0x70, 0x70, 0x6f, 0x10, 0xbf, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6f, + 0x70, 0x74, 0x10, 0xc0, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x75, 0x67, 0x65, 0x73, 0x74, 0x65, + 0x72, 0x10, 0xc1, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x56, 0x69, 0x65, 0x77, 0x6e, 0x65, 0x6f, 0x10, + 0xc2, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x10, + 0xc3, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x43, 0x61, 0x70, 0x74, 0x61, 0x69, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x10, 0xc4, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x76, 0x69, 0x73, + 0x74, 0x10, 0xc5, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x67, 0x6f, 0x10, + 0xc6, 0x05, 0x12, 0x0a, 0x0a, 0x05, 0x43, 0x6c, 0x6f, 0x7a, 0x65, 0x10, 0xc7, 0x05, 0x12, 0x0b, + 0x0a, 0x06, 0x46, 0x6f, 0x72, 0x6d, 0x49, 0x4f, 0x10, 0xc8, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x46, + 0x6f, 0x72, 0x6d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x10, 0xc9, 0x05, 0x12, 0x0d, 0x0a, 0x08, + 0x47, 0x6f, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x10, 0xca, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x4d, + 0x61, 0x64, 0x4b, 0x75, 0x64, 0x75, 0x10, 0xcb, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x4e, 0x6f, 0x7a, + 0x62, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x10, 0xcc, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x50, 0x61, + 0x70, 0x79, 0x72, 0x73, 0x10, 0xcd, 0x05, 0x12, 0x12, 0x0a, 0x0d, 0x53, 0x75, 0x70, 0x65, 0x72, + 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x41, 0x50, 0x49, 0x10, 0xce, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x54, + 0x61, 0x6c, 0x6c, 0x79, 0x66, 0x79, 0x10, 0xcf, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x5a, 0x65, 0x6e, + 0x6b, 0x69, 0x74, 0x41, 0x50, 0x49, 0x10, 0xd0, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x10, 0xd1, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x55, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x72, 0x65, 0x10, 0xd2, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x42, + 0x6f, 0x72, 0x67, 0x62, 0x61, 0x73, 0x65, 0x10, 0xd3, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x50, 0x69, + 0x70, 0x65, 0x64, 0x72, 0x65, 0x61, 0x6d, 0x10, 0xd4, 0x05, 0x12, 0x09, 0x0a, 0x04, 0x53, 0x69, + 0x72, 0x76, 0x10, 0xd5, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x44, 0x69, 0x66, 0x66, 0x62, 0x6f, 0x74, + 0x10, 0xd6, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x45, 0x69, 0x67, 0x68, 0x74, 0x78, 0x45, 0x69, 0x67, + 0x68, 0x74, 0x10, 0xd7, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x53, 0x65, 0x6e, 0x64, 0x6f, 0x73, 0x6f, + 0x10, 0xd8, 0x05, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x66, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x10, 0xd9, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x10, 0xda, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x50, 0x61, 0x6e, 0x64, 0x61, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x10, 0xdb, 0x05, 0x12, 0x0a, 0x0a, 0x05, 0x50, 0x61, 0x79, 0x6d, 0x6f, + 0x10, 0xdc, 0x05, 0x12, 0x1d, 0x0a, 0x18, 0x41, 0x76, 0x61, 0x7a, 0x61, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, - 0xcc, 0x07, 0x12, 0x15, 0x0a, 0x10, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0xcd, 0x07, 0x12, 0x2c, 0x0a, 0x27, 0x41, 0x7a, 0x75, - 0x72, 0x65, 0x4d, 0x4c, 0x57, 0x65, 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x69, 0x63, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x4b, 0x65, 0x79, 0x10, 0xce, 0x07, 0x12, 0x12, 0x0a, 0x0d, 0x41, 0x7a, 0x75, 0x72, 0x65, - 0x53, 0x61, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xcf, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x41, - 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4b, - 0x65, 0x79, 0x10, 0xd0, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x10, 0xd1, 0x07, 0x12, - 0x1f, 0x0a, 0x1a, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x10, 0xd2, 0x07, - 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x10, 0xd3, 0x07, 0x12, - 0x0a, 0x0a, 0x05, 0x46, 0x6c, 0x79, 0x49, 0x4f, 0x10, 0xd4, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x42, - 0x75, 0x69, 0x6c, 0x74, 0x57, 0x69, 0x74, 0x68, 0x10, 0xd5, 0x07, 0x12, 0x0f, 0x0a, 0x0a, 0x4a, - 0x75, 0x70, 0x69, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x65, 0x10, 0xd6, 0x07, 0x12, 0x25, 0x0a, 0x20, - 0x47, 0x43, 0x50, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x10, 0xd7, 0x07, 0x12, 0x08, 0x0a, 0x03, 0x57, 0x69, 0x7a, 0x10, 0xd8, 0x07, 0x12, 0x0c, 0x0a, - 0x07, 0x50, 0x61, 0x67, 0x61, 0x72, 0x6d, 0x65, 0x10, 0xd9, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x4f, - 0x6e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x10, 0xda, 0x07, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x72, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x68, - 0x6f, 0x67, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x64, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0xdd, 0x05, 0x12, 0x14, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x6e, 0x76, 0x69, 0x65, 0x77, 0x4c, 0x65, + 0x61, 0x6e, 0x4b, 0x69, 0x74, 0x10, 0xde, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x69, 0x76, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x6d, 0x10, 0xdf, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x4b, 0x75, 0x43, 0x6f, + 0x69, 0x6e, 0x10, 0xe0, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x61, 0x41, 0x50, 0x49, + 0x10, 0xe1, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x65, 0x48, 0x61, 0x73, 0x68, 0x10, + 0xe2, 0x05, 0x12, 0x0a, 0x0a, 0x05, 0x43, 0x65, 0x78, 0x49, 0x4f, 0x10, 0xe3, 0x05, 0x12, 0x0e, + 0x0a, 0x09, 0x4b, 0x6c, 0x69, 0x70, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x10, 0xe4, 0x05, 0x12, 0x0e, + 0x0a, 0x09, 0x44, 0x79, 0x6e, 0x61, 0x74, 0x72, 0x61, 0x63, 0x65, 0x10, 0xe5, 0x05, 0x12, 0x11, + 0x0a, 0x0c, 0x4d, 0x6f, 0x6c, 0x6c, 0x69, 0x65, 0x41, 0x50, 0x49, 0x4b, 0x65, 0x79, 0x10, 0xe6, + 0x05, 0x12, 0x16, 0x0a, 0x11, 0x4d, 0x6f, 0x6c, 0x6c, 0x69, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xe7, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x61, 0x73, + 0x69, 0x73, 0x54, 0x68, 0x65, 0x6f, 0x72, 0x79, 0x10, 0xe8, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x4e, + 0x6f, 0x72, 0x64, 0x69, 0x67, 0x65, 0x6e, 0x10, 0xe9, 0x05, 0x12, 0x1c, 0x0a, 0x17, 0x46, 0x6c, + 0x61, 0x67, 0x73, 0x6d, 0x69, 0x74, 0x68, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x10, 0xea, 0x05, 0x12, 0x13, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, + 0x73, 0x6d, 0x69, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xeb, 0x05, 0x12, 0x08, 0x0a, + 0x03, 0x4d, 0x75, 0x78, 0x10, 0xec, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x10, 0xed, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x65, 0x6e, 0x64, 0x62, 0x69, 0x72, 0x64, + 0x10, 0xee, 0x05, 0x12, 0x1c, 0x0a, 0x17, 0x53, 0x65, 0x6e, 0x64, 0x62, 0x69, 0x72, 0x64, 0x4f, + 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x50, 0x49, 0x10, 0xef, + 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x4d, 0x69, 0x64, 0x69, 0x73, 0x65, 0x10, 0xf0, 0x05, 0x12, 0x0d, + 0x0a, 0x08, 0x4d, 0x6f, 0x63, 0x6b, 0x61, 0x72, 0x6f, 0x6f, 0x10, 0xf1, 0x05, 0x12, 0x0b, 0x0a, + 0x06, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x34, 0x10, 0xf2, 0x05, 0x12, 0x0b, 0x0a, 0x06, 0x50, 0x69, + 0x6e, 0x61, 0x74, 0x61, 0x10, 0xf3, 0x05, 0x12, 0x11, 0x0a, 0x0c, 0x42, 0x72, 0x6f, 0x77, 0x73, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xf4, 0x05, 0x12, 0x1c, 0x0a, 0x13, 0x43, 0x72, + 0x6f, 0x73, 0x73, 0x42, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x67, 0x10, 0xf5, 0x05, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x6f, 0x61, 0x64, + 0x6d, 0x69, 0x6c, 0x6c, 0x10, 0xf6, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6f, 0x74, 0x10, 0xf7, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x4b, 0x6e, 0x61, 0x70, + 0x73, 0x61, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x10, 0xf8, 0x05, 0x12, 0x09, 0x0a, 0x04, 0x51, 0x61, + 0x73, 0x65, 0x10, 0xf9, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x44, 0x61, 0x72, 0x65, 0x62, 0x6f, 0x6f, + 0x73, 0x74, 0x10, 0xfa, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x54, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x78, 0x10, 0xfb, 0x05, 0x12, 0x0d, 0x0a, 0x08, 0x48, 0x6f, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x63, + 0x10, 0xfc, 0x05, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x73, 0x65, 0x72, 0x73, 0x10, 0xfd, + 0x05, 0x12, 0x12, 0x0a, 0x0d, 0x53, 0x63, 0x72, 0x75, 0x74, 0x69, 0x6e, 0x69, 0x7a, 0x65, 0x72, + 0x43, 0x69, 0x10, 0xfe, 0x05, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x6f, 0x6e, 0x61, 0x72, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x10, 0xff, 0x05, 0x12, 0x10, 0x0a, 0x0b, 0x41, 0x50, 0x49, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x10, 0x80, 0x06, 0x12, 0x14, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x10, 0x81, 0x06, 0x12, 0x0f, + 0x0a, 0x0a, 0x43, 0x72, 0x61, 0x66, 0x74, 0x4d, 0x79, 0x50, 0x44, 0x46, 0x10, 0x82, 0x06, 0x12, + 0x0e, 0x0a, 0x09, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x44, 0x4b, 0x10, 0x83, 0x06, 0x12, + 0x15, 0x0a, 0x0c, 0x47, 0x6c, 0x69, 0x74, 0x74, 0x65, 0x72, 0x6c, 0x79, 0x41, 0x50, 0x49, 0x10, + 0x84, 0x06, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x48, 0x79, 0x62, 0x69, 0x73, 0x63, + 0x75, 0x73, 0x10, 0x85, 0x06, 0x12, 0x09, 0x0a, 0x04, 0x4d, 0x69, 0x72, 0x6f, 0x10, 0x86, 0x06, + 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x70, 0x61, 0x67, 0x65, 0x10, 0x87, + 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x70, 0x61, 0x6c, 0x10, 0x88, + 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x54, 0x65, 0x6c, 0x65, 0x74, 0x79, 0x70, 0x65, 0x10, 0x89, 0x06, + 0x12, 0x0d, 0x0a, 0x08, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x61, 0x6d, 0x70, 0x10, 0x8a, 0x06, 0x12, + 0x0d, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x10, 0x8b, 0x06, 0x12, 0x0b, + 0x0a, 0x06, 0x57, 0x69, 0x73, 0x74, 0x69, 0x61, 0x10, 0x8c, 0x06, 0x12, 0x13, 0x0a, 0x0a, 0x53, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x64, 0x61, 0x72, 0x10, 0x8d, 0x06, 0x1a, 0x02, 0x08, 0x01, + 0x12, 0x10, 0x0a, 0x0b, 0x55, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x10, + 0x8e, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6f, 0x64, 0x65, 0x71, 0x75, 0x69, 0x72, 0x79, 0x10, + 0x8f, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x41, + 0x50, 0x49, 0x10, 0x90, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x10, 0x91, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4d, 0x61, 0x67, 0x69, 0x63, 0x42, 0x65, 0x6c, + 0x6c, 0x10, 0x92, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x72, 0x6d, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x10, 0x93, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x70, 0x69, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x10, 0x94, 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x44, 0x69, 0x73, 0x71, 0x75, 0x73, 0x10, 0x95, + 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x57, 0x6f, 0x6f, 0x70, 0x72, 0x61, 0x10, 0x96, 0x06, 0x12, 0x0e, + 0x0a, 0x09, 0x50, 0x61, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0x97, 0x06, 0x12, 0x0c, + 0x0a, 0x07, 0x47, 0x75, 0x6d, 0x72, 0x6f, 0x61, 0x64, 0x10, 0x98, 0x06, 0x12, 0x0f, 0x0a, 0x0a, + 0x50, 0x61, 0x79, 0x64, 0x69, 0x72, 0x74, 0x61, 0x70, 0x70, 0x10, 0x99, 0x06, 0x12, 0x0e, 0x0a, + 0x09, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x66, 0x79, 0x10, 0x9a, 0x06, 0x12, 0x0f, 0x0a, + 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x63, 0x61, 0x6b, 0x65, 0x10, 0x9b, 0x06, 0x12, 0x0f, + 0x0a, 0x0a, 0x4a, 0x75, 0x6d, 0x70, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x10, 0x9c, 0x06, 0x12, + 0x0f, 0x0a, 0x0a, 0x4c, 0x75, 0x6e, 0x63, 0x68, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x10, 0x9d, 0x06, + 0x12, 0x0c, 0x0a, 0x07, 0x52, 0x6f, 0x73, 0x65, 0x74, 0x74, 0x65, 0x10, 0x9e, 0x06, 0x12, 0x09, + 0x0a, 0x04, 0x59, 0x65, 0x6c, 0x70, 0x10, 0x9f, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x74, 0x65, + 0x72, 0x61, 0x10, 0xa0, 0x06, 0x12, 0x12, 0x0a, 0x0d, 0x45, 0x63, 0x6f, 0x53, 0x74, 0x72, 0x75, + 0x78, 0x75, 0x72, 0x65, 0x49, 0x54, 0x10, 0xa1, 0x06, 0x12, 0x08, 0x0a, 0x03, 0x41, 0x68, 0x61, + 0x10, 0xa2, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x61, 0x72, 0x73, 0x65, 0x68, 0x75, 0x62, 0x10, + 0xa3, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x10, 0xa4, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x6d, + 0x69, 0x74, 0x68, 0x10, 0xa5, 0x06, 0x12, 0x11, 0x0a, 0x08, 0x46, 0x6c, 0x6f, 0x77, 0x64, 0x61, + 0x73, 0x68, 0x10, 0xa6, 0x06, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x11, 0x0a, 0x08, 0x46, 0x6c, 0x6f, + 0x77, 0x64, 0x6f, 0x63, 0x6b, 0x10, 0xa7, 0x06, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0b, 0x0a, 0x06, + 0x46, 0x69, 0x62, 0x65, 0x72, 0x79, 0x10, 0xa8, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x54, 0x79, 0x70, + 0x65, 0x74, 0x61, 0x6c, 0x6b, 0x10, 0xa9, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x6f, 0x6f, 0x64, + 0x6f, 0x6f, 0x53, 0x4d, 0x53, 0x10, 0xaa, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x5a, 0x75, 0x6c, 0x69, + 0x70, 0x43, 0x68, 0x61, 0x74, 0x10, 0xab, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x6f, 0x72, 0x6d, + 0x63, 0x72, 0x61, 0x66, 0x74, 0x10, 0xac, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x65, 0x78, 0x61, + 0x70, 0x69, 0x73, 0x10, 0xad, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x52, 0x65, 0x61, 0x63, 0x68, 0x6d, + 0x61, 0x69, 0x6c, 0x10, 0xae, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x72, 0x74, 0x6d, + 0x6f, 0x67, 0x75, 0x6c, 0x10, 0xaf, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x64, 0x64, 0x10, 0xb0, 0x06, 0x12, 0x08, 0x0a, 0x03, 0x57, 0x69, 0x74, 0x10, + 0xb1, 0x06, 0x12, 0x15, 0x0a, 0x10, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x10, 0xb2, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x44, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x6e, 0x61, 0x75, 0x74, 0x10, 0xb3, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x4d, 0x6f, + 0x6e, 0x6b, 0x65, 0x79, 0x4c, 0x65, 0x61, 0x72, 0x6e, 0x10, 0xb4, 0x06, 0x12, 0x0a, 0x0a, 0x05, + 0x44, 0x75, 0x70, 0x6c, 0x79, 0x10, 0xb5, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x50, 0x6f, 0x73, 0x74, + 0x62, 0x61, 0x63, 0x6b, 0x73, 0x10, 0xb6, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x43, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x32, 0x10, 0xb7, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x5a, 0x65, 0x6e, 0x52, 0x6f, + 0x77, 0x73, 0x10, 0xb8, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x5a, 0x69, 0x70, 0x63, 0x6f, 0x64, 0x65, + 0x62, 0x61, 0x73, 0x65, 0x10, 0xb9, 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x65, 0x66, 0x74, 0x65, + 0x72, 0x10, 0xba, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x54, 0x77, 0x69, 0x73, 0x74, 0x10, 0xbb, 0x06, + 0x12, 0x16, 0x0a, 0x11, 0x42, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x72, 0x65, 0x65, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x10, 0xbc, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x10, 0xbd, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x47, + 0x72, 0x61, 0x66, 0x61, 0x6e, 0x61, 0x10, 0xbe, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x74, 0x41, 0x70, 0x69, 0x10, 0xbf, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x10, 0xc0, 0x06, 0x12, 0x0c, 0x0a, + 0x07, 0x42, 0x75, 0x6c, 0x6b, 0x73, 0x6d, 0x73, 0x10, 0xc1, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x6f, 0x78, 0x10, 0xc2, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4f, 0x6e, 0x65, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x10, 0xc3, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x52, 0x65, 0x6e, + 0x74, 0x6d, 0x61, 0x6e, 0x10, 0xc4, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x73, 0x65, + 0x75, 0x72, 0x10, 0xc5, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x44, 0x6f, 0x63, 0x70, 0x61, 0x72, 0x73, + 0x65, 0x72, 0x10, 0xc6, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x46, 0x6f, 0x72, 0x6d, 0x73, 0x69, 0x74, + 0x65, 0x10, 0xc7, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x74, 0x61, + 0x69, 0x6c, 0x6f, 0x72, 0x10, 0xc8, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x4c, 0x65, 0x6d, 0x6c, 0x69, + 0x73, 0x74, 0x10, 0xc9, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x64, 0x70, 0x61, 0x64, + 0x10, 0xca, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x6f, 0x72, 0x6d, 0x73, 0x74, 0x61, 0x63, 0x6b, + 0x10, 0xcb, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x6c, 0x69, 0x6d, 0x61, + 0x74, 0x65, 0x10, 0xcc, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x6f, 0x64, 0x65, 0x6d, 0x61, 0x67, + 0x69, 0x63, 0x10, 0xcd, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x56, 0x62, 0x6f, 0x75, 0x74, 0x10, 0xce, + 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4e, 0x69, 0x67, 0x68, 0x74, 0x66, 0x61, 0x6c, 0x6c, 0x10, 0xcf, + 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4c, 0x61, 0x62, 0x73, 0x10, + 0xd0, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x53, 0x70, 0x65, 0x65, 0x63, 0x68, 0x54, 0x65, 0x78, 0x74, + 0x41, 0x49, 0x10, 0xd1, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x6f, 0x6c, 0x6c, 0x73, 0x41, 0x50, + 0x49, 0x10, 0xd2, 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x69, 0x6d, 0x46, 0x69, 0x6e, 0x10, 0xd3, + 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x53, 0x63, 0x61, 0x6c, 0x72, 0x10, 0xd4, 0x06, 0x12, 0x0f, 0x0a, + 0x0a, 0x4b, 0x61, 0x6e, 0x62, 0x61, 0x6e, 0x74, 0x6f, 0x6f, 0x6c, 0x10, 0xd5, 0x06, 0x12, 0x10, + 0x0a, 0x0b, 0x42, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x10, 0xd6, 0x06, + 0x12, 0x0c, 0x0a, 0x07, 0x48, 0x6f, 0x74, 0x77, 0x69, 0x72, 0x65, 0x10, 0xd7, 0x06, 0x12, 0x0d, + 0x0a, 0x08, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6f, 0x74, 0x10, 0xd8, 0x06, 0x12, 0x0c, 0x0a, + 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6b, 0x69, 0x74, 0x10, 0xd9, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x10, 0xda, 0x06, 0x12, 0x11, 0x0a, + 0x0c, 0x4d, 0x6f, 0x6a, 0x6f, 0x68, 0x65, 0x6c, 0x70, 0x64, 0x65, 0x73, 0x6b, 0x10, 0xdb, 0x06, + 0x12, 0x0f, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x10, 0xdc, + 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x10, 0xdd, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x44, 0x79, 0x6e, 0x61, 0x64, 0x6f, 0x74, 0x10, 0xde, + 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x44, 0x65, 0x6d, 0x69, 0x6f, 0x10, 0xdf, 0x06, 0x12, 0x0b, 0x0a, + 0x06, 0x54, 0x6f, 0x6b, 0x65, 0x65, 0x74, 0x10, 0xe0, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x4d, 0x79, + 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0xe1, 0x06, 0x12, 0x0e, 0x0a, + 0x09, 0x43, 0x6f, 0x70, 0x79, 0x73, 0x63, 0x61, 0x70, 0x65, 0x10, 0xe2, 0x06, 0x12, 0x0d, 0x0a, + 0x08, 0x42, 0x65, 0x73, 0x6e, 0x61, 0x70, 0x70, 0x79, 0x10, 0xe3, 0x06, 0x12, 0x0e, 0x0a, 0x09, + 0x53, 0x61, 0x6c, 0x65, 0x73, 0x6d, 0x61, 0x74, 0x65, 0x10, 0xe4, 0x06, 0x12, 0x13, 0x0a, 0x0a, + 0x48, 0x65, 0x61, 0x74, 0x6d, 0x61, 0x70, 0x61, 0x70, 0x69, 0x10, 0xe5, 0x06, 0x1a, 0x02, 0x08, + 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x57, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x70, 0x75, 0x6c, 0x73, + 0x65, 0x10, 0xe6, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x55, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, + 0x79, 0x10, 0xe7, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x10, + 0xe8, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x44, 0x46, 0x6d, 0x79, 0x55, 0x52, 0x4c, 0x10, 0xe9, + 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x41, 0x70, 0x69, 0x32, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, + 0x10, 0xea, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x4f, 0x70, 0x73, 0x67, 0x65, 0x6e, 0x69, 0x65, 0x10, + 0xeb, 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x47, 0x65, 0x6d, 0x69, 0x6e, 0x69, 0x10, 0xec, 0x06, 0x12, + 0x0e, 0x0a, 0x09, 0x48, 0x6f, 0x6e, 0x65, 0x79, 0x63, 0x6f, 0x6d, 0x62, 0x10, 0xed, 0x06, 0x12, + 0x14, 0x0a, 0x0f, 0x4b, 0x61, 0x6c, 0x74, 0x75, 0x72, 0x61, 0x41, 0x70, 0x70, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x10, 0xee, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4b, 0x61, 0x6c, 0x74, 0x75, 0x72, 0x61, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0xef, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x42, 0x69, + 0x74, 0x47, 0x6f, 0x10, 0xf0, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x4f, 0x70, 0x74, 0x69, 0x64, 0x61, + 0x73, 0x68, 0x10, 0xf1, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x6d, 0x67, 0x69, 0x78, 0x10, 0xf2, + 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x54, 0x65, 0x78, 0x74, + 0x10, 0xf3, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x50, 0x61, 0x67, 0x65, 0x32, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x73, 0x10, 0xf4, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x51, 0x75, 0x69, 0x63, 0x6b, 0x62, 0x61, + 0x73, 0x65, 0x10, 0xf5, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x52, 0x65, 0x64, 0x62, 0x6f, 0x6f, 0x74, + 0x68, 0x10, 0xf6, 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x4e, 0x75, 0x62, 0x65, 0x6c, 0x61, 0x10, 0xf7, + 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x6e, 0x66, 0x6f, 0x62, 0x69, 0x70, 0x10, 0xf8, 0x06, 0x12, + 0x0a, 0x0a, 0x05, 0x55, 0x70, 0x72, 0x6f, 0x63, 0x10, 0xf9, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x53, + 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x62, 0x65, 0x65, 0x10, 0xfa, 0x06, 0x12, 0x0e, 0x0a, 0x09, + 0x41, 0x66, 0x74, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x10, 0xfb, 0x06, 0x12, 0x0c, 0x0a, 0x07, + 0x45, 0x64, 0x75, 0x73, 0x69, 0x67, 0x6e, 0x10, 0xfc, 0x06, 0x12, 0x0b, 0x0a, 0x06, 0x54, 0x65, + 0x61, 0x6d, 0x75, 0x70, 0x10, 0xfd, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x57, 0x6f, 0x72, 0x6b, 0x64, + 0x61, 0x79, 0x10, 0xfe, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, + 0x10, 0xff, 0x06, 0x12, 0x08, 0x0a, 0x03, 0x4e, 0x47, 0x43, 0x10, 0x80, 0x07, 0x12, 0x13, 0x0a, + 0x0e, 0x44, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x56, 0x32, 0x10, + 0x81, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x51, 0x4c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x10, + 0x82, 0x07, 0x12, 0x08, 0x0a, 0x03, 0x46, 0x54, 0x50, 0x10, 0x83, 0x07, 0x12, 0x0a, 0x0a, 0x05, + 0x52, 0x65, 0x64, 0x69, 0x73, 0x10, 0x84, 0x07, 0x12, 0x09, 0x0a, 0x04, 0x4c, 0x44, 0x41, 0x50, + 0x10, 0x85, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x69, 0x66, 0x79, 0x10, 0x86, + 0x07, 0x12, 0x0d, 0x0a, 0x08, 0x52, 0x61, 0x62, 0x62, 0x69, 0x74, 0x4d, 0x51, 0x10, 0x87, 0x07, + 0x12, 0x10, 0x0a, 0x0b, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x67, 0x65, 0x78, 0x10, + 0x88, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x74, 0x68, 0x65, 0x72, 0x73, 0x63, 0x61, 0x6e, 0x10, + 0x89, 0x07, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x6e, 0x66, 0x75, 0x72, 0x61, 0x10, 0x8a, 0x07, 0x12, + 0x0c, 0x0a, 0x07, 0x41, 0x6c, 0x63, 0x68, 0x65, 0x6d, 0x79, 0x10, 0x8b, 0x07, 0x12, 0x10, 0x0a, + 0x0b, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x10, 0x8c, 0x07, 0x12, + 0x0c, 0x0a, 0x07, 0x4d, 0x6f, 0x72, 0x61, 0x6c, 0x69, 0x73, 0x10, 0x8d, 0x07, 0x12, 0x0c, 0x0a, + 0x07, 0x42, 0x73, 0x63, 0x53, 0x63, 0x61, 0x6e, 0x10, 0x8e, 0x07, 0x12, 0x16, 0x0a, 0x0d, 0x43, + 0x6f, 0x69, 0x6e, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x43, 0x61, 0x70, 0x10, 0x8f, 0x07, 0x1a, + 0x02, 0x08, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x50, 0x65, 0x72, 0x63, 0x79, 0x10, 0x90, 0x07, 0x12, + 0x11, 0x0a, 0x0c, 0x54, 0x69, 0x6e, 0x65, 0x73, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x10, + 0x91, 0x07, 0x12, 0x0b, 0x0a, 0x06, 0x50, 0x75, 0x6c, 0x75, 0x6d, 0x69, 0x10, 0x92, 0x07, 0x12, + 0x12, 0x0a, 0x0d, 0x53, 0x75, 0x70, 0x61, 0x62, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x10, 0x93, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x4e, 0x75, 0x47, 0x65, 0x74, 0x41, 0x70, 0x69, 0x4b, + 0x65, 0x79, 0x10, 0x94, 0x07, 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x69, 0x76, 0x65, 0x6e, 0x10, 0x95, + 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x72, 0x65, 0x66, 0x65, 0x63, 0x74, 0x10, 0x96, 0x07, 0x12, + 0x0d, 0x0a, 0x08, 0x44, 0x6f, 0x63, 0x75, 0x73, 0x69, 0x67, 0x6e, 0x10, 0x97, 0x07, 0x12, 0x0e, + 0x0a, 0x09, 0x43, 0x6f, 0x75, 0x63, 0x68, 0x62, 0x61, 0x73, 0x65, 0x10, 0x98, 0x07, 0x12, 0x0e, + 0x0a, 0x09, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x68, 0x75, 0x62, 0x10, 0x99, 0x07, 0x12, 0x19, + 0x0a, 0x14, 0x54, 0x72, 0x75, 0x66, 0x66, 0x6c, 0x65, 0x68, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x65, + 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x10, 0x9a, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x45, 0x6e, 0x76, + 0x6f, 0x79, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x10, 0x9b, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x47, + 0x69, 0x74, 0x48, 0x75, 0x62, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x10, 0x9c, 0x07, 0x12, 0x0f, + 0x0a, 0x0a, 0x53, 0x61, 0x6c, 0x65, 0x73, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x10, 0x9d, 0x07, 0x12, + 0x10, 0x0a, 0x0b, 0x48, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x65, 0x10, 0x9e, + 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x6e, 0x6f, 0x77, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x10, 0x9f, + 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x10, 0xa0, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x61, 0x69, 0x6c, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x10, 0xa1, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x57, 0x65, 0x62, 0x33, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x10, 0xa2, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x10, 0xa3, 0x07, 0x12, 0x12, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x6e, + 0x65, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x62, 0x10, 0xa4, 0x07, 0x12, 0x0e, 0x0a, 0x09, + 0x41, 0x6e, 0x74, 0x68, 0x72, 0x6f, 0x70, 0x69, 0x63, 0x10, 0xa5, 0x07, 0x12, 0x09, 0x0a, 0x04, + 0x52, 0x61, 0x6d, 0x70, 0x10, 0xa6, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x4b, 0x6c, 0x61, 0x76, 0x69, + 0x79, 0x6f, 0x10, 0xa7, 0x07, 0x12, 0x14, 0x0a, 0x0f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x43, 0x6f, 0x64, 0x79, 0x10, 0xa8, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x56, + 0x6f, 0x69, 0x63, 0x65, 0x66, 0x6c, 0x6f, 0x77, 0x10, 0xa9, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x50, + 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x10, 0xaa, 0x07, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x50, 0x49, + 0x6e, 0x66, 0x6f, 0x10, 0xab, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x49, 0x70, 0x32, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0xac, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6d, 0x6f, 0x6a, 0x6f, 0x10, 0xad, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x50, 0x6f, 0x72, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x10, 0xae, 0x07, 0x12, 0x13, 0x0a, 0x0e, 0x50, 0x6f, 0x72, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xaf, 0x07, 0x12, 0x0b, 0x0a, + 0x06, 0x4c, 0x6f, 0x67, 0x67, 0x6c, 0x79, 0x10, 0xb0, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x4f, 0x70, + 0x65, 0x6e, 0x56, 0x70, 0x6e, 0x10, 0xb1, 0x07, 0x12, 0x1e, 0x0a, 0x19, 0x56, 0x61, 0x67, 0x72, + 0x61, 0x6e, 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xb2, 0x07, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x65, 0x74, 0x74, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x10, 0xb3, 0x07, 0x12, 0x0d, 0x0a, 0x08, 0x5a, 0x65, + 0x72, 0x6f, 0x54, 0x69, 0x65, 0x72, 0x10, 0xb4, 0x07, 0x12, 0x0e, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x4f, 0x70, 0x74, 0x69, 0x63, 0x73, 0x10, 0xb5, 0x07, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x65, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x10, 0xb6, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x43, 0x6f, 0x69, 0x6e, + 0x62, 0x61, 0x73, 0x65, 0x57, 0x61, 0x61, 0x53, 0x10, 0xb7, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x4c, + 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x71, 0x75, 0x65, 0x65, 0x7a, 0x79, 0x10, 0xb8, 0x07, 0x12, 0x0d, + 0x0a, 0x08, 0x42, 0x75, 0x64, 0x69, 0x62, 0x61, 0x73, 0x65, 0x10, 0xb9, 0x07, 0x12, 0x0f, 0x0a, + 0x0a, 0x44, 0x65, 0x6e, 0x6f, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x10, 0xba, 0x07, 0x12, 0x0b, + 0x0a, 0x06, 0x53, 0x74, 0x72, 0x69, 0x70, 0x6f, 0x10, 0xbb, 0x07, 0x12, 0x0c, 0x0a, 0x07, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x49, 0x4f, 0x10, 0xbc, 0x07, 0x12, 0x0f, 0x0a, 0x0a, 0x41, 0x7a, 0x75, + 0x72, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x10, 0xbd, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x41, 0x7a, + 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x10, 0xbe, 0x07, 0x12, 0x12, 0x0a, 0x0d, 0x41, 0x57, 0x53, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0xbf, 0x07, 0x12, 0x09, 0x0a, 0x04, 0x43, + 0x6f, 0x64, 0x61, 0x10, 0xc0, 0x07, 0x12, 0x0b, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x7a, 0x49, 0x4f, + 0x10, 0xc1, 0x07, 0x12, 0x0f, 0x0a, 0x0a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x62, 0x72, 0x69, 0x74, + 0x65, 0x10, 0xc2, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x47, 0x72, 0x61, 0x66, 0x61, 0x6e, 0x61, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xc3, 0x07, + 0x12, 0x13, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x10, 0xc4, 0x07, 0x12, 0x0d, 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x6f, + 0x70, 0x10, 0xc5, 0x07, 0x12, 0x0a, 0x0a, 0x05, 0x4e, 0x67, 0x72, 0x6f, 0x6b, 0x10, 0xc6, 0x07, + 0x12, 0x0e, 0x0a, 0x09, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x10, 0xc7, 0x07, + 0x12, 0x0d, 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x10, 0xc8, 0x07, 0x12, + 0x2a, 0x0a, 0x25, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x10, 0xc9, 0x07, 0x12, 0x20, 0x0a, 0x1b, 0x41, + 0x7a, 0x75, 0x72, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x64, 0x69, + 0x73, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x10, 0xca, 0x07, 0x12, 0x21, 0x0a, + 0x1c, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x44, 0x42, 0x4b, 0x65, + 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x10, 0xcb, 0x07, + 0x12, 0x23, 0x0a, 0x1e, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x44, 0x65, 0x76, 0x6f, 0x70, 0x73, 0x50, + 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x10, 0xcc, 0x07, 0x12, 0x15, 0x0a, 0x10, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x46, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0xcd, 0x07, 0x12, 0x2c, 0x0a, 0x27, + 0x41, 0x7a, 0x75, 0x72, 0x65, 0x4d, 0x4c, 0x57, 0x65, 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x63, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x10, 0xce, 0x07, 0x12, 0x12, 0x0a, 0x0d, 0x41, 0x7a, + 0x75, 0x72, 0x65, 0x53, 0x61, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xcf, 0x07, 0x12, 0x18, + 0x0a, 0x13, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x64, 0x6d, + 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x10, 0xd0, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x41, 0x7a, 0x75, 0x72, + 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x10, + 0xd1, 0x07, 0x12, 0x1f, 0x0a, 0x1a, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x10, 0xd2, 0x07, 0x12, 0x0d, 0x0a, 0x08, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x10, + 0xd3, 0x07, 0x12, 0x0a, 0x0a, 0x05, 0x46, 0x6c, 0x79, 0x49, 0x4f, 0x10, 0xd4, 0x07, 0x12, 0x0e, + 0x0a, 0x09, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x57, 0x69, 0x74, 0x68, 0x10, 0xd5, 0x07, 0x12, 0x0f, + 0x0a, 0x0a, 0x4a, 0x75, 0x70, 0x69, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x65, 0x10, 0xd6, 0x07, 0x12, + 0x25, 0x0a, 0x20, 0x47, 0x43, 0x50, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x73, 0x10, 0xd7, 0x07, 0x12, 0x08, 0x0a, 0x03, 0x57, 0x69, 0x7a, 0x10, 0xd8, 0x07, + 0x12, 0x0c, 0x0a, 0x07, 0x50, 0x61, 0x67, 0x61, 0x72, 0x6d, 0x65, 0x10, 0xd9, 0x07, 0x12, 0x0c, + 0x0a, 0x07, 0x4f, 0x6e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x10, 0xda, 0x07, 0x42, 0x3d, 0x5a, 0x3b, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x72, 0x75, 0x66, 0x66, + 0x6c, 0x65, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x66, 0x66, + 0x6c, 0x65, 0x68, 0x6f, 0x67, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, + 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -4465,27 +4539,29 @@ func file_detectors_proto_rawDescGZIP() []byte { } var file_detectors_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_detectors_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_detectors_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_detectors_proto_goTypes = []interface{}{ - (DecoderType)(0), // 0: detectors.DecoderType - (DetectorType)(0), // 1: detectors.DetectorType - (*Result)(nil), // 2: detectors.Result - (*StructuredData)(nil), // 3: detectors.StructuredData - (*TlsPrivateKey)(nil), // 4: detectors.TlsPrivateKey - (*GitHubSSHKey)(nil), // 5: detectors.GitHubSSHKey - nil, // 6: detectors.Result.ExtraDataEntry + (DecoderType)(0), // 0: detectors.DecoderType + (DetectorType)(0), // 1: detectors.DetectorType + (*Result)(nil), // 2: detectors.Result + (*FalsePositiveInfo)(nil), // 3: detectors.FalsePositiveInfo + (*StructuredData)(nil), // 4: detectors.StructuredData + (*TlsPrivateKey)(nil), // 5: detectors.TlsPrivateKey + (*GitHubSSHKey)(nil), // 6: detectors.GitHubSSHKey + nil, // 7: detectors.Result.ExtraDataEntry } var file_detectors_proto_depIdxs = []int32{ - 6, // 0: detectors.Result.extra_data:type_name -> detectors.Result.ExtraDataEntry - 3, // 1: detectors.Result.structured_data:type_name -> detectors.StructuredData + 7, // 0: detectors.Result.extra_data:type_name -> detectors.Result.ExtraDataEntry + 4, // 1: detectors.Result.structured_data:type_name -> detectors.StructuredData 0, // 2: detectors.Result.decoder_type:type_name -> detectors.DecoderType - 4, // 3: detectors.StructuredData.tls_private_key:type_name -> detectors.TlsPrivateKey - 5, // 4: detectors.StructuredData.github_ssh_key:type_name -> detectors.GitHubSSHKey - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 3, // 3: detectors.Result.false_positive_info:type_name -> detectors.FalsePositiveInfo + 5, // 4: detectors.StructuredData.tls_private_key:type_name -> detectors.TlsPrivateKey + 6, // 5: detectors.StructuredData.github_ssh_key:type_name -> detectors.GitHubSSHKey + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_detectors_proto_init() } @@ -4507,7 +4583,7 @@ func file_detectors_proto_init() { } } file_detectors_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StructuredData); i { + switch v := v.(*FalsePositiveInfo); i { case 0: return &v.state case 1: @@ -4519,7 +4595,7 @@ func file_detectors_proto_init() { } } file_detectors_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TlsPrivateKey); i { + switch v := v.(*StructuredData); i { case 0: return &v.state case 1: @@ -4531,6 +4607,18 @@ func file_detectors_proto_init() { } } file_detectors_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TlsPrivateKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_detectors_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GitHubSSHKey); i { case 0: return &v.state @@ -4549,7 +4637,7 @@ func file_detectors_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_detectors_proto_rawDesc, NumEnums: 2, - NumMessages: 5, + NumMessages: 6, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/pb/detectorspb/detectors.pb.validate.go b/pkg/pb/detectorspb/detectors.pb.validate.go index 1bb4ed2bf..cd534b78d 100644 --- a/pkg/pb/detectorspb/detectors.pb.validate.go +++ b/pkg/pb/detectorspb/detectors.pb.validate.go @@ -101,6 +101,35 @@ func (m *Result) validate(all bool) error { // no validation rules for VerificationErrorMessage + if all { + switch v := interface{}(m.GetFalsePositiveInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ResultValidationError{ + field: "FalsePositiveInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ResultValidationError{ + field: "FalsePositiveInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetFalsePositiveInfo()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ResultValidationError{ + field: "FalsePositiveInfo", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return ResultMultiError(errors) } @@ -178,6 +207,112 @@ var _ interface { ErrorName() string } = ResultValidationError{} +// Validate checks the field values on FalsePositiveInfo with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *FalsePositiveInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on FalsePositiveInfo with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// FalsePositiveInfoMultiError, or nil if none found. +func (m *FalsePositiveInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *FalsePositiveInfo) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for WordMatch + + // no validation rules for LowEntropy + + if len(errors) > 0 { + return FalsePositiveInfoMultiError(errors) + } + + return nil +} + +// FalsePositiveInfoMultiError is an error wrapping multiple validation errors +// returned by FalsePositiveInfo.ValidateAll() if the designated constraints +// aren't met. +type FalsePositiveInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m FalsePositiveInfoMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m FalsePositiveInfoMultiError) AllErrors() []error { return m } + +// FalsePositiveInfoValidationError is the validation error returned by +// FalsePositiveInfo.Validate if the designated constraints aren't met. +type FalsePositiveInfoValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FalsePositiveInfoValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FalsePositiveInfoValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FalsePositiveInfoValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FalsePositiveInfoValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FalsePositiveInfoValidationError) ErrorName() string { + return "FalsePositiveInfoValidationError" +} + +// Error satisfies the builtin error interface +func (e FalsePositiveInfoValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFalsePositiveInfo.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FalsePositiveInfoValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FalsePositiveInfoValidationError{} + // Validate checks the field values on StructuredData with the rules defined in // the proto definition for this message. If any rules are violated, the first // error encountered is returned, or nil if there are no violations. diff --git a/proto/detectors.proto b/proto/detectors.proto index d44f6c736..fd0e43252 100644 --- a/proto/detectors.proto +++ b/proto/detectors.proto @@ -1011,6 +1011,13 @@ message Result { // This field should only be populated if the verification process itself failed in a way that provides no information // about the verification status of the candidate secret, such as if the verification request timed out. string verification_error_message = 10; + + FalsePositiveInfo false_positive_info = 11; +} + +message FalsePositiveInfo { + bool word_match = 1; + bool low_entropy = 2; } message StructuredData { From f03aa387266d398444d2fdc83bb056a2030c35e4 Mon Sep 17 00:00:00 2001 From: ahrav Date: Tue, 23 Apr 2024 14:13:13 -0700 Subject: [PATCH 27/32] [bug] - Fix disk write metric and update BufferedFileWriter file field (#2733) * Record the disk write after the file has been written to * remove comment * remove print logs --- .../buffered_file_writer/bufferedfilewriter.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/writers/buffered_file_writer/bufferedfilewriter.go b/pkg/writers/buffered_file_writer/bufferedfilewriter.go index 85dcfbc53..6d254d581 100644 --- a/pkg/writers/buffered_file_writer/bufferedfilewriter.go +++ b/pkg/writers/buffered_file_writer/bufferedfilewriter.go @@ -55,7 +55,7 @@ type BufferedFileWriter struct { bufPool *buffer.Pool // Pool for storing buffers for reuse. buf *buffer.Buffer // Buffer for storing data under the threshold in memory. filename string // Name of the temporary file. - file io.WriteCloser // File for storing data over the threshold. + file *os.File // File for storing data over the threshold. state state // Current state of the writer. (writeOnly or readOnly) @@ -149,7 +149,6 @@ func (w *BufferedFileWriter) Write(data []byte) (int, error) { w.filename = file.Name() w.file = file - w.metrics.recordDiskWrite(file) // Transfer existing data in buffer to the file, then clear the buffer. // This ensures all the data is in one place - either entirely in the buffer or the file. @@ -161,7 +160,14 @@ func (w *BufferedFileWriter) Write(data []byte) (int, error) { } } - return w.file.Write(data) + n, err := w.file.Write(data) + if err != nil { + return n, err + } + + w.metrics.recordDiskWrite(w.file) + + return n, nil } // CloseForWriting flushes any remaining data in the buffer to the file, closes the file if created, From 0ce02fc827f55740795983a6a3e62f04630b0b16 Mon Sep 17 00:00:00 2001 From: Dustin Decker Date: Tue, 23 Apr 2024 14:29:38 -0700 Subject: [PATCH 28/32] Make connection issues less jarring (#2730) * Make connection issues less jarring * lint * fix lint issue * print just the connection issue in yellow * update terminology --- pkg/detectors/falsepositives.go | 2 -- pkg/output/plain.go | 18 ++++++++---------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/pkg/detectors/falsepositives.go b/pkg/detectors/falsepositives.go index 7559cfe1a..856c4ecf7 100644 --- a/pkg/detectors/falsepositives.go +++ b/pkg/detectors/falsepositives.go @@ -139,7 +139,6 @@ func FilterKnownFalsePositives(ctx context.Context, results []Result, falsePosit switch result.DetectorType { case detectorspb.DetectorType_CustomRegex: filteredResults = append(filteredResults, result) - break case detectorspb.DetectorType_GCP, detectorspb.DetectorType_URI, detectorspb.DetectorType_AzureBatch, @@ -149,7 +148,6 @@ func FilterKnownFalsePositives(ctx context.Context, results []Result, falsePosit detectorspb.DetectorType_MongoDB, detectorspb.DetectorType_JDBC: filteredResults = append(filteredResults, result) - break default: if result.Raw != nil { if !IsKnownFalsePositive(string(result.Raw), falsePositives, wordCheck) { diff --git a/pkg/output/plain.go b/pkg/output/plain.go index 81afc832f..202e44cc4 100644 --- a/pkg/output/plain.go +++ b/pkg/output/plain.go @@ -17,12 +17,11 @@ import ( ) var ( - boldYellowPrinter = color.New(color.Bold, color.FgYellow) - yellowPrinter = color.New(color.FgHiYellow) - greenPrinter = color.New(color.FgHiGreen) - boldGreenPrinter = color.New(color.Bold, color.FgHiGreen) - whitePrinter = color.New(color.FgWhite) - boldWhitePrinter = color.New(color.Bold, color.FgWhite) + yellowPrinter = color.New(color.FgYellow) + greenPrinter = color.New(color.FgHiGreen) + boldGreenPrinter = color.New(color.Bold, color.FgHiGreen) + whitePrinter = color.New(color.FgWhite) + boldWhitePrinter = color.New(color.Bold, color.FgWhite) ) // PlainPrinter is a printer that prints results in plain text format. @@ -49,13 +48,12 @@ func (p *PlainPrinter) Print(_ context.Context, r *detectors.ResultWithMetadata) if out.Verified { boldGreenPrinter.Print("✅ Found verified result 🐷🔑\n") - } else if out.VerificationError != nil { - printer = yellowPrinter - boldYellowPrinter.Print("⚠️ Found result - unable to verify due to error 🐷🔑❗️\n") - printer.Printf("Verification Error: %s\n", out.VerificationError) } else { printer = whitePrinter boldWhitePrinter.Print("Found unverified result 🐷🔑❓\n") + if out.VerificationError != nil { + yellowPrinter.Printf("Verification issue: %s\n", out.VerificationError) + } } printer.Printf("Detector Type: %s\n", out.DetectorType) printer.Printf("Decoder Type: %s\n", out.DecoderType) From bc48e9dc23963ba670a5c56b37b7132297d68cc0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 14:37:25 -0700 Subject: [PATCH 29/32] fix(deps): update module github.com/aws/aws-sdk-go to v1.51.27 (#2735) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index a002addcc..b3400b047 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/TheZeroSlave/zapsentry v1.23.0 github.com/adrg/strutil v0.3.1 github.com/alecthomas/kingpin/v2 v2.4.0 - github.com/aws/aws-sdk-go v1.51.26 + github.com/aws/aws-sdk-go v1.51.27 github.com/aymanbagabas/go-osc52 v1.2.2 github.com/bill-rich/go-syslog v0.0.0-20220413021637-49edb52a574c github.com/bitfinexcom/bitfinex-api-go v0.0.0-20210608095005-9e0b26f200fb diff --git a/go.sum b/go.sum index 170f976c7..7448ab80f 100644 --- a/go.sum +++ b/go.sum @@ -150,6 +150,8 @@ github.com/aws/aws-sdk-go v1.51.25 h1:DjTT8mtmsachhV6yrXR8+yhnG6120dazr720nopRsl github.com/aws/aws-sdk-go v1.51.25/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go v1.51.26 h1:fYud+95lh9B89fAlRtgYpY8CcJF4T7JrWkLMq4GGCOo= github.com/aws/aws-sdk-go v1.51.26/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.51.27 h1:ZprksHovT4rFfNBHB+Bc/0p4PTntAnTlZP39DMA/Qp8= +github.com/aws/aws-sdk-go v1.51.27/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw= github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/aymanbagabas/go-osc52 v1.2.2 h1:NT7wkhEhPTcKnBCdPi9djmyy9L3JOL4+3SsfJyqptCo= From 46e0da1a92735423aaa63a5e17004d6322af3f4a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 14:37:39 -0700 Subject: [PATCH 30/32] fix(deps): update module google.golang.org/api to v0.176.1 (#2736) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 6 +++--- go.sum | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b3400b047..829a17ef5 100644 --- a/go.mod +++ b/go.mod @@ -90,7 +90,7 @@ require ( golang.org/x/oauth2 v0.19.0 golang.org/x/sync v0.7.0 golang.org/x/text v0.14.0 - google.golang.org/api v0.176.0 + google.golang.org/api v0.176.1 google.golang.org/protobuf v1.33.0 gopkg.in/h2non/gock.v1 v1.1.2 pgregory.net/rapid v1.1.0 @@ -99,8 +99,8 @@ require ( require ( cloud.google.com/go v0.112.1 // indirect - cloud.google.com/go/auth v0.2.2 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.1 // indirect + cloud.google.com/go/auth v0.3.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/compute v1.24.0 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/iam v1.1.7 // indirect diff --git a/go.sum b/go.sum index 7448ab80f..7face4e49 100644 --- a/go.sum +++ b/go.sum @@ -13,10 +13,14 @@ cloud.google.com/go/auth v0.2.0 h1:y6oTcpMSbOcXbwYgUUrvI+mrQ2xbrcdpPgtVbCGTLTk= cloud.google.com/go/auth v0.2.0/go.mod h1:+yb+oy3/P0geX6DLKlqiGHARGR6EX2GRtYCzWOCQSbU= cloud.google.com/go/auth v0.2.2 h1:gmxNJs4YZYcw6YvKRtVBaF2fyUE6UrWPyzU8jHvYfmI= cloud.google.com/go/auth v0.2.2/go.mod h1:2bDNJWtWziDT3Pu1URxHHbkHE/BbOCuyUiKIGcNvafo= +cloud.google.com/go/auth v0.3.0 h1:PRyzEpGfx/Z9e8+lHsbkoUVXD0gnu4MNmm7Gp8TQNIs= +cloud.google.com/go/auth v0.3.0/go.mod h1:lBv6NKTWp8E3LPzmO1TbiiRKc4drLOfHsgmlH9ogv5w= cloud.google.com/go/auth/oauth2adapt v0.2.0 h1:FR8zevgQwu+8CqiOT5r6xCmJa3pJC/wdXEEPF1OkNhA= cloud.google.com/go/auth/oauth2adapt v0.2.0/go.mod h1:AfqujpDAlTfLfeCIl/HJZZlIxD8+nJoZ5e0x1IxGq5k= cloud.google.com/go/auth/oauth2adapt v0.2.1 h1:VSPmMmUlT8CkIZ2PzD9AlLN+R3+D1clXMWHHa6vG/Ag= cloud.google.com/go/auth/oauth2adapt v0.2.1/go.mod h1:tOdK/k+D2e4GEwfBRA48dKNQiDsqIXxLh7VU319eV0g= +cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= +cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= 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/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= @@ -1103,6 +1107,8 @@ google.golang.org/api v0.175.0 h1:9bMDh10V9cBuU8N45Wlc3cKkItfqMRV0Fi8UscLEtbY= google.golang.org/api v0.175.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8= google.golang.org/api v0.176.0 h1:dHj1/yv5Dm/eQTXiP9hNCRT3xzJHWXeNdRq29XbMxoE= google.golang.org/api v0.176.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8= +google.golang.org/api v0.176.1 h1:DJSXnV6An+NhJ1J+GWtoF2nHEuqB1VNoTfnIbjNvwD4= +google.golang.org/api v0.176.1/go.mod h1:j2MaSDYcvYV1lkZ1+SMW4IeF90SrEyFA+tluDYWRrFg= 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= From ea4d9d2d32f45e77893ecb6338d7c6bd7cddb3ec Mon Sep 17 00:00:00 2001 From: ahrav Date: Tue, 23 Apr 2024 14:38:28 -0700 Subject: [PATCH 31/32] [bug] - Correctly return the checked out buffer to the pool (#2732) * Make sure to return the buffer to the pool * update comment * defer the return * remove anonymous function --- .../bufferedfilewriter.go | 4 +++ .../bufferedfilewriter_test.go | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/pkg/writers/buffered_file_writer/bufferedfilewriter.go b/pkg/writers/buffered_file_writer/bufferedfilewriter.go index 6d254d581..9908dde20 100644 --- a/pkg/writers/buffered_file_writer/bufferedfilewriter.go +++ b/pkg/writers/buffered_file_writer/bufferedfilewriter.go @@ -178,6 +178,10 @@ func (w *BufferedFileWriter) CloseForWriting() error { return nil } + // Return the buffer to the pool since the contents have been written to the file and + // the writer is transitioning to read-only mode. + defer w.bufPool.Put(w.buf) + if w.buf.Len() > 0 { _, err := w.buf.WriteTo(w.file) if err != nil { diff --git a/pkg/writers/buffered_file_writer/bufferedfilewriter_test.go b/pkg/writers/buffered_file_writer/bufferedfilewriter_test.go index b99378165..d79306fd6 100644 --- a/pkg/writers/buffered_file_writer/bufferedfilewriter_test.go +++ b/pkg/writers/buffered_file_writer/bufferedfilewriter_test.go @@ -9,6 +9,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/trufflesecurity/trufflehog/v3/pkg/context" + "github.com/trufflesecurity/trufflehog/v3/pkg/writers/buffer" ) func TestBufferedFileWriterNewThreshold(t *testing.T) { @@ -506,3 +507,33 @@ func BenchmarkBufferedFileWriterWriteSmall(b *testing.B) { rc.Close() } } + +func TestBufferWriterCloseForWritingWithFile(t *testing.T) { + bufPool := buffer.NewBufferPool() + + ctx := context.Background() + buf := bufPool.Get(ctx) + writer := &BufferedFileWriter{ + threshold: 10, + bufPool: bufPool, + buf: buf, + } + + // Write data exceeding the threshold to ensure a file is created. + data := []byte("this is a longer string exceeding the threshold") + _, err := writer.Write(data) + assert.NoError(t, err) + + err = writer.CloseForWriting() + assert.NoError(t, err) + assert.Equal(t, readOnly, writer.state) + + rdr, err := writer.ReadCloser() + assert.NoError(t, err) + defer rdr.Close() + + // Get a buffer from the pool and check if it is the same buffer used in the writer. + bufFromPool := bufPool.Get(ctx) + assert.Same(t, buf, bufFromPool, "Buffer should be returned to the pool") + bufPool.Put(bufFromPool) +} From 299f1a5596259d4368511944dc6915c0b2057d0a Mon Sep 17 00:00:00 2001 From: Ahrav Dutta Date: Tue, 23 Apr 2024 14:42:16 -0700 Subject: [PATCH 32/32] go mod tidy --- go.mod | 1 - go.sum | 12 ------------ 2 files changed, 13 deletions(-) diff --git a/go.mod b/go.mod index 10e2e725c..ba076ed44 100644 --- a/go.mod +++ b/go.mod @@ -103,7 +103,6 @@ require ( cloud.google.com/go v0.112.1 // indirect cloud.google.com/go/auth v0.3.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect - cloud.google.com/go/compute v1.24.0 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/iam v1.1.7 // indirect cloud.google.com/go/longrunning v0.5.5 // indirect diff --git a/go.sum b/go.sum index c5ffb2345..441476880 100644 --- a/go.sum +++ b/go.sum @@ -9,14 +9,8 @@ cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6T cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= -cloud.google.com/go/auth v0.2.2 h1:gmxNJs4YZYcw6YvKRtVBaF2fyUE6UrWPyzU8jHvYfmI= -cloud.google.com/go/auth v0.2.2/go.mod h1:2bDNJWtWziDT3Pu1URxHHbkHE/BbOCuyUiKIGcNvafo= cloud.google.com/go/auth v0.3.0 h1:PRyzEpGfx/Z9e8+lHsbkoUVXD0gnu4MNmm7Gp8TQNIs= cloud.google.com/go/auth v0.3.0/go.mod h1:lBv6NKTWp8E3LPzmO1TbiiRKc4drLOfHsgmlH9ogv5w= -cloud.google.com/go/auth/oauth2adapt v0.2.0 h1:FR8zevgQwu+8CqiOT5r6xCmJa3pJC/wdXEEPF1OkNhA= -cloud.google.com/go/auth/oauth2adapt v0.2.0/go.mod h1:AfqujpDAlTfLfeCIl/HJZZlIxD8+nJoZ5e0x1IxGq5k= -cloud.google.com/go/auth/oauth2adapt v0.2.1 h1:VSPmMmUlT8CkIZ2PzD9AlLN+R3+D1clXMWHHa6vG/Ag= -cloud.google.com/go/auth/oauth2adapt v0.2.1/go.mod h1:tOdK/k+D2e4GEwfBRA48dKNQiDsqIXxLh7VU319eV0g= cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= @@ -123,10 +117,6 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/aws/aws-sdk-go v1.51.25 h1:DjTT8mtmsachhV6yrXR8+yhnG6120dazr720nopRsls= -github.com/aws/aws-sdk-go v1.51.25/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go v1.51.26 h1:fYud+95lh9B89fAlRtgYpY8CcJF4T7JrWkLMq4GGCOo= -github.com/aws/aws-sdk-go v1.51.26/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go v1.51.27 h1:ZprksHovT4rFfNBHB+Bc/0p4PTntAnTlZP39DMA/Qp8= github.com/aws/aws-sdk-go v1.51.27/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw= @@ -1027,8 +1017,6 @@ google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb 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.176.0 h1:dHj1/yv5Dm/eQTXiP9hNCRT3xzJHWXeNdRq29XbMxoE= -google.golang.org/api v0.176.0/go.mod h1:Rra+ltKu14pps/4xTycZfobMgLpbosoaaL7c+SEMrO8= google.golang.org/api v0.176.1 h1:DJSXnV6An+NhJ1J+GWtoF2nHEuqB1VNoTfnIbjNvwD4= google.golang.org/api v0.176.1/go.mod h1:j2MaSDYcvYV1lkZ1+SMW4IeF90SrEyFA+tluDYWRrFg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=