From f8c16c68baafc81dca9d784e9230243872e21097 Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Sun, 20 Feb 2022 11:29:19 -0500 Subject: [PATCH 01/15] feat(core/plugins): updated policy language grammar (action-->actions); updated plugins to build with processor; added initial instructions on how to build and run plugins Signed-off-by: Frederico Araujo --- driver/go.mod | 6 +++--- driver/go.sum | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/driver/go.mod b/driver/go.mod index 5b0eb6f7..5f4dfdfd 100644 --- a/driver/go.mod +++ b/driver/go.mod @@ -25,8 +25,8 @@ require ( github.com/actgardner/gogen-avro/v7 v7.3.1 github.com/linkedin/goavro v2.1.0+incompatible github.com/spf13/viper v1.6.3 - github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f - github.com/sysflow-telemetry/sf-processor/core v0.0.0-20210709164444-484da05c2a85 + github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 + github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220218215337-cb82d403e9f6 ) require ( @@ -35,7 +35,7 @@ require ( github.com/RackSec/srslog v0.0.0-20180709174129-a4725f04ec91 // indirect github.com/antlr/antlr4 v0.0.0-20200417160354-8c50731894e0 // indirect github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef // indirect - github.com/cespare/xxhash v1.1.0 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/elastic/go-elasticsearch/v8 v8.0.0-20210427093042-01613f93a7ae // indirect github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/go-openapi/errors v0.19.8 // indirect diff --git a/driver/go.sum b/driver/go.sum index 1922734d..6602050a 100644 --- a/driver/go.sum +++ b/driver/go.sum @@ -64,7 +64,6 @@ github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfy github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -112,6 +111,8 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= @@ -705,7 +706,6 @@ github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:s github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= @@ -750,8 +750,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f h1:quICy9nfEUaCRZpn0SDI3q6iRVfETcGq3LD/Bw1DGjc= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f/go.mod h1:6gzcis2lTDCL37xUZg+6u1JU0gAodMIvqp5wDl4ddms= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 h1:5PfMlv3Su4dSvHnXJgyZ1t9U3up9ZEnhujBW7AryUCM= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= From 27b07acc32e9780632773d69b42b200c00a995aa Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Sun, 20 Feb 2022 11:34:58 -0500 Subject: [PATCH 02/15] feat(core/plugins): updated policy language grammar (action-->actions); updated plugins to build with processor; added initial instructions on how to build and run plugins Signed-off-by: Frederico Araujo --- core/exporter/encoders/ecs.go | 12 +- core/exporter/encoders/occurrence.go | 2 +- core/go.mod | 4 +- core/go.sum | 8 +- core/policyengine/engine/actionhandler.go | 2 +- core/policyengine/engine/config.go | 2 +- core/policyengine/engine/fieldmapper.go | 2 +- core/policyengine/lang/Sfpl.g4 | 8 +- core/policyengine/lang/parser/Sfpl.interp | 4 +- core/policyengine/lang/parser/Sfpl.tokens | 4 +- .../policyengine/lang/parser/SfplLexer.interp | 8 +- .../policyengine/lang/parser/SfplLexer.tokens | 4 +- core/policyengine/lang/parser/sfpl_lexer.go | 465 ++++----- core/policyengine/lang/parser/sfpl_parser.go | 40 +- docs/POLICIES.md | 5 +- plugins/actions/example/READMEmd | 52 + plugins/actions/example/go.mod | 13 +- plugins/actions/example/go.sum | 937 +++++++++++++++++- plugins/actions/example/now.go | 2 + plugins/actions/example/pipeline.actions.json | 23 + plugins/actions/example/policy.yaml | 4 + plugins/handlers/printer/go.mod | 11 +- plugins/handlers/printer/go.sum | 33 +- .../handlers/printer/pipeline.printer.json | 10 + plugins/handlers/printer/printer.go | 32 +- plugins/processors/example/go.mod | 12 +- plugins/processors/example/go.sum | 117 ++- 27 files changed, 1446 insertions(+), 370 deletions(-) create mode 100644 plugins/actions/example/READMEmd create mode 100644 plugins/actions/example/pipeline.actions.json create mode 100644 plugins/actions/example/policy.yaml create mode 100644 plugins/handlers/printer/pipeline.printer.json diff --git a/core/exporter/encoders/ecs.go b/core/exporter/encoders/ecs.go index 7d6fa616..20668f31 100644 --- a/core/exporter/encoders/ecs.go +++ b/core/exporter/encoders/ecs.go @@ -28,7 +28,7 @@ import ( "strconv" "strings" - "github.com/cespare/xxhash" + "github.com/cespare/xxhash/v2" "github.com/satta/gommunityid" "github.com/sysflow-telemetry/sf-apis/go/sfgo" "github.com/sysflow-telemetry/sf-processor/core/exporter/commons" @@ -210,10 +210,10 @@ func (ecs *ECSRecord) encodeFileFlow(rec *engine.Record) { category := ECS_CAT_FILE eventType := ECS_TYPE_ACCESS action := category + "-" + eventType - if opFlags&sfgo.OP_READ_RECV == sfgo.OP_READ_RECV && (rbytes > 0 || rops > 0 ) { + if opFlags&sfgo.OP_READ_RECV == sfgo.OP_READ_RECV && (rbytes > 0 || rops > 0) { action = action + "-" + ECS_ACTION_READ } - if opFlags&sfgo.OP_WRITE_SEND == sfgo.OP_WRITE_SEND && ( wbytes > 0 || wops > 0 ) { + if opFlags&sfgo.OP_WRITE_SEND == sfgo.OP_WRITE_SEND && (wbytes > 0 || wops > 0) { eventType = ECS_TYPE_CHANGE action = action + "-" + ECS_ACTION_WRITE } @@ -311,15 +311,15 @@ func encodeContainer(rec *engine.Record) JSONData { func encodeUser(rec *engine.Record) JSONData { gname := engine.Mapper.MapStr(engine.SF_PROC_GROUP)(rec) group := JSONData{ - ECS_GROUP_ID: engine.Mapper.MapInt(engine.SF_PROC_GID)(rec), + ECS_GROUP_ID: engine.Mapper.MapInt(engine.SF_PROC_GID)(rec), } if gname != sfgo.Zeros.String { group[ECS_GROUP_NAME] = gname } uname := engine.Mapper.MapStr(engine.SF_PROC_USER)(rec) user := JSONData{ - ECS_GROUP: group, - ECS_USER_ID: engine.Mapper.MapInt(engine.SF_PROC_UID)(rec), + ECS_GROUP: group, + ECS_USER_ID: engine.Mapper.MapInt(engine.SF_PROC_UID)(rec), } if uname != sfgo.Zeros.String { user[ECS_USER_NAME] = uname diff --git a/core/exporter/encoders/occurrence.go b/core/exporter/encoders/occurrence.go index 22f604be..0a7506bb 100644 --- a/core/exporter/encoders/occurrence.go +++ b/core/exporter/encoders/occurrence.go @@ -31,7 +31,7 @@ import ( "strings" "time" - "github.com/cespare/xxhash" + "github.com/cespare/xxhash/v2" "github.com/linkedin/goavro" cmap "github.com/orcaman/concurrent-map" "github.com/steakknife/bloomfilter" diff --git a/core/go.mod b/core/go.mod index 776dcf2d..72f44e7a 100644 --- a/core/go.mod +++ b/core/go.mod @@ -27,7 +27,7 @@ require ( github.com/RackSec/srslog v0.0.0-20180709174129-a4725f04ec91 github.com/actgardner/gogen-avro/v7 v7.3.1 github.com/antlr/antlr4 v0.0.0-20200417160354-8c50731894e0 - github.com/cespare/xxhash v1.1.0 + github.com/cespare/xxhash/v2 v2.1.2 github.com/elastic/go-elasticsearch/v8 v8.0.0-20210427093042-01613f93a7ae github.com/fsnotify/fsnotify v1.4.9 github.com/linkedin/goavro v2.1.0+incompatible @@ -37,7 +37,7 @@ require ( github.com/satta/gommunityid v0.0.0-20210315182841-1cdcb73ce408 github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 github.com/stretchr/testify v1.7.0 - github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f + github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 ) require ( diff --git a/core/go.sum b/core/go.sum index 3ec47aa0..99a68431 100644 --- a/core/go.sum +++ b/core/go.sum @@ -64,7 +64,6 @@ github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfy github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -112,6 +111,8 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= @@ -698,7 +699,6 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1 github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= @@ -735,8 +735,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f h1:quICy9nfEUaCRZpn0SDI3q6iRVfETcGq3LD/Bw1DGjc= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f/go.mod h1:6gzcis2lTDCL37xUZg+6u1JU0gAodMIvqp5wDl4ddms= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 h1:5PfMlv3Su4dSvHnXJgyZ1t9U3up9ZEnhujBW7AryUCM= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= diff --git a/core/policyengine/engine/actionhandler.go b/core/policyengine/engine/actionhandler.go index 86dd5087..22dcc3ea 100644 --- a/core/policyengine/engine/actionhandler.go +++ b/core/policyengine/engine/actionhandler.go @@ -53,7 +53,7 @@ func (ah *ActionHandler) loadUserActions(dir string) { if paths, err := ioutils.ListFilePaths(dir, ".so"); err == nil { var plug *plugin.Plugin for _, path := range paths { - logger.Info.Println("Loading user-defined actions from file " + path) + logger.Info.Println("Loading user-defined action from file " + path) if plug, err = plugin.Open(path); err != nil { logger.Error.Println(err.Error()) continue diff --git a/core/policyengine/engine/config.go b/core/policyengine/engine/config.go index 8b798a66..4eb3919b 100644 --- a/core/policyengine/engine/config.go +++ b/core/policyengine/engine/config.go @@ -54,7 +54,7 @@ type Config struct { // CreateConfig creates a new config object from config dictionary. func CreateConfig(conf map[string]interface{}) (Config, error) { - var c Config = Config{Mode: AlertMode, Concurrency: 5, Monitor: NoneType, MonitorInterval: 30 * time.Second} // default values + var c Config = Config{Mode: AlertMode, Concurrency: 5, Monitor: NoneType, MonitorInterval: 30 * time.Second, ActionDir: "../resources/actions"} // default values var err error if v, ok := conf[PoliciesConfigKey].(string); ok { diff --git a/core/policyengine/engine/fieldmapper.go b/core/policyengine/engine/fieldmapper.go index 0df4e76c..e87506e4 100644 --- a/core/policyengine/engine/fieldmapper.go +++ b/core/policyengine/engine/fieldmapper.go @@ -27,7 +27,7 @@ import ( "strconv" "strings" - "github.com/cespare/xxhash" + "github.com/cespare/xxhash/v2" "github.com/sysflow-telemetry/sf-apis/go/logger" "github.com/sysflow-telemetry/sf-apis/go/sfgo" ) diff --git a/core/policyengine/lang/Sfpl.g4 b/core/policyengine/lang/Sfpl.g4 index ebc0f4c8..8176a82d 100644 --- a/core/policyengine/lang/Sfpl.g4 +++ b/core/policyengine/lang/Sfpl.g4 @@ -9,7 +9,7 @@ NAME: 'name'; ITEMS: 'items'; COND: 'condition'; DESC: 'desc' ; -ACTION: 'action'; +ACTIONS: 'actions'; OUTPUT: 'output'; PRIORITY: 'priority'; TAGS: 'tags'; @@ -29,11 +29,11 @@ defs ; prule - : DECL RULE DEF text DESC DEF text COND DEF expression (OUTPUT DEF text | ACTION DEF actions | PRIORITY DEF severity | TAGS DEF tags | PREFILTER DEF prefilter | ENABLED DEF enabled | WARNEVTTYPE DEF warnevttype | SKIPUNKNOWN DEF skipunknown)* + : DECL RULE DEF text DESC DEF text COND DEF expression (OUTPUT DEF text | ACTIONS DEF actions | PRIORITY DEF severity | TAGS DEF tags | PREFILTER DEF prefilter | ENABLED DEF enabled | WARNEVTTYPE DEF warnevttype | SKIPUNKNOWN DEF skipunknown)* ; srule - : DECL RULE DEF text DESC DEF text COND DEF expression (OUTPUT DEF text | ACTION DEF actions | PRIORITY DEF severity | TAGS DEF tags | PREFILTER DEF prefilter | ENABLED DEF enabled | WARNEVTTYPE DEF warnevttype | SKIPUNKNOWN DEF skipunknown)* + : DECL RULE DEF text DESC DEF text COND DEF expression (OUTPUT DEF text | ACTIONS DEF actions | PRIORITY DEF severity | TAGS DEF tags | PREFILTER DEF prefilter | ENABLED DEF enabled | WARNEVTTYPE DEF warnevttype | SKIPUNKNOWN DEF skipunknown)* ; pfilter @@ -134,7 +134,7 @@ atom text : ({!(p.GetCurrentToken().GetText() == "desc" || p.GetCurrentToken().GetText() == "condition" || - p.GetCurrentToken().GetText() == "action" || + p.GetCurrentToken().GetText() == "actions" || p.GetCurrentToken().GetText() == "output" || p.GetCurrentToken().GetText() == "priority" || p.GetCurrentToken().GetText() == "tags" || diff --git a/core/policyengine/lang/parser/Sfpl.interp b/core/policyengine/lang/parser/Sfpl.interp index eb4a8b39..b8d03eb6 100644 --- a/core/policyengine/lang/parser/Sfpl.interp +++ b/core/policyengine/lang/parser/Sfpl.interp @@ -9,7 +9,7 @@ null 'items' 'condition' 'desc' -'action' +'actions' 'output' 'priority' 'tags' @@ -66,7 +66,7 @@ NAME ITEMS COND DESC -ACTION +ACTIONS OUTPUT PRIORITY TAGS diff --git a/core/policyengine/lang/parser/Sfpl.tokens b/core/policyengine/lang/parser/Sfpl.tokens index da028ade..e74d954b 100644 --- a/core/policyengine/lang/parser/Sfpl.tokens +++ b/core/policyengine/lang/parser/Sfpl.tokens @@ -7,7 +7,7 @@ NAME=6 ITEMS=7 COND=8 DESC=9 -ACTION=10 +ACTIONS=10 OUTPUT=11 PRIORITY=12 TAGS=13 @@ -61,7 +61,7 @@ ANY=54 'items'=7 'condition'=8 'desc'=9 -'action'=10 +'actions'=10 'output'=11 'priority'=12 'tags'=13 diff --git a/core/policyengine/lang/parser/SfplLexer.interp b/core/policyengine/lang/parser/SfplLexer.interp index 03da2a14..7a6a0f10 100644 --- a/core/policyengine/lang/parser/SfplLexer.interp +++ b/core/policyengine/lang/parser/SfplLexer.interp @@ -9,7 +9,7 @@ null 'items' 'condition' 'desc' -'action' +'actions' 'output' 'priority' 'tags' @@ -66,7 +66,7 @@ NAME ITEMS COND DESC -ACTION +ACTIONS OUTPUT PRIORITY TAGS @@ -122,7 +122,7 @@ NAME ITEMS COND DESC -ACTION +ACTIONS OUTPUT PRIORITY TAGS @@ -204,4 +204,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 56, 708, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 7, 43, 432, 10, 43, 12, 43, 14, 43, 435, 11, 43, 3, 43, 5, 43, 438, 10, 43, 3, 44, 3, 44, 5, 44, 442, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 460, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 533, 10, 46, 3, 47, 3, 47, 3, 47, 5, 47, 538, 10, 47, 3, 47, 3, 47, 3, 47, 5, 47, 543, 10, 47, 3, 47, 3, 47, 7, 47, 547, 10, 47, 12, 47, 14, 47, 550, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 555, 10, 47, 12, 47, 14, 47, 558, 11, 47, 3, 48, 6, 48, 561, 10, 48, 13, 48, 14, 48, 562, 3, 48, 3, 48, 6, 48, 567, 10, 48, 13, 48, 14, 48, 568, 5, 48, 571, 10, 48, 3, 49, 3, 49, 7, 49, 575, 10, 49, 12, 49, 14, 49, 578, 11, 49, 3, 50, 3, 50, 3, 50, 5, 50, 583, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 590, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 599, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 609, 10, 50, 3, 50, 3, 50, 3, 50, 5, 50, 614, 10, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 7, 52, 621, 10, 52, 12, 52, 14, 52, 624, 11, 52, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 630, 10, 53, 3, 54, 6, 54, 633, 10, 54, 13, 54, 14, 54, 634, 3, 54, 3, 54, 3, 55, 5, 55, 640, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 7, 56, 648, 10, 56, 12, 56, 14, 56, 651, 11, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 622, 2, 84, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 2, 105, 2, 107, 53, 109, 54, 111, 55, 113, 56, 115, 2, 117, 2, 119, 2, 121, 2, 123, 2, 125, 2, 127, 2, 129, 2, 131, 2, 133, 2, 135, 2, 137, 2, 139, 2, 141, 2, 143, 2, 145, 2, 147, 2, 149, 2, 151, 2, 153, 2, 155, 2, 157, 2, 159, 2, 161, 2, 163, 2, 165, 2, 3, 2, 34, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 7, 2, 47, 48, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 48, 49, 67, 92, 99, 124, 7, 2, 44, 44, 47, 59, 67, 92, 97, 97, 99, 124, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 67, 67, 99, 99, 4, 2, 68, 68, 100, 100, 4, 2, 69, 69, 101, 101, 4, 2, 70, 70, 102, 102, 4, 2, 71, 71, 103, 103, 4, 2, 72, 72, 104, 104, 4, 2, 73, 73, 105, 105, 4, 2, 74, 74, 106, 106, 4, 2, 75, 75, 107, 107, 4, 2, 76, 76, 108, 108, 4, 2, 77, 77, 109, 109, 4, 2, 78, 78, 110, 110, 4, 2, 79, 79, 111, 111, 4, 2, 80, 80, 112, 112, 4, 2, 81, 81, 113, 113, 4, 2, 82, 82, 114, 114, 4, 2, 83, 83, 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, 117, 4, 2, 86, 86, 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, 120, 4, 2, 89, 89, 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, 91, 123, 123, 4, 2, 92, 92, 124, 124, 2, 714, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 3, 167, 3, 2, 2, 2, 5, 172, 3, 2, 2, 2, 7, 179, 3, 2, 2, 2, 9, 184, 3, 2, 2, 2, 11, 190, 3, 2, 2, 2, 13, 195, 3, 2, 2, 2, 15, 200, 3, 2, 2, 2, 17, 206, 3, 2, 2, 2, 19, 216, 3, 2, 2, 2, 21, 221, 3, 2, 2, 2, 23, 228, 3, 2, 2, 2, 25, 235, 3, 2, 2, 2, 27, 244, 3, 2, 2, 2, 29, 249, 3, 2, 2, 2, 31, 259, 3, 2, 2, 2, 33, 267, 3, 2, 2, 2, 35, 281, 3, 2, 2, 2, 37, 304, 3, 2, 2, 2, 39, 311, 3, 2, 2, 2, 41, 335, 3, 2, 2, 2, 43, 339, 3, 2, 2, 2, 45, 342, 3, 2, 2, 2, 47, 346, 3, 2, 2, 2, 49, 348, 3, 2, 2, 2, 51, 351, 3, 2, 2, 2, 53, 353, 3, 2, 2, 2, 55, 356, 3, 2, 2, 2, 57, 358, 3, 2, 2, 2, 59, 361, 3, 2, 2, 2, 61, 364, 3, 2, 2, 2, 63, 373, 3, 2, 2, 2, 65, 383, 3, 2, 2, 2, 67, 394, 3, 2, 2, 2, 69, 403, 3, 2, 2, 2, 71, 410, 3, 2, 2, 2, 73, 417, 3, 2, 2, 2, 75, 419, 3, 2, 2, 2, 77, 421, 3, 2, 2, 2, 79, 423, 3, 2, 2, 2, 81, 425, 3, 2, 2, 2, 83, 427, 3, 2, 2, 2, 85, 429, 3, 2, 2, 2, 87, 441, 3, 2, 2, 2, 89, 459, 3, 2, 2, 2, 91, 532, 3, 2, 2, 2, 93, 534, 3, 2, 2, 2, 95, 560, 3, 2, 2, 2, 97, 572, 3, 2, 2, 2, 99, 613, 3, 2, 2, 2, 101, 615, 3, 2, 2, 2, 103, 622, 3, 2, 2, 2, 105, 629, 3, 2, 2, 2, 107, 632, 3, 2, 2, 2, 109, 639, 3, 2, 2, 2, 111, 645, 3, 2, 2, 2, 113, 654, 3, 2, 2, 2, 115, 656, 3, 2, 2, 2, 117, 658, 3, 2, 2, 2, 119, 660, 3, 2, 2, 2, 121, 662, 3, 2, 2, 2, 123, 664, 3, 2, 2, 2, 125, 666, 3, 2, 2, 2, 127, 668, 3, 2, 2, 2, 129, 670, 3, 2, 2, 2, 131, 672, 3, 2, 2, 2, 133, 674, 3, 2, 2, 2, 135, 676, 3, 2, 2, 2, 137, 678, 3, 2, 2, 2, 139, 680, 3, 2, 2, 2, 141, 682, 3, 2, 2, 2, 143, 684, 3, 2, 2, 2, 145, 686, 3, 2, 2, 2, 147, 688, 3, 2, 2, 2, 149, 690, 3, 2, 2, 2, 151, 692, 3, 2, 2, 2, 153, 694, 3, 2, 2, 2, 155, 696, 3, 2, 2, 2, 157, 698, 3, 2, 2, 2, 159, 700, 3, 2, 2, 2, 161, 702, 3, 2, 2, 2, 163, 704, 3, 2, 2, 2, 165, 706, 3, 2, 2, 2, 167, 168, 7, 116, 2, 2, 168, 169, 7, 119, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 103, 2, 2, 171, 4, 3, 2, 2, 2, 172, 173, 7, 104, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 110, 2, 2, 175, 176, 7, 118, 2, 2, 176, 177, 7, 103, 2, 2, 177, 178, 7, 116, 2, 2, 178, 6, 3, 2, 2, 2, 179, 180, 7, 102, 2, 2, 180, 181, 7, 116, 2, 2, 181, 182, 7, 113, 2, 2, 182, 183, 7, 114, 2, 2, 183, 8, 3, 2, 2, 2, 184, 185, 7, 111, 2, 2, 185, 186, 7, 99, 2, 2, 186, 187, 7, 101, 2, 2, 187, 188, 7, 116, 2, 2, 188, 189, 7, 113, 2, 2, 189, 10, 3, 2, 2, 2, 190, 191, 7, 110, 2, 2, 191, 192, 7, 107, 2, 2, 192, 193, 7, 117, 2, 2, 193, 194, 7, 118, 2, 2, 194, 12, 3, 2, 2, 2, 195, 196, 7, 112, 2, 2, 196, 197, 7, 99, 2, 2, 197, 198, 7, 111, 2, 2, 198, 199, 7, 103, 2, 2, 199, 14, 3, 2, 2, 2, 200, 201, 7, 107, 2, 2, 201, 202, 7, 118, 2, 2, 202, 203, 7, 103, 2, 2, 203, 204, 7, 111, 2, 2, 204, 205, 7, 117, 2, 2, 205, 16, 3, 2, 2, 2, 206, 207, 7, 101, 2, 2, 207, 208, 7, 113, 2, 2, 208, 209, 7, 112, 2, 2, 209, 210, 7, 102, 2, 2, 210, 211, 7, 107, 2, 2, 211, 212, 7, 118, 2, 2, 212, 213, 7, 107, 2, 2, 213, 214, 7, 113, 2, 2, 214, 215, 7, 112, 2, 2, 215, 18, 3, 2, 2, 2, 216, 217, 7, 102, 2, 2, 217, 218, 7, 103, 2, 2, 218, 219, 7, 117, 2, 2, 219, 220, 7, 101, 2, 2, 220, 20, 3, 2, 2, 2, 221, 222, 7, 99, 2, 2, 222, 223, 7, 101, 2, 2, 223, 224, 7, 118, 2, 2, 224, 225, 7, 107, 2, 2, 225, 226, 7, 113, 2, 2, 226, 227, 7, 112, 2, 2, 227, 22, 3, 2, 2, 2, 228, 229, 7, 113, 2, 2, 229, 230, 7, 119, 2, 2, 230, 231, 7, 118, 2, 2, 231, 232, 7, 114, 2, 2, 232, 233, 7, 119, 2, 2, 233, 234, 7, 118, 2, 2, 234, 24, 3, 2, 2, 2, 235, 236, 7, 114, 2, 2, 236, 237, 7, 116, 2, 2, 237, 238, 7, 107, 2, 2, 238, 239, 7, 113, 2, 2, 239, 240, 7, 116, 2, 2, 240, 241, 7, 107, 2, 2, 241, 242, 7, 118, 2, 2, 242, 243, 7, 123, 2, 2, 243, 26, 3, 2, 2, 2, 244, 245, 7, 118, 2, 2, 245, 246, 7, 99, 2, 2, 246, 247, 7, 105, 2, 2, 247, 248, 7, 117, 2, 2, 248, 28, 3, 2, 2, 2, 249, 250, 7, 114, 2, 2, 250, 251, 7, 116, 2, 2, 251, 252, 7, 103, 2, 2, 252, 253, 7, 104, 2, 2, 253, 254, 7, 107, 2, 2, 254, 255, 7, 110, 2, 2, 255, 256, 7, 118, 2, 2, 256, 257, 7, 103, 2, 2, 257, 258, 7, 116, 2, 2, 258, 30, 3, 2, 2, 2, 259, 260, 7, 103, 2, 2, 260, 261, 7, 112, 2, 2, 261, 262, 7, 99, 2, 2, 262, 263, 7, 100, 2, 2, 263, 264, 7, 110, 2, 2, 264, 265, 7, 103, 2, 2, 265, 266, 7, 102, 2, 2, 266, 32, 3, 2, 2, 2, 267, 268, 7, 121, 2, 2, 268, 269, 7, 99, 2, 2, 269, 270, 7, 116, 2, 2, 270, 271, 7, 112, 2, 2, 271, 272, 7, 97, 2, 2, 272, 273, 7, 103, 2, 2, 273, 274, 7, 120, 2, 2, 274, 275, 7, 118, 2, 2, 275, 276, 7, 118, 2, 2, 276, 277, 7, 123, 2, 2, 277, 278, 7, 114, 2, 2, 278, 279, 7, 103, 2, 2, 279, 280, 7, 117, 2, 2, 280, 34, 3, 2, 2, 2, 281, 282, 7, 117, 2, 2, 282, 283, 7, 109, 2, 2, 283, 284, 7, 107, 2, 2, 284, 285, 7, 114, 2, 2, 285, 286, 7, 47, 2, 2, 286, 287, 7, 107, 2, 2, 287, 288, 7, 104, 2, 2, 288, 289, 7, 47, 2, 2, 289, 290, 7, 119, 2, 2, 290, 291, 7, 112, 2, 2, 291, 292, 7, 109, 2, 2, 292, 293, 7, 112, 2, 2, 293, 294, 7, 113, 2, 2, 294, 295, 7, 121, 2, 2, 295, 296, 7, 112, 2, 2, 296, 297, 7, 47, 2, 2, 297, 298, 7, 104, 2, 2, 298, 299, 7, 107, 2, 2, 299, 300, 7, 110, 2, 2, 300, 301, 7, 118, 2, 2, 301, 302, 7, 103, 2, 2, 302, 303, 7, 116, 2, 2, 303, 36, 3, 2, 2, 2, 304, 305, 7, 99, 2, 2, 305, 306, 7, 114, 2, 2, 306, 307, 7, 114, 2, 2, 307, 308, 7, 103, 2, 2, 308, 309, 7, 112, 2, 2, 309, 310, 7, 102, 2, 2, 310, 38, 3, 2, 2, 2, 311, 312, 7, 116, 2, 2, 312, 313, 7, 103, 2, 2, 313, 314, 7, 115, 2, 2, 314, 315, 7, 119, 2, 2, 315, 316, 7, 107, 2, 2, 316, 317, 7, 116, 2, 2, 317, 318, 7, 103, 2, 2, 318, 319, 7, 102, 2, 2, 319, 320, 7, 97, 2, 2, 320, 321, 7, 103, 2, 2, 321, 322, 7, 112, 2, 2, 322, 323, 7, 105, 2, 2, 323, 324, 7, 107, 2, 2, 324, 325, 7, 112, 2, 2, 325, 326, 7, 103, 2, 2, 326, 327, 7, 97, 2, 2, 327, 328, 7, 120, 2, 2, 328, 329, 7, 103, 2, 2, 329, 330, 7, 116, 2, 2, 330, 331, 7, 117, 2, 2, 331, 332, 7, 107, 2, 2, 332, 333, 7, 113, 2, 2, 333, 334, 7, 112, 2, 2, 334, 40, 3, 2, 2, 2, 335, 336, 7, 99, 2, 2, 336, 337, 7, 112, 2, 2, 337, 338, 7, 102, 2, 2, 338, 42, 3, 2, 2, 2, 339, 340, 7, 113, 2, 2, 340, 341, 7, 116, 2, 2, 341, 44, 3, 2, 2, 2, 342, 343, 7, 112, 2, 2, 343, 344, 7, 113, 2, 2, 344, 345, 7, 118, 2, 2, 345, 46, 3, 2, 2, 2, 346, 347, 7, 62, 2, 2, 347, 48, 3, 2, 2, 2, 348, 349, 7, 62, 2, 2, 349, 350, 7, 63, 2, 2, 350, 50, 3, 2, 2, 2, 351, 352, 7, 64, 2, 2, 352, 52, 3, 2, 2, 2, 353, 354, 7, 64, 2, 2, 354, 355, 7, 63, 2, 2, 355, 54, 3, 2, 2, 2, 356, 357, 7, 63, 2, 2, 357, 56, 3, 2, 2, 2, 358, 359, 7, 35, 2, 2, 359, 360, 7, 63, 2, 2, 360, 58, 3, 2, 2, 2, 361, 362, 7, 107, 2, 2, 362, 363, 7, 112, 2, 2, 363, 60, 3, 2, 2, 2, 364, 365, 7, 101, 2, 2, 365, 366, 7, 113, 2, 2, 366, 367, 7, 112, 2, 2, 367, 368, 7, 118, 2, 2, 368, 369, 7, 99, 2, 2, 369, 370, 7, 107, 2, 2, 370, 371, 7, 112, 2, 2, 371, 372, 7, 117, 2, 2, 372, 62, 3, 2, 2, 2, 373, 374, 7, 107, 2, 2, 374, 375, 7, 101, 2, 2, 375, 376, 7, 113, 2, 2, 376, 377, 7, 112, 2, 2, 377, 378, 7, 118, 2, 2, 378, 379, 7, 99, 2, 2, 379, 380, 7, 107, 2, 2, 380, 381, 7, 112, 2, 2, 381, 382, 7, 117, 2, 2, 382, 64, 3, 2, 2, 2, 383, 384, 7, 117, 2, 2, 384, 385, 7, 118, 2, 2, 385, 386, 7, 99, 2, 2, 386, 387, 7, 116, 2, 2, 387, 388, 7, 118, 2, 2, 388, 389, 7, 117, 2, 2, 389, 390, 7, 121, 2, 2, 390, 391, 7, 107, 2, 2, 391, 392, 7, 118, 2, 2, 392, 393, 7, 106, 2, 2, 393, 66, 3, 2, 2, 2, 394, 395, 7, 103, 2, 2, 395, 396, 7, 112, 2, 2, 396, 397, 7, 102, 2, 2, 397, 398, 7, 117, 2, 2, 398, 399, 7, 121, 2, 2, 399, 400, 7, 107, 2, 2, 400, 401, 7, 118, 2, 2, 401, 402, 7, 106, 2, 2, 402, 68, 3, 2, 2, 2, 403, 404, 7, 114, 2, 2, 404, 405, 7, 111, 2, 2, 405, 406, 7, 99, 2, 2, 406, 407, 7, 118, 2, 2, 407, 408, 7, 101, 2, 2, 408, 409, 7, 106, 2, 2, 409, 70, 3, 2, 2, 2, 410, 411, 7, 103, 2, 2, 411, 412, 7, 122, 2, 2, 412, 413, 7, 107, 2, 2, 413, 414, 7, 117, 2, 2, 414, 415, 7, 118, 2, 2, 415, 416, 7, 117, 2, 2, 416, 72, 3, 2, 2, 2, 417, 418, 7, 93, 2, 2, 418, 74, 3, 2, 2, 2, 419, 420, 7, 95, 2, 2, 420, 76, 3, 2, 2, 2, 421, 422, 7, 42, 2, 2, 422, 78, 3, 2, 2, 2, 423, 424, 7, 43, 2, 2, 424, 80, 3, 2, 2, 2, 425, 426, 7, 46, 2, 2, 426, 82, 3, 2, 2, 2, 427, 428, 7, 47, 2, 2, 428, 84, 3, 2, 2, 2, 429, 437, 7, 60, 2, 2, 430, 432, 7, 34, 2, 2, 431, 430, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 436, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 438, 7, 64, 2, 2, 437, 433, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 86, 3, 2, 2, 2, 439, 442, 5, 89, 45, 2, 440, 442, 5, 91, 46, 2, 441, 439, 3, 2, 2, 2, 441, 440, 3, 2, 2, 2, 442, 88, 3, 2, 2, 2, 443, 444, 5, 129, 65, 2, 444, 445, 5, 131, 66, 2, 445, 446, 5, 127, 64, 2, 446, 447, 5, 129, 65, 2, 447, 460, 3, 2, 2, 2, 448, 449, 5, 139, 70, 2, 449, 450, 5, 123, 62, 2, 450, 451, 5, 121, 61, 2, 451, 452, 5, 131, 66, 2, 452, 453, 5, 155, 78, 2, 453, 454, 5, 139, 70, 2, 454, 460, 3, 2, 2, 2, 455, 456, 5, 137, 69, 2, 456, 457, 5, 143, 72, 2, 457, 458, 5, 159, 80, 2, 458, 460, 3, 2, 2, 2, 459, 443, 3, 2, 2, 2, 459, 448, 3, 2, 2, 2, 459, 455, 3, 2, 2, 2, 460, 90, 3, 2, 2, 2, 461, 462, 5, 123, 62, 2, 462, 463, 5, 139, 70, 2, 463, 464, 5, 123, 62, 2, 464, 465, 5, 149, 75, 2, 465, 466, 5, 127, 64, 2, 466, 467, 5, 123, 62, 2, 467, 468, 5, 141, 71, 2, 468, 469, 5, 119, 60, 2, 469, 470, 5, 163, 82, 2, 470, 533, 3, 2, 2, 2, 471, 472, 5, 115, 58, 2, 472, 473, 5, 137, 69, 2, 473, 474, 5, 123, 62, 2, 474, 475, 5, 149, 75, 2, 475, 476, 5, 153, 77, 2, 476, 533, 3, 2, 2, 2, 477, 478, 5, 119, 60, 2, 478, 479, 5, 149, 75, 2, 479, 480, 5, 131, 66, 2, 480, 481, 5, 153, 77, 2, 481, 482, 5, 131, 66, 2, 482, 483, 5, 119, 60, 2, 483, 484, 5, 115, 58, 2, 484, 485, 5, 137, 69, 2, 485, 533, 3, 2, 2, 2, 486, 487, 5, 123, 62, 2, 487, 488, 5, 149, 75, 2, 488, 489, 5, 149, 75, 2, 489, 490, 5, 143, 72, 2, 490, 491, 5, 149, 75, 2, 491, 533, 3, 2, 2, 2, 492, 493, 5, 159, 80, 2, 493, 494, 5, 115, 58, 2, 494, 495, 5, 149, 75, 2, 495, 496, 5, 141, 71, 2, 496, 497, 5, 131, 66, 2, 497, 498, 5, 141, 71, 2, 498, 499, 5, 127, 64, 2, 499, 533, 3, 2, 2, 2, 500, 501, 5, 141, 71, 2, 501, 502, 5, 143, 72, 2, 502, 503, 5, 153, 77, 2, 503, 504, 5, 131, 66, 2, 504, 505, 5, 119, 60, 2, 505, 506, 5, 123, 62, 2, 506, 533, 3, 2, 2, 2, 507, 508, 5, 131, 66, 2, 508, 509, 5, 141, 71, 2, 509, 510, 5, 125, 63, 2, 510, 511, 5, 143, 72, 2, 511, 533, 3, 2, 2, 2, 512, 513, 5, 131, 66, 2, 513, 514, 5, 141, 71, 2, 514, 515, 5, 125, 63, 2, 515, 516, 5, 143, 72, 2, 516, 517, 5, 149, 75, 2, 517, 518, 5, 139, 70, 2, 518, 519, 5, 115, 58, 2, 519, 520, 5, 153, 77, 2, 520, 521, 5, 131, 66, 2, 521, 522, 5, 143, 72, 2, 522, 523, 5, 141, 71, 2, 523, 524, 5, 115, 58, 2, 524, 525, 5, 137, 69, 2, 525, 533, 3, 2, 2, 2, 526, 527, 5, 121, 61, 2, 527, 528, 5, 123, 62, 2, 528, 529, 5, 117, 59, 2, 529, 530, 5, 155, 78, 2, 530, 531, 5, 127, 64, 2, 531, 533, 3, 2, 2, 2, 532, 461, 3, 2, 2, 2, 532, 471, 3, 2, 2, 2, 532, 477, 3, 2, 2, 2, 532, 486, 3, 2, 2, 2, 532, 492, 3, 2, 2, 2, 532, 500, 3, 2, 2, 2, 532, 507, 3, 2, 2, 2, 532, 512, 3, 2, 2, 2, 532, 526, 3, 2, 2, 2, 533, 92, 3, 2, 2, 2, 534, 556, 9, 2, 2, 2, 535, 555, 9, 3, 2, 2, 536, 538, 7, 60, 2, 2, 537, 536, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 539, 3, 2, 2, 2, 539, 542, 7, 93, 2, 2, 540, 543, 5, 95, 48, 2, 541, 543, 5, 97, 49, 2, 542, 540, 3, 2, 2, 2, 542, 541, 3, 2, 2, 2, 543, 548, 3, 2, 2, 2, 544, 545, 7, 60, 2, 2, 545, 547, 5, 97, 49, 2, 546, 544, 3, 2, 2, 2, 547, 550, 3, 2, 2, 2, 548, 546, 3, 2, 2, 2, 548, 549, 3, 2, 2, 2, 549, 551, 3, 2, 2, 2, 550, 548, 3, 2, 2, 2, 551, 552, 7, 95, 2, 2, 552, 555, 3, 2, 2, 2, 553, 555, 7, 44, 2, 2, 554, 535, 3, 2, 2, 2, 554, 537, 3, 2, 2, 2, 554, 553, 3, 2, 2, 2, 555, 558, 3, 2, 2, 2, 556, 554, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 94, 3, 2, 2, 2, 558, 556, 3, 2, 2, 2, 559, 561, 4, 50, 59, 2, 560, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 560, 3, 2, 2, 2, 562, 563, 3, 2, 2, 2, 563, 570, 3, 2, 2, 2, 564, 566, 7, 48, 2, 2, 565, 567, 4, 50, 59, 2, 566, 565, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 566, 3, 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, 571, 3, 2, 2, 2, 570, 564, 3, 2, 2, 2, 570, 571, 3, 2, 2, 2, 571, 96, 3, 2, 2, 2, 572, 576, 9, 4, 2, 2, 573, 575, 9, 5, 2, 2, 574, 573, 3, 2, 2, 2, 575, 578, 3, 2, 2, 2, 576, 574, 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 98, 3, 2, 2, 2, 578, 576, 3, 2, 2, 2, 579, 582, 7, 36, 2, 2, 580, 583, 5, 99, 50, 2, 581, 583, 5, 103, 52, 2, 582, 580, 3, 2, 2, 2, 582, 581, 3, 2, 2, 2, 583, 584, 3, 2, 2, 2, 584, 585, 7, 36, 2, 2, 585, 614, 3, 2, 2, 2, 586, 589, 7, 41, 2, 2, 587, 590, 5, 99, 50, 2, 588, 590, 5, 103, 52, 2, 589, 587, 3, 2, 2, 2, 589, 588, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 592, 7, 41, 2, 2, 592, 614, 3, 2, 2, 2, 593, 594, 7, 94, 2, 2, 594, 595, 7, 36, 2, 2, 595, 598, 3, 2, 2, 2, 596, 599, 5, 99, 50, 2, 597, 599, 5, 103, 52, 2, 598, 596, 3, 2, 2, 2, 598, 597, 3, 2, 2, 2, 599, 600, 3, 2, 2, 2, 600, 601, 7, 94, 2, 2, 601, 602, 7, 36, 2, 2, 602, 614, 3, 2, 2, 2, 603, 604, 7, 41, 2, 2, 604, 605, 7, 41, 2, 2, 605, 608, 3, 2, 2, 2, 606, 609, 5, 99, 50, 2, 607, 609, 5, 103, 52, 2, 608, 606, 3, 2, 2, 2, 608, 607, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 611, 7, 41, 2, 2, 611, 612, 7, 41, 2, 2, 612, 614, 3, 2, 2, 2, 613, 579, 3, 2, 2, 2, 613, 586, 3, 2, 2, 2, 613, 593, 3, 2, 2, 2, 613, 603, 3, 2, 2, 2, 614, 100, 3, 2, 2, 2, 615, 616, 5, 93, 47, 2, 616, 617, 7, 60, 2, 2, 617, 618, 5, 93, 47, 2, 618, 102, 3, 2, 2, 2, 619, 621, 10, 6, 2, 2, 620, 619, 3, 2, 2, 2, 621, 624, 3, 2, 2, 2, 622, 623, 3, 2, 2, 2, 622, 620, 3, 2, 2, 2, 623, 104, 3, 2, 2, 2, 624, 622, 3, 2, 2, 2, 625, 626, 7, 94, 2, 2, 626, 630, 7, 36, 2, 2, 627, 628, 7, 41, 2, 2, 628, 630, 7, 41, 2, 2, 629, 625, 3, 2, 2, 2, 629, 627, 3, 2, 2, 2, 630, 106, 3, 2, 2, 2, 631, 633, 9, 7, 2, 2, 632, 631, 3, 2, 2, 2, 633, 634, 3, 2, 2, 2, 634, 632, 3, 2, 2, 2, 634, 635, 3, 2, 2, 2, 635, 636, 3, 2, 2, 2, 636, 637, 8, 54, 2, 2, 637, 108, 3, 2, 2, 2, 638, 640, 7, 15, 2, 2, 639, 638, 3, 2, 2, 2, 639, 640, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, 642, 7, 12, 2, 2, 642, 643, 3, 2, 2, 2, 643, 644, 8, 55, 2, 2, 644, 110, 3, 2, 2, 2, 645, 649, 7, 37, 2, 2, 646, 648, 10, 6, 2, 2, 647, 646, 3, 2, 2, 2, 648, 651, 3, 2, 2, 2, 649, 647, 3, 2, 2, 2, 649, 650, 3, 2, 2, 2, 650, 652, 3, 2, 2, 2, 651, 649, 3, 2, 2, 2, 652, 653, 8, 56, 2, 2, 653, 112, 3, 2, 2, 2, 654, 655, 11, 2, 2, 2, 655, 114, 3, 2, 2, 2, 656, 657, 9, 8, 2, 2, 657, 116, 3, 2, 2, 2, 658, 659, 9, 9, 2, 2, 659, 118, 3, 2, 2, 2, 660, 661, 9, 10, 2, 2, 661, 120, 3, 2, 2, 2, 662, 663, 9, 11, 2, 2, 663, 122, 3, 2, 2, 2, 664, 665, 9, 12, 2, 2, 665, 124, 3, 2, 2, 2, 666, 667, 9, 13, 2, 2, 667, 126, 3, 2, 2, 2, 668, 669, 9, 14, 2, 2, 669, 128, 3, 2, 2, 2, 670, 671, 9, 15, 2, 2, 671, 130, 3, 2, 2, 2, 672, 673, 9, 16, 2, 2, 673, 132, 3, 2, 2, 2, 674, 675, 9, 17, 2, 2, 675, 134, 3, 2, 2, 2, 676, 677, 9, 18, 2, 2, 677, 136, 3, 2, 2, 2, 678, 679, 9, 19, 2, 2, 679, 138, 3, 2, 2, 2, 680, 681, 9, 20, 2, 2, 681, 140, 3, 2, 2, 2, 682, 683, 9, 21, 2, 2, 683, 142, 3, 2, 2, 2, 684, 685, 9, 22, 2, 2, 685, 144, 3, 2, 2, 2, 686, 687, 9, 23, 2, 2, 687, 146, 3, 2, 2, 2, 688, 689, 9, 24, 2, 2, 689, 148, 3, 2, 2, 2, 690, 691, 9, 25, 2, 2, 691, 150, 3, 2, 2, 2, 692, 693, 9, 26, 2, 2, 693, 152, 3, 2, 2, 2, 694, 695, 9, 27, 2, 2, 695, 154, 3, 2, 2, 2, 696, 697, 9, 28, 2, 2, 697, 156, 3, 2, 2, 2, 698, 699, 9, 29, 2, 2, 699, 158, 3, 2, 2, 2, 700, 701, 9, 30, 2, 2, 701, 160, 3, 2, 2, 2, 702, 703, 9, 31, 2, 2, 703, 162, 3, 2, 2, 2, 704, 705, 9, 32, 2, 2, 705, 164, 3, 2, 2, 2, 706, 707, 9, 33, 2, 2, 707, 166, 3, 2, 2, 2, 27, 2, 433, 437, 441, 459, 532, 537, 542, 548, 554, 556, 562, 568, 570, 576, 582, 589, 598, 608, 613, 622, 629, 634, 639, 649, 3, 2, 3, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 56, 709, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 7, 43, 433, 10, 43, 12, 43, 14, 43, 436, 11, 43, 3, 43, 5, 43, 439, 10, 43, 3, 44, 3, 44, 5, 44, 443, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 461, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 534, 10, 46, 3, 47, 3, 47, 3, 47, 5, 47, 539, 10, 47, 3, 47, 3, 47, 3, 47, 5, 47, 544, 10, 47, 3, 47, 3, 47, 7, 47, 548, 10, 47, 12, 47, 14, 47, 551, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 556, 10, 47, 12, 47, 14, 47, 559, 11, 47, 3, 48, 6, 48, 562, 10, 48, 13, 48, 14, 48, 563, 3, 48, 3, 48, 6, 48, 568, 10, 48, 13, 48, 14, 48, 569, 5, 48, 572, 10, 48, 3, 49, 3, 49, 7, 49, 576, 10, 49, 12, 49, 14, 49, 579, 11, 49, 3, 50, 3, 50, 3, 50, 5, 50, 584, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 591, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 600, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 610, 10, 50, 3, 50, 3, 50, 3, 50, 5, 50, 615, 10, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 7, 52, 622, 10, 52, 12, 52, 14, 52, 625, 11, 52, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 631, 10, 53, 3, 54, 6, 54, 634, 10, 54, 13, 54, 14, 54, 635, 3, 54, 3, 54, 3, 55, 5, 55, 641, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 7, 56, 649, 10, 56, 12, 56, 14, 56, 652, 11, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 623, 2, 84, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 2, 105, 2, 107, 53, 109, 54, 111, 55, 113, 56, 115, 2, 117, 2, 119, 2, 121, 2, 123, 2, 125, 2, 127, 2, 129, 2, 131, 2, 133, 2, 135, 2, 137, 2, 139, 2, 141, 2, 143, 2, 145, 2, 147, 2, 149, 2, 151, 2, 153, 2, 155, 2, 157, 2, 159, 2, 161, 2, 163, 2, 165, 2, 3, 2, 34, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 7, 2, 47, 48, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 48, 49, 67, 92, 99, 124, 7, 2, 44, 44, 47, 59, 67, 92, 97, 97, 99, 124, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 67, 67, 99, 99, 4, 2, 68, 68, 100, 100, 4, 2, 69, 69, 101, 101, 4, 2, 70, 70, 102, 102, 4, 2, 71, 71, 103, 103, 4, 2, 72, 72, 104, 104, 4, 2, 73, 73, 105, 105, 4, 2, 74, 74, 106, 106, 4, 2, 75, 75, 107, 107, 4, 2, 76, 76, 108, 108, 4, 2, 77, 77, 109, 109, 4, 2, 78, 78, 110, 110, 4, 2, 79, 79, 111, 111, 4, 2, 80, 80, 112, 112, 4, 2, 81, 81, 113, 113, 4, 2, 82, 82, 114, 114, 4, 2, 83, 83, 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, 117, 4, 2, 86, 86, 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, 120, 4, 2, 89, 89, 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, 91, 123, 123, 4, 2, 92, 92, 124, 124, 2, 715, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 3, 167, 3, 2, 2, 2, 5, 172, 3, 2, 2, 2, 7, 179, 3, 2, 2, 2, 9, 184, 3, 2, 2, 2, 11, 190, 3, 2, 2, 2, 13, 195, 3, 2, 2, 2, 15, 200, 3, 2, 2, 2, 17, 206, 3, 2, 2, 2, 19, 216, 3, 2, 2, 2, 21, 221, 3, 2, 2, 2, 23, 229, 3, 2, 2, 2, 25, 236, 3, 2, 2, 2, 27, 245, 3, 2, 2, 2, 29, 250, 3, 2, 2, 2, 31, 260, 3, 2, 2, 2, 33, 268, 3, 2, 2, 2, 35, 282, 3, 2, 2, 2, 37, 305, 3, 2, 2, 2, 39, 312, 3, 2, 2, 2, 41, 336, 3, 2, 2, 2, 43, 340, 3, 2, 2, 2, 45, 343, 3, 2, 2, 2, 47, 347, 3, 2, 2, 2, 49, 349, 3, 2, 2, 2, 51, 352, 3, 2, 2, 2, 53, 354, 3, 2, 2, 2, 55, 357, 3, 2, 2, 2, 57, 359, 3, 2, 2, 2, 59, 362, 3, 2, 2, 2, 61, 365, 3, 2, 2, 2, 63, 374, 3, 2, 2, 2, 65, 384, 3, 2, 2, 2, 67, 395, 3, 2, 2, 2, 69, 404, 3, 2, 2, 2, 71, 411, 3, 2, 2, 2, 73, 418, 3, 2, 2, 2, 75, 420, 3, 2, 2, 2, 77, 422, 3, 2, 2, 2, 79, 424, 3, 2, 2, 2, 81, 426, 3, 2, 2, 2, 83, 428, 3, 2, 2, 2, 85, 430, 3, 2, 2, 2, 87, 442, 3, 2, 2, 2, 89, 460, 3, 2, 2, 2, 91, 533, 3, 2, 2, 2, 93, 535, 3, 2, 2, 2, 95, 561, 3, 2, 2, 2, 97, 573, 3, 2, 2, 2, 99, 614, 3, 2, 2, 2, 101, 616, 3, 2, 2, 2, 103, 623, 3, 2, 2, 2, 105, 630, 3, 2, 2, 2, 107, 633, 3, 2, 2, 2, 109, 640, 3, 2, 2, 2, 111, 646, 3, 2, 2, 2, 113, 655, 3, 2, 2, 2, 115, 657, 3, 2, 2, 2, 117, 659, 3, 2, 2, 2, 119, 661, 3, 2, 2, 2, 121, 663, 3, 2, 2, 2, 123, 665, 3, 2, 2, 2, 125, 667, 3, 2, 2, 2, 127, 669, 3, 2, 2, 2, 129, 671, 3, 2, 2, 2, 131, 673, 3, 2, 2, 2, 133, 675, 3, 2, 2, 2, 135, 677, 3, 2, 2, 2, 137, 679, 3, 2, 2, 2, 139, 681, 3, 2, 2, 2, 141, 683, 3, 2, 2, 2, 143, 685, 3, 2, 2, 2, 145, 687, 3, 2, 2, 2, 147, 689, 3, 2, 2, 2, 149, 691, 3, 2, 2, 2, 151, 693, 3, 2, 2, 2, 153, 695, 3, 2, 2, 2, 155, 697, 3, 2, 2, 2, 157, 699, 3, 2, 2, 2, 159, 701, 3, 2, 2, 2, 161, 703, 3, 2, 2, 2, 163, 705, 3, 2, 2, 2, 165, 707, 3, 2, 2, 2, 167, 168, 7, 116, 2, 2, 168, 169, 7, 119, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 103, 2, 2, 171, 4, 3, 2, 2, 2, 172, 173, 7, 104, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 110, 2, 2, 175, 176, 7, 118, 2, 2, 176, 177, 7, 103, 2, 2, 177, 178, 7, 116, 2, 2, 178, 6, 3, 2, 2, 2, 179, 180, 7, 102, 2, 2, 180, 181, 7, 116, 2, 2, 181, 182, 7, 113, 2, 2, 182, 183, 7, 114, 2, 2, 183, 8, 3, 2, 2, 2, 184, 185, 7, 111, 2, 2, 185, 186, 7, 99, 2, 2, 186, 187, 7, 101, 2, 2, 187, 188, 7, 116, 2, 2, 188, 189, 7, 113, 2, 2, 189, 10, 3, 2, 2, 2, 190, 191, 7, 110, 2, 2, 191, 192, 7, 107, 2, 2, 192, 193, 7, 117, 2, 2, 193, 194, 7, 118, 2, 2, 194, 12, 3, 2, 2, 2, 195, 196, 7, 112, 2, 2, 196, 197, 7, 99, 2, 2, 197, 198, 7, 111, 2, 2, 198, 199, 7, 103, 2, 2, 199, 14, 3, 2, 2, 2, 200, 201, 7, 107, 2, 2, 201, 202, 7, 118, 2, 2, 202, 203, 7, 103, 2, 2, 203, 204, 7, 111, 2, 2, 204, 205, 7, 117, 2, 2, 205, 16, 3, 2, 2, 2, 206, 207, 7, 101, 2, 2, 207, 208, 7, 113, 2, 2, 208, 209, 7, 112, 2, 2, 209, 210, 7, 102, 2, 2, 210, 211, 7, 107, 2, 2, 211, 212, 7, 118, 2, 2, 212, 213, 7, 107, 2, 2, 213, 214, 7, 113, 2, 2, 214, 215, 7, 112, 2, 2, 215, 18, 3, 2, 2, 2, 216, 217, 7, 102, 2, 2, 217, 218, 7, 103, 2, 2, 218, 219, 7, 117, 2, 2, 219, 220, 7, 101, 2, 2, 220, 20, 3, 2, 2, 2, 221, 222, 7, 99, 2, 2, 222, 223, 7, 101, 2, 2, 223, 224, 7, 118, 2, 2, 224, 225, 7, 107, 2, 2, 225, 226, 7, 113, 2, 2, 226, 227, 7, 112, 2, 2, 227, 228, 7, 117, 2, 2, 228, 22, 3, 2, 2, 2, 229, 230, 7, 113, 2, 2, 230, 231, 7, 119, 2, 2, 231, 232, 7, 118, 2, 2, 232, 233, 7, 114, 2, 2, 233, 234, 7, 119, 2, 2, 234, 235, 7, 118, 2, 2, 235, 24, 3, 2, 2, 2, 236, 237, 7, 114, 2, 2, 237, 238, 7, 116, 2, 2, 238, 239, 7, 107, 2, 2, 239, 240, 7, 113, 2, 2, 240, 241, 7, 116, 2, 2, 241, 242, 7, 107, 2, 2, 242, 243, 7, 118, 2, 2, 243, 244, 7, 123, 2, 2, 244, 26, 3, 2, 2, 2, 245, 246, 7, 118, 2, 2, 246, 247, 7, 99, 2, 2, 247, 248, 7, 105, 2, 2, 248, 249, 7, 117, 2, 2, 249, 28, 3, 2, 2, 2, 250, 251, 7, 114, 2, 2, 251, 252, 7, 116, 2, 2, 252, 253, 7, 103, 2, 2, 253, 254, 7, 104, 2, 2, 254, 255, 7, 107, 2, 2, 255, 256, 7, 110, 2, 2, 256, 257, 7, 118, 2, 2, 257, 258, 7, 103, 2, 2, 258, 259, 7, 116, 2, 2, 259, 30, 3, 2, 2, 2, 260, 261, 7, 103, 2, 2, 261, 262, 7, 112, 2, 2, 262, 263, 7, 99, 2, 2, 263, 264, 7, 100, 2, 2, 264, 265, 7, 110, 2, 2, 265, 266, 7, 103, 2, 2, 266, 267, 7, 102, 2, 2, 267, 32, 3, 2, 2, 2, 268, 269, 7, 121, 2, 2, 269, 270, 7, 99, 2, 2, 270, 271, 7, 116, 2, 2, 271, 272, 7, 112, 2, 2, 272, 273, 7, 97, 2, 2, 273, 274, 7, 103, 2, 2, 274, 275, 7, 120, 2, 2, 275, 276, 7, 118, 2, 2, 276, 277, 7, 118, 2, 2, 277, 278, 7, 123, 2, 2, 278, 279, 7, 114, 2, 2, 279, 280, 7, 103, 2, 2, 280, 281, 7, 117, 2, 2, 281, 34, 3, 2, 2, 2, 282, 283, 7, 117, 2, 2, 283, 284, 7, 109, 2, 2, 284, 285, 7, 107, 2, 2, 285, 286, 7, 114, 2, 2, 286, 287, 7, 47, 2, 2, 287, 288, 7, 107, 2, 2, 288, 289, 7, 104, 2, 2, 289, 290, 7, 47, 2, 2, 290, 291, 7, 119, 2, 2, 291, 292, 7, 112, 2, 2, 292, 293, 7, 109, 2, 2, 293, 294, 7, 112, 2, 2, 294, 295, 7, 113, 2, 2, 295, 296, 7, 121, 2, 2, 296, 297, 7, 112, 2, 2, 297, 298, 7, 47, 2, 2, 298, 299, 7, 104, 2, 2, 299, 300, 7, 107, 2, 2, 300, 301, 7, 110, 2, 2, 301, 302, 7, 118, 2, 2, 302, 303, 7, 103, 2, 2, 303, 304, 7, 116, 2, 2, 304, 36, 3, 2, 2, 2, 305, 306, 7, 99, 2, 2, 306, 307, 7, 114, 2, 2, 307, 308, 7, 114, 2, 2, 308, 309, 7, 103, 2, 2, 309, 310, 7, 112, 2, 2, 310, 311, 7, 102, 2, 2, 311, 38, 3, 2, 2, 2, 312, 313, 7, 116, 2, 2, 313, 314, 7, 103, 2, 2, 314, 315, 7, 115, 2, 2, 315, 316, 7, 119, 2, 2, 316, 317, 7, 107, 2, 2, 317, 318, 7, 116, 2, 2, 318, 319, 7, 103, 2, 2, 319, 320, 7, 102, 2, 2, 320, 321, 7, 97, 2, 2, 321, 322, 7, 103, 2, 2, 322, 323, 7, 112, 2, 2, 323, 324, 7, 105, 2, 2, 324, 325, 7, 107, 2, 2, 325, 326, 7, 112, 2, 2, 326, 327, 7, 103, 2, 2, 327, 328, 7, 97, 2, 2, 328, 329, 7, 120, 2, 2, 329, 330, 7, 103, 2, 2, 330, 331, 7, 116, 2, 2, 331, 332, 7, 117, 2, 2, 332, 333, 7, 107, 2, 2, 333, 334, 7, 113, 2, 2, 334, 335, 7, 112, 2, 2, 335, 40, 3, 2, 2, 2, 336, 337, 7, 99, 2, 2, 337, 338, 7, 112, 2, 2, 338, 339, 7, 102, 2, 2, 339, 42, 3, 2, 2, 2, 340, 341, 7, 113, 2, 2, 341, 342, 7, 116, 2, 2, 342, 44, 3, 2, 2, 2, 343, 344, 7, 112, 2, 2, 344, 345, 7, 113, 2, 2, 345, 346, 7, 118, 2, 2, 346, 46, 3, 2, 2, 2, 347, 348, 7, 62, 2, 2, 348, 48, 3, 2, 2, 2, 349, 350, 7, 62, 2, 2, 350, 351, 7, 63, 2, 2, 351, 50, 3, 2, 2, 2, 352, 353, 7, 64, 2, 2, 353, 52, 3, 2, 2, 2, 354, 355, 7, 64, 2, 2, 355, 356, 7, 63, 2, 2, 356, 54, 3, 2, 2, 2, 357, 358, 7, 63, 2, 2, 358, 56, 3, 2, 2, 2, 359, 360, 7, 35, 2, 2, 360, 361, 7, 63, 2, 2, 361, 58, 3, 2, 2, 2, 362, 363, 7, 107, 2, 2, 363, 364, 7, 112, 2, 2, 364, 60, 3, 2, 2, 2, 365, 366, 7, 101, 2, 2, 366, 367, 7, 113, 2, 2, 367, 368, 7, 112, 2, 2, 368, 369, 7, 118, 2, 2, 369, 370, 7, 99, 2, 2, 370, 371, 7, 107, 2, 2, 371, 372, 7, 112, 2, 2, 372, 373, 7, 117, 2, 2, 373, 62, 3, 2, 2, 2, 374, 375, 7, 107, 2, 2, 375, 376, 7, 101, 2, 2, 376, 377, 7, 113, 2, 2, 377, 378, 7, 112, 2, 2, 378, 379, 7, 118, 2, 2, 379, 380, 7, 99, 2, 2, 380, 381, 7, 107, 2, 2, 381, 382, 7, 112, 2, 2, 382, 383, 7, 117, 2, 2, 383, 64, 3, 2, 2, 2, 384, 385, 7, 117, 2, 2, 385, 386, 7, 118, 2, 2, 386, 387, 7, 99, 2, 2, 387, 388, 7, 116, 2, 2, 388, 389, 7, 118, 2, 2, 389, 390, 7, 117, 2, 2, 390, 391, 7, 121, 2, 2, 391, 392, 7, 107, 2, 2, 392, 393, 7, 118, 2, 2, 393, 394, 7, 106, 2, 2, 394, 66, 3, 2, 2, 2, 395, 396, 7, 103, 2, 2, 396, 397, 7, 112, 2, 2, 397, 398, 7, 102, 2, 2, 398, 399, 7, 117, 2, 2, 399, 400, 7, 121, 2, 2, 400, 401, 7, 107, 2, 2, 401, 402, 7, 118, 2, 2, 402, 403, 7, 106, 2, 2, 403, 68, 3, 2, 2, 2, 404, 405, 7, 114, 2, 2, 405, 406, 7, 111, 2, 2, 406, 407, 7, 99, 2, 2, 407, 408, 7, 118, 2, 2, 408, 409, 7, 101, 2, 2, 409, 410, 7, 106, 2, 2, 410, 70, 3, 2, 2, 2, 411, 412, 7, 103, 2, 2, 412, 413, 7, 122, 2, 2, 413, 414, 7, 107, 2, 2, 414, 415, 7, 117, 2, 2, 415, 416, 7, 118, 2, 2, 416, 417, 7, 117, 2, 2, 417, 72, 3, 2, 2, 2, 418, 419, 7, 93, 2, 2, 419, 74, 3, 2, 2, 2, 420, 421, 7, 95, 2, 2, 421, 76, 3, 2, 2, 2, 422, 423, 7, 42, 2, 2, 423, 78, 3, 2, 2, 2, 424, 425, 7, 43, 2, 2, 425, 80, 3, 2, 2, 2, 426, 427, 7, 46, 2, 2, 427, 82, 3, 2, 2, 2, 428, 429, 7, 47, 2, 2, 429, 84, 3, 2, 2, 2, 430, 438, 7, 60, 2, 2, 431, 433, 7, 34, 2, 2, 432, 431, 3, 2, 2, 2, 433, 436, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 437, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 437, 439, 7, 64, 2, 2, 438, 434, 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 86, 3, 2, 2, 2, 440, 443, 5, 89, 45, 2, 441, 443, 5, 91, 46, 2, 442, 440, 3, 2, 2, 2, 442, 441, 3, 2, 2, 2, 443, 88, 3, 2, 2, 2, 444, 445, 5, 129, 65, 2, 445, 446, 5, 131, 66, 2, 446, 447, 5, 127, 64, 2, 447, 448, 5, 129, 65, 2, 448, 461, 3, 2, 2, 2, 449, 450, 5, 139, 70, 2, 450, 451, 5, 123, 62, 2, 451, 452, 5, 121, 61, 2, 452, 453, 5, 131, 66, 2, 453, 454, 5, 155, 78, 2, 454, 455, 5, 139, 70, 2, 455, 461, 3, 2, 2, 2, 456, 457, 5, 137, 69, 2, 457, 458, 5, 143, 72, 2, 458, 459, 5, 159, 80, 2, 459, 461, 3, 2, 2, 2, 460, 444, 3, 2, 2, 2, 460, 449, 3, 2, 2, 2, 460, 456, 3, 2, 2, 2, 461, 90, 3, 2, 2, 2, 462, 463, 5, 123, 62, 2, 463, 464, 5, 139, 70, 2, 464, 465, 5, 123, 62, 2, 465, 466, 5, 149, 75, 2, 466, 467, 5, 127, 64, 2, 467, 468, 5, 123, 62, 2, 468, 469, 5, 141, 71, 2, 469, 470, 5, 119, 60, 2, 470, 471, 5, 163, 82, 2, 471, 534, 3, 2, 2, 2, 472, 473, 5, 115, 58, 2, 473, 474, 5, 137, 69, 2, 474, 475, 5, 123, 62, 2, 475, 476, 5, 149, 75, 2, 476, 477, 5, 153, 77, 2, 477, 534, 3, 2, 2, 2, 478, 479, 5, 119, 60, 2, 479, 480, 5, 149, 75, 2, 480, 481, 5, 131, 66, 2, 481, 482, 5, 153, 77, 2, 482, 483, 5, 131, 66, 2, 483, 484, 5, 119, 60, 2, 484, 485, 5, 115, 58, 2, 485, 486, 5, 137, 69, 2, 486, 534, 3, 2, 2, 2, 487, 488, 5, 123, 62, 2, 488, 489, 5, 149, 75, 2, 489, 490, 5, 149, 75, 2, 490, 491, 5, 143, 72, 2, 491, 492, 5, 149, 75, 2, 492, 534, 3, 2, 2, 2, 493, 494, 5, 159, 80, 2, 494, 495, 5, 115, 58, 2, 495, 496, 5, 149, 75, 2, 496, 497, 5, 141, 71, 2, 497, 498, 5, 131, 66, 2, 498, 499, 5, 141, 71, 2, 499, 500, 5, 127, 64, 2, 500, 534, 3, 2, 2, 2, 501, 502, 5, 141, 71, 2, 502, 503, 5, 143, 72, 2, 503, 504, 5, 153, 77, 2, 504, 505, 5, 131, 66, 2, 505, 506, 5, 119, 60, 2, 506, 507, 5, 123, 62, 2, 507, 534, 3, 2, 2, 2, 508, 509, 5, 131, 66, 2, 509, 510, 5, 141, 71, 2, 510, 511, 5, 125, 63, 2, 511, 512, 5, 143, 72, 2, 512, 534, 3, 2, 2, 2, 513, 514, 5, 131, 66, 2, 514, 515, 5, 141, 71, 2, 515, 516, 5, 125, 63, 2, 516, 517, 5, 143, 72, 2, 517, 518, 5, 149, 75, 2, 518, 519, 5, 139, 70, 2, 519, 520, 5, 115, 58, 2, 520, 521, 5, 153, 77, 2, 521, 522, 5, 131, 66, 2, 522, 523, 5, 143, 72, 2, 523, 524, 5, 141, 71, 2, 524, 525, 5, 115, 58, 2, 525, 526, 5, 137, 69, 2, 526, 534, 3, 2, 2, 2, 527, 528, 5, 121, 61, 2, 528, 529, 5, 123, 62, 2, 529, 530, 5, 117, 59, 2, 530, 531, 5, 155, 78, 2, 531, 532, 5, 127, 64, 2, 532, 534, 3, 2, 2, 2, 533, 462, 3, 2, 2, 2, 533, 472, 3, 2, 2, 2, 533, 478, 3, 2, 2, 2, 533, 487, 3, 2, 2, 2, 533, 493, 3, 2, 2, 2, 533, 501, 3, 2, 2, 2, 533, 508, 3, 2, 2, 2, 533, 513, 3, 2, 2, 2, 533, 527, 3, 2, 2, 2, 534, 92, 3, 2, 2, 2, 535, 557, 9, 2, 2, 2, 536, 556, 9, 3, 2, 2, 537, 539, 7, 60, 2, 2, 538, 537, 3, 2, 2, 2, 538, 539, 3, 2, 2, 2, 539, 540, 3, 2, 2, 2, 540, 543, 7, 93, 2, 2, 541, 544, 5, 95, 48, 2, 542, 544, 5, 97, 49, 2, 543, 541, 3, 2, 2, 2, 543, 542, 3, 2, 2, 2, 544, 549, 3, 2, 2, 2, 545, 546, 7, 60, 2, 2, 546, 548, 5, 97, 49, 2, 547, 545, 3, 2, 2, 2, 548, 551, 3, 2, 2, 2, 549, 547, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 552, 3, 2, 2, 2, 551, 549, 3, 2, 2, 2, 552, 553, 7, 95, 2, 2, 553, 556, 3, 2, 2, 2, 554, 556, 7, 44, 2, 2, 555, 536, 3, 2, 2, 2, 555, 538, 3, 2, 2, 2, 555, 554, 3, 2, 2, 2, 556, 559, 3, 2, 2, 2, 557, 555, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 94, 3, 2, 2, 2, 559, 557, 3, 2, 2, 2, 560, 562, 4, 50, 59, 2, 561, 560, 3, 2, 2, 2, 562, 563, 3, 2, 2, 2, 563, 561, 3, 2, 2, 2, 563, 564, 3, 2, 2, 2, 564, 571, 3, 2, 2, 2, 565, 567, 7, 48, 2, 2, 566, 568, 4, 50, 59, 2, 567, 566, 3, 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, 567, 3, 2, 2, 2, 569, 570, 3, 2, 2, 2, 570, 572, 3, 2, 2, 2, 571, 565, 3, 2, 2, 2, 571, 572, 3, 2, 2, 2, 572, 96, 3, 2, 2, 2, 573, 577, 9, 4, 2, 2, 574, 576, 9, 5, 2, 2, 575, 574, 3, 2, 2, 2, 576, 579, 3, 2, 2, 2, 577, 575, 3, 2, 2, 2, 577, 578, 3, 2, 2, 2, 578, 98, 3, 2, 2, 2, 579, 577, 3, 2, 2, 2, 580, 583, 7, 36, 2, 2, 581, 584, 5, 99, 50, 2, 582, 584, 5, 103, 52, 2, 583, 581, 3, 2, 2, 2, 583, 582, 3, 2, 2, 2, 584, 585, 3, 2, 2, 2, 585, 586, 7, 36, 2, 2, 586, 615, 3, 2, 2, 2, 587, 590, 7, 41, 2, 2, 588, 591, 5, 99, 50, 2, 589, 591, 5, 103, 52, 2, 590, 588, 3, 2, 2, 2, 590, 589, 3, 2, 2, 2, 591, 592, 3, 2, 2, 2, 592, 593, 7, 41, 2, 2, 593, 615, 3, 2, 2, 2, 594, 595, 7, 94, 2, 2, 595, 596, 7, 36, 2, 2, 596, 599, 3, 2, 2, 2, 597, 600, 5, 99, 50, 2, 598, 600, 5, 103, 52, 2, 599, 597, 3, 2, 2, 2, 599, 598, 3, 2, 2, 2, 600, 601, 3, 2, 2, 2, 601, 602, 7, 94, 2, 2, 602, 603, 7, 36, 2, 2, 603, 615, 3, 2, 2, 2, 604, 605, 7, 41, 2, 2, 605, 606, 7, 41, 2, 2, 606, 609, 3, 2, 2, 2, 607, 610, 5, 99, 50, 2, 608, 610, 5, 103, 52, 2, 609, 607, 3, 2, 2, 2, 609, 608, 3, 2, 2, 2, 610, 611, 3, 2, 2, 2, 611, 612, 7, 41, 2, 2, 612, 613, 7, 41, 2, 2, 613, 615, 3, 2, 2, 2, 614, 580, 3, 2, 2, 2, 614, 587, 3, 2, 2, 2, 614, 594, 3, 2, 2, 2, 614, 604, 3, 2, 2, 2, 615, 100, 3, 2, 2, 2, 616, 617, 5, 93, 47, 2, 617, 618, 7, 60, 2, 2, 618, 619, 5, 93, 47, 2, 619, 102, 3, 2, 2, 2, 620, 622, 10, 6, 2, 2, 621, 620, 3, 2, 2, 2, 622, 625, 3, 2, 2, 2, 623, 624, 3, 2, 2, 2, 623, 621, 3, 2, 2, 2, 624, 104, 3, 2, 2, 2, 625, 623, 3, 2, 2, 2, 626, 627, 7, 94, 2, 2, 627, 631, 7, 36, 2, 2, 628, 629, 7, 41, 2, 2, 629, 631, 7, 41, 2, 2, 630, 626, 3, 2, 2, 2, 630, 628, 3, 2, 2, 2, 631, 106, 3, 2, 2, 2, 632, 634, 9, 7, 2, 2, 633, 632, 3, 2, 2, 2, 634, 635, 3, 2, 2, 2, 635, 633, 3, 2, 2, 2, 635, 636, 3, 2, 2, 2, 636, 637, 3, 2, 2, 2, 637, 638, 8, 54, 2, 2, 638, 108, 3, 2, 2, 2, 639, 641, 7, 15, 2, 2, 640, 639, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, 642, 3, 2, 2, 2, 642, 643, 7, 12, 2, 2, 643, 644, 3, 2, 2, 2, 644, 645, 8, 55, 2, 2, 645, 110, 3, 2, 2, 2, 646, 650, 7, 37, 2, 2, 647, 649, 10, 6, 2, 2, 648, 647, 3, 2, 2, 2, 649, 652, 3, 2, 2, 2, 650, 648, 3, 2, 2, 2, 650, 651, 3, 2, 2, 2, 651, 653, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, 653, 654, 8, 56, 2, 2, 654, 112, 3, 2, 2, 2, 655, 656, 11, 2, 2, 2, 656, 114, 3, 2, 2, 2, 657, 658, 9, 8, 2, 2, 658, 116, 3, 2, 2, 2, 659, 660, 9, 9, 2, 2, 660, 118, 3, 2, 2, 2, 661, 662, 9, 10, 2, 2, 662, 120, 3, 2, 2, 2, 663, 664, 9, 11, 2, 2, 664, 122, 3, 2, 2, 2, 665, 666, 9, 12, 2, 2, 666, 124, 3, 2, 2, 2, 667, 668, 9, 13, 2, 2, 668, 126, 3, 2, 2, 2, 669, 670, 9, 14, 2, 2, 670, 128, 3, 2, 2, 2, 671, 672, 9, 15, 2, 2, 672, 130, 3, 2, 2, 2, 673, 674, 9, 16, 2, 2, 674, 132, 3, 2, 2, 2, 675, 676, 9, 17, 2, 2, 676, 134, 3, 2, 2, 2, 677, 678, 9, 18, 2, 2, 678, 136, 3, 2, 2, 2, 679, 680, 9, 19, 2, 2, 680, 138, 3, 2, 2, 2, 681, 682, 9, 20, 2, 2, 682, 140, 3, 2, 2, 2, 683, 684, 9, 21, 2, 2, 684, 142, 3, 2, 2, 2, 685, 686, 9, 22, 2, 2, 686, 144, 3, 2, 2, 2, 687, 688, 9, 23, 2, 2, 688, 146, 3, 2, 2, 2, 689, 690, 9, 24, 2, 2, 690, 148, 3, 2, 2, 2, 691, 692, 9, 25, 2, 2, 692, 150, 3, 2, 2, 2, 693, 694, 9, 26, 2, 2, 694, 152, 3, 2, 2, 2, 695, 696, 9, 27, 2, 2, 696, 154, 3, 2, 2, 2, 697, 698, 9, 28, 2, 2, 698, 156, 3, 2, 2, 2, 699, 700, 9, 29, 2, 2, 700, 158, 3, 2, 2, 2, 701, 702, 9, 30, 2, 2, 702, 160, 3, 2, 2, 2, 703, 704, 9, 31, 2, 2, 704, 162, 3, 2, 2, 2, 705, 706, 9, 32, 2, 2, 706, 164, 3, 2, 2, 2, 707, 708, 9, 33, 2, 2, 708, 166, 3, 2, 2, 2, 27, 2, 434, 438, 442, 460, 533, 538, 543, 549, 555, 557, 563, 569, 571, 577, 583, 590, 599, 609, 614, 623, 630, 635, 640, 650, 3, 2, 3, 2] \ No newline at end of file diff --git a/core/policyengine/lang/parser/SfplLexer.tokens b/core/policyengine/lang/parser/SfplLexer.tokens index da028ade..e74d954b 100644 --- a/core/policyengine/lang/parser/SfplLexer.tokens +++ b/core/policyengine/lang/parser/SfplLexer.tokens @@ -7,7 +7,7 @@ NAME=6 ITEMS=7 COND=8 DESC=9 -ACTION=10 +ACTIONS=10 OUTPUT=11 PRIORITY=12 TAGS=13 @@ -61,7 +61,7 @@ ANY=54 'items'=7 'condition'=8 'desc'=9 -'action'=10 +'actions'=10 'output'=11 'priority'=12 'tags'=13 diff --git a/core/policyengine/lang/parser/sfpl_lexer.go b/core/policyengine/lang/parser/sfpl_lexer.go index efda6524..29852421 100644 --- a/core/policyengine/lang/parser/sfpl_lexer.go +++ b/core/policyengine/lang/parser/sfpl_lexer.go @@ -14,7 +14,7 @@ var _ = fmt.Printf var _ = unicode.IsLetter var serializedLexerAtn = []uint16{ - 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 56, 708, + 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 56, 709, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, @@ -35,56 +35,56 @@ var serializedLexerAtn = []uint16{ 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, - 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, - 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, - 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, - 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, - 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, - 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, + 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, + 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, + 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, + 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, + 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, + 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, - 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, + 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, - 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, - 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, - 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, - 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, - 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, - 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, - 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, - 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, - 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, - 3, 43, 7, 43, 432, 10, 43, 12, 43, 14, 43, 435, 11, 43, 3, 43, 5, 43, 438, - 10, 43, 3, 44, 3, 44, 5, 44, 442, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, - 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, - 3, 45, 5, 45, 460, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, - 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, + 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, + 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, + 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, + 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, + 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, + 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, + 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, + 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, + 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, + 3, 43, 3, 43, 7, 43, 433, 10, 43, 12, 43, 14, 43, 436, 11, 43, 3, 43, 5, + 43, 439, 10, 43, 3, 44, 3, 44, 5, 44, 443, 10, 44, 3, 45, 3, 45, 3, 45, + 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, + 45, 3, 45, 3, 45, 5, 45, 461, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, - 46, 3, 46, 5, 46, 533, 10, 46, 3, 47, 3, 47, 3, 47, 5, 47, 538, 10, 47, - 3, 47, 3, 47, 3, 47, 5, 47, 543, 10, 47, 3, 47, 3, 47, 7, 47, 547, 10, - 47, 12, 47, 14, 47, 550, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 555, 10, 47, - 12, 47, 14, 47, 558, 11, 47, 3, 48, 6, 48, 561, 10, 48, 13, 48, 14, 48, - 562, 3, 48, 3, 48, 6, 48, 567, 10, 48, 13, 48, 14, 48, 568, 5, 48, 571, - 10, 48, 3, 49, 3, 49, 7, 49, 575, 10, 49, 12, 49, 14, 49, 578, 11, 49, - 3, 50, 3, 50, 3, 50, 5, 50, 583, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, - 50, 5, 50, 590, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, - 5, 50, 599, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, - 50, 5, 50, 609, 10, 50, 3, 50, 3, 50, 3, 50, 5, 50, 614, 10, 50, 3, 51, - 3, 51, 3, 51, 3, 51, 3, 52, 7, 52, 621, 10, 52, 12, 52, 14, 52, 624, 11, - 52, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 630, 10, 53, 3, 54, 6, 54, 633, - 10, 54, 13, 54, 14, 54, 634, 3, 54, 3, 54, 3, 55, 5, 55, 640, 10, 55, 3, - 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 7, 56, 648, 10, 56, 12, 56, 14, - 56, 651, 11, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, + 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, + 3, 46, 3, 46, 3, 46, 5, 46, 534, 10, 46, 3, 47, 3, 47, 3, 47, 5, 47, 539, + 10, 47, 3, 47, 3, 47, 3, 47, 5, 47, 544, 10, 47, 3, 47, 3, 47, 7, 47, 548, + 10, 47, 12, 47, 14, 47, 551, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 556, 10, + 47, 12, 47, 14, 47, 559, 11, 47, 3, 48, 6, 48, 562, 10, 48, 13, 48, 14, + 48, 563, 3, 48, 3, 48, 6, 48, 568, 10, 48, 13, 48, 14, 48, 569, 5, 48, + 572, 10, 48, 3, 49, 3, 49, 7, 49, 576, 10, 49, 12, 49, 14, 49, 579, 11, + 49, 3, 50, 3, 50, 3, 50, 5, 50, 584, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, + 3, 50, 5, 50, 591, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, + 50, 5, 50, 600, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, + 3, 50, 5, 50, 610, 10, 50, 3, 50, 3, 50, 3, 50, 5, 50, 615, 10, 50, 3, + 51, 3, 51, 3, 51, 3, 51, 3, 52, 7, 52, 622, 10, 52, 12, 52, 14, 52, 625, + 11, 52, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 631, 10, 53, 3, 54, 6, 54, 634, + 10, 54, 13, 54, 14, 54, 635, 3, 54, 3, 54, 3, 55, 5, 55, 641, 10, 55, 3, + 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 7, 56, 649, 10, 56, 12, 56, 14, + 56, 652, 11, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 3, 80, - 3, 81, 3, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 622, 2, 84, 3, 3, 5, 4, 7, + 3, 81, 3, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 623, 2, 84, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, @@ -105,7 +105,7 @@ var serializedLexerAtn = []uint16{ 82, 114, 114, 4, 2, 83, 83, 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, 117, 4, 2, 86, 86, 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, 120, 4, 2, 89, 89, 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, - 91, 123, 123, 4, 2, 92, 92, 124, 124, 2, 714, 2, 3, 3, 2, 2, 2, 2, 5, 3, + 91, 123, 123, 4, 2, 92, 92, 124, 124, 2, 715, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, @@ -122,28 +122,28 @@ var serializedLexerAtn = []uint16{ 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 3, 167, 3, 2, 2, 2, 5, 172, 3, 2, 2, 2, 7, 179, 3, 2, 2, 2, 9, 184, 3, 2, 2, 2, 11, 190, 3, 2, 2, 2, 13, 195, 3, 2, 2, 2, 15, 200, 3, 2, 2, 2, 17, 206, 3, 2, 2, - 2, 19, 216, 3, 2, 2, 2, 21, 221, 3, 2, 2, 2, 23, 228, 3, 2, 2, 2, 25, 235, - 3, 2, 2, 2, 27, 244, 3, 2, 2, 2, 29, 249, 3, 2, 2, 2, 31, 259, 3, 2, 2, - 2, 33, 267, 3, 2, 2, 2, 35, 281, 3, 2, 2, 2, 37, 304, 3, 2, 2, 2, 39, 311, - 3, 2, 2, 2, 41, 335, 3, 2, 2, 2, 43, 339, 3, 2, 2, 2, 45, 342, 3, 2, 2, - 2, 47, 346, 3, 2, 2, 2, 49, 348, 3, 2, 2, 2, 51, 351, 3, 2, 2, 2, 53, 353, - 3, 2, 2, 2, 55, 356, 3, 2, 2, 2, 57, 358, 3, 2, 2, 2, 59, 361, 3, 2, 2, - 2, 61, 364, 3, 2, 2, 2, 63, 373, 3, 2, 2, 2, 65, 383, 3, 2, 2, 2, 67, 394, - 3, 2, 2, 2, 69, 403, 3, 2, 2, 2, 71, 410, 3, 2, 2, 2, 73, 417, 3, 2, 2, - 2, 75, 419, 3, 2, 2, 2, 77, 421, 3, 2, 2, 2, 79, 423, 3, 2, 2, 2, 81, 425, - 3, 2, 2, 2, 83, 427, 3, 2, 2, 2, 85, 429, 3, 2, 2, 2, 87, 441, 3, 2, 2, - 2, 89, 459, 3, 2, 2, 2, 91, 532, 3, 2, 2, 2, 93, 534, 3, 2, 2, 2, 95, 560, - 3, 2, 2, 2, 97, 572, 3, 2, 2, 2, 99, 613, 3, 2, 2, 2, 101, 615, 3, 2, 2, - 2, 103, 622, 3, 2, 2, 2, 105, 629, 3, 2, 2, 2, 107, 632, 3, 2, 2, 2, 109, - 639, 3, 2, 2, 2, 111, 645, 3, 2, 2, 2, 113, 654, 3, 2, 2, 2, 115, 656, - 3, 2, 2, 2, 117, 658, 3, 2, 2, 2, 119, 660, 3, 2, 2, 2, 121, 662, 3, 2, - 2, 2, 123, 664, 3, 2, 2, 2, 125, 666, 3, 2, 2, 2, 127, 668, 3, 2, 2, 2, - 129, 670, 3, 2, 2, 2, 131, 672, 3, 2, 2, 2, 133, 674, 3, 2, 2, 2, 135, - 676, 3, 2, 2, 2, 137, 678, 3, 2, 2, 2, 139, 680, 3, 2, 2, 2, 141, 682, - 3, 2, 2, 2, 143, 684, 3, 2, 2, 2, 145, 686, 3, 2, 2, 2, 147, 688, 3, 2, - 2, 2, 149, 690, 3, 2, 2, 2, 151, 692, 3, 2, 2, 2, 153, 694, 3, 2, 2, 2, - 155, 696, 3, 2, 2, 2, 157, 698, 3, 2, 2, 2, 159, 700, 3, 2, 2, 2, 161, - 702, 3, 2, 2, 2, 163, 704, 3, 2, 2, 2, 165, 706, 3, 2, 2, 2, 167, 168, + 2, 19, 216, 3, 2, 2, 2, 21, 221, 3, 2, 2, 2, 23, 229, 3, 2, 2, 2, 25, 236, + 3, 2, 2, 2, 27, 245, 3, 2, 2, 2, 29, 250, 3, 2, 2, 2, 31, 260, 3, 2, 2, + 2, 33, 268, 3, 2, 2, 2, 35, 282, 3, 2, 2, 2, 37, 305, 3, 2, 2, 2, 39, 312, + 3, 2, 2, 2, 41, 336, 3, 2, 2, 2, 43, 340, 3, 2, 2, 2, 45, 343, 3, 2, 2, + 2, 47, 347, 3, 2, 2, 2, 49, 349, 3, 2, 2, 2, 51, 352, 3, 2, 2, 2, 53, 354, + 3, 2, 2, 2, 55, 357, 3, 2, 2, 2, 57, 359, 3, 2, 2, 2, 59, 362, 3, 2, 2, + 2, 61, 365, 3, 2, 2, 2, 63, 374, 3, 2, 2, 2, 65, 384, 3, 2, 2, 2, 67, 395, + 3, 2, 2, 2, 69, 404, 3, 2, 2, 2, 71, 411, 3, 2, 2, 2, 73, 418, 3, 2, 2, + 2, 75, 420, 3, 2, 2, 2, 77, 422, 3, 2, 2, 2, 79, 424, 3, 2, 2, 2, 81, 426, + 3, 2, 2, 2, 83, 428, 3, 2, 2, 2, 85, 430, 3, 2, 2, 2, 87, 442, 3, 2, 2, + 2, 89, 460, 3, 2, 2, 2, 91, 533, 3, 2, 2, 2, 93, 535, 3, 2, 2, 2, 95, 561, + 3, 2, 2, 2, 97, 573, 3, 2, 2, 2, 99, 614, 3, 2, 2, 2, 101, 616, 3, 2, 2, + 2, 103, 623, 3, 2, 2, 2, 105, 630, 3, 2, 2, 2, 107, 633, 3, 2, 2, 2, 109, + 640, 3, 2, 2, 2, 111, 646, 3, 2, 2, 2, 113, 655, 3, 2, 2, 2, 115, 657, + 3, 2, 2, 2, 117, 659, 3, 2, 2, 2, 119, 661, 3, 2, 2, 2, 121, 663, 3, 2, + 2, 2, 123, 665, 3, 2, 2, 2, 125, 667, 3, 2, 2, 2, 127, 669, 3, 2, 2, 2, + 129, 671, 3, 2, 2, 2, 131, 673, 3, 2, 2, 2, 133, 675, 3, 2, 2, 2, 135, + 677, 3, 2, 2, 2, 137, 679, 3, 2, 2, 2, 139, 681, 3, 2, 2, 2, 141, 683, + 3, 2, 2, 2, 143, 685, 3, 2, 2, 2, 145, 687, 3, 2, 2, 2, 147, 689, 3, 2, + 2, 2, 149, 691, 3, 2, 2, 2, 151, 693, 3, 2, 2, 2, 153, 695, 3, 2, 2, 2, + 155, 697, 3, 2, 2, 2, 157, 699, 3, 2, 2, 2, 159, 701, 3, 2, 2, 2, 161, + 703, 3, 2, 2, 2, 163, 705, 3, 2, 2, 2, 165, 707, 3, 2, 2, 2, 167, 168, 7, 116, 2, 2, 168, 169, 7, 119, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 103, 2, 2, 171, 4, 3, 2, 2, 2, 172, 173, 7, 104, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 110, 2, 2, 175, 176, 7, 118, 2, 2, 176, 177, 7, @@ -163,173 +163,174 @@ var serializedLexerAtn = []uint16{ 2, 217, 218, 7, 103, 2, 2, 218, 219, 7, 117, 2, 2, 219, 220, 7, 101, 2, 2, 220, 20, 3, 2, 2, 2, 221, 222, 7, 99, 2, 2, 222, 223, 7, 101, 2, 2, 223, 224, 7, 118, 2, 2, 224, 225, 7, 107, 2, 2, 225, 226, 7, 113, 2, 2, - 226, 227, 7, 112, 2, 2, 227, 22, 3, 2, 2, 2, 228, 229, 7, 113, 2, 2, 229, - 230, 7, 119, 2, 2, 230, 231, 7, 118, 2, 2, 231, 232, 7, 114, 2, 2, 232, - 233, 7, 119, 2, 2, 233, 234, 7, 118, 2, 2, 234, 24, 3, 2, 2, 2, 235, 236, - 7, 114, 2, 2, 236, 237, 7, 116, 2, 2, 237, 238, 7, 107, 2, 2, 238, 239, - 7, 113, 2, 2, 239, 240, 7, 116, 2, 2, 240, 241, 7, 107, 2, 2, 241, 242, - 7, 118, 2, 2, 242, 243, 7, 123, 2, 2, 243, 26, 3, 2, 2, 2, 244, 245, 7, - 118, 2, 2, 245, 246, 7, 99, 2, 2, 246, 247, 7, 105, 2, 2, 247, 248, 7, - 117, 2, 2, 248, 28, 3, 2, 2, 2, 249, 250, 7, 114, 2, 2, 250, 251, 7, 116, - 2, 2, 251, 252, 7, 103, 2, 2, 252, 253, 7, 104, 2, 2, 253, 254, 7, 107, - 2, 2, 254, 255, 7, 110, 2, 2, 255, 256, 7, 118, 2, 2, 256, 257, 7, 103, - 2, 2, 257, 258, 7, 116, 2, 2, 258, 30, 3, 2, 2, 2, 259, 260, 7, 103, 2, - 2, 260, 261, 7, 112, 2, 2, 261, 262, 7, 99, 2, 2, 262, 263, 7, 100, 2, - 2, 263, 264, 7, 110, 2, 2, 264, 265, 7, 103, 2, 2, 265, 266, 7, 102, 2, - 2, 266, 32, 3, 2, 2, 2, 267, 268, 7, 121, 2, 2, 268, 269, 7, 99, 2, 2, - 269, 270, 7, 116, 2, 2, 270, 271, 7, 112, 2, 2, 271, 272, 7, 97, 2, 2, - 272, 273, 7, 103, 2, 2, 273, 274, 7, 120, 2, 2, 274, 275, 7, 118, 2, 2, - 275, 276, 7, 118, 2, 2, 276, 277, 7, 123, 2, 2, 277, 278, 7, 114, 2, 2, - 278, 279, 7, 103, 2, 2, 279, 280, 7, 117, 2, 2, 280, 34, 3, 2, 2, 2, 281, - 282, 7, 117, 2, 2, 282, 283, 7, 109, 2, 2, 283, 284, 7, 107, 2, 2, 284, - 285, 7, 114, 2, 2, 285, 286, 7, 47, 2, 2, 286, 287, 7, 107, 2, 2, 287, - 288, 7, 104, 2, 2, 288, 289, 7, 47, 2, 2, 289, 290, 7, 119, 2, 2, 290, - 291, 7, 112, 2, 2, 291, 292, 7, 109, 2, 2, 292, 293, 7, 112, 2, 2, 293, - 294, 7, 113, 2, 2, 294, 295, 7, 121, 2, 2, 295, 296, 7, 112, 2, 2, 296, - 297, 7, 47, 2, 2, 297, 298, 7, 104, 2, 2, 298, 299, 7, 107, 2, 2, 299, - 300, 7, 110, 2, 2, 300, 301, 7, 118, 2, 2, 301, 302, 7, 103, 2, 2, 302, - 303, 7, 116, 2, 2, 303, 36, 3, 2, 2, 2, 304, 305, 7, 99, 2, 2, 305, 306, - 7, 114, 2, 2, 306, 307, 7, 114, 2, 2, 307, 308, 7, 103, 2, 2, 308, 309, - 7, 112, 2, 2, 309, 310, 7, 102, 2, 2, 310, 38, 3, 2, 2, 2, 311, 312, 7, - 116, 2, 2, 312, 313, 7, 103, 2, 2, 313, 314, 7, 115, 2, 2, 314, 315, 7, - 119, 2, 2, 315, 316, 7, 107, 2, 2, 316, 317, 7, 116, 2, 2, 317, 318, 7, - 103, 2, 2, 318, 319, 7, 102, 2, 2, 319, 320, 7, 97, 2, 2, 320, 321, 7, - 103, 2, 2, 321, 322, 7, 112, 2, 2, 322, 323, 7, 105, 2, 2, 323, 324, 7, - 107, 2, 2, 324, 325, 7, 112, 2, 2, 325, 326, 7, 103, 2, 2, 326, 327, 7, - 97, 2, 2, 327, 328, 7, 120, 2, 2, 328, 329, 7, 103, 2, 2, 329, 330, 7, - 116, 2, 2, 330, 331, 7, 117, 2, 2, 331, 332, 7, 107, 2, 2, 332, 333, 7, - 113, 2, 2, 333, 334, 7, 112, 2, 2, 334, 40, 3, 2, 2, 2, 335, 336, 7, 99, - 2, 2, 336, 337, 7, 112, 2, 2, 337, 338, 7, 102, 2, 2, 338, 42, 3, 2, 2, - 2, 339, 340, 7, 113, 2, 2, 340, 341, 7, 116, 2, 2, 341, 44, 3, 2, 2, 2, - 342, 343, 7, 112, 2, 2, 343, 344, 7, 113, 2, 2, 344, 345, 7, 118, 2, 2, - 345, 46, 3, 2, 2, 2, 346, 347, 7, 62, 2, 2, 347, 48, 3, 2, 2, 2, 348, 349, - 7, 62, 2, 2, 349, 350, 7, 63, 2, 2, 350, 50, 3, 2, 2, 2, 351, 352, 7, 64, - 2, 2, 352, 52, 3, 2, 2, 2, 353, 354, 7, 64, 2, 2, 354, 355, 7, 63, 2, 2, - 355, 54, 3, 2, 2, 2, 356, 357, 7, 63, 2, 2, 357, 56, 3, 2, 2, 2, 358, 359, - 7, 35, 2, 2, 359, 360, 7, 63, 2, 2, 360, 58, 3, 2, 2, 2, 361, 362, 7, 107, - 2, 2, 362, 363, 7, 112, 2, 2, 363, 60, 3, 2, 2, 2, 364, 365, 7, 101, 2, - 2, 365, 366, 7, 113, 2, 2, 366, 367, 7, 112, 2, 2, 367, 368, 7, 118, 2, - 2, 368, 369, 7, 99, 2, 2, 369, 370, 7, 107, 2, 2, 370, 371, 7, 112, 2, - 2, 371, 372, 7, 117, 2, 2, 372, 62, 3, 2, 2, 2, 373, 374, 7, 107, 2, 2, - 374, 375, 7, 101, 2, 2, 375, 376, 7, 113, 2, 2, 376, 377, 7, 112, 2, 2, - 377, 378, 7, 118, 2, 2, 378, 379, 7, 99, 2, 2, 379, 380, 7, 107, 2, 2, - 380, 381, 7, 112, 2, 2, 381, 382, 7, 117, 2, 2, 382, 64, 3, 2, 2, 2, 383, - 384, 7, 117, 2, 2, 384, 385, 7, 118, 2, 2, 385, 386, 7, 99, 2, 2, 386, - 387, 7, 116, 2, 2, 387, 388, 7, 118, 2, 2, 388, 389, 7, 117, 2, 2, 389, - 390, 7, 121, 2, 2, 390, 391, 7, 107, 2, 2, 391, 392, 7, 118, 2, 2, 392, - 393, 7, 106, 2, 2, 393, 66, 3, 2, 2, 2, 394, 395, 7, 103, 2, 2, 395, 396, - 7, 112, 2, 2, 396, 397, 7, 102, 2, 2, 397, 398, 7, 117, 2, 2, 398, 399, - 7, 121, 2, 2, 399, 400, 7, 107, 2, 2, 400, 401, 7, 118, 2, 2, 401, 402, - 7, 106, 2, 2, 402, 68, 3, 2, 2, 2, 403, 404, 7, 114, 2, 2, 404, 405, 7, - 111, 2, 2, 405, 406, 7, 99, 2, 2, 406, 407, 7, 118, 2, 2, 407, 408, 7, - 101, 2, 2, 408, 409, 7, 106, 2, 2, 409, 70, 3, 2, 2, 2, 410, 411, 7, 103, - 2, 2, 411, 412, 7, 122, 2, 2, 412, 413, 7, 107, 2, 2, 413, 414, 7, 117, - 2, 2, 414, 415, 7, 118, 2, 2, 415, 416, 7, 117, 2, 2, 416, 72, 3, 2, 2, - 2, 417, 418, 7, 93, 2, 2, 418, 74, 3, 2, 2, 2, 419, 420, 7, 95, 2, 2, 420, - 76, 3, 2, 2, 2, 421, 422, 7, 42, 2, 2, 422, 78, 3, 2, 2, 2, 423, 424, 7, - 43, 2, 2, 424, 80, 3, 2, 2, 2, 425, 426, 7, 46, 2, 2, 426, 82, 3, 2, 2, - 2, 427, 428, 7, 47, 2, 2, 428, 84, 3, 2, 2, 2, 429, 437, 7, 60, 2, 2, 430, - 432, 7, 34, 2, 2, 431, 430, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 431, - 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 436, 3, 2, 2, 2, 435, 433, 3, 2, - 2, 2, 436, 438, 7, 64, 2, 2, 437, 433, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, - 438, 86, 3, 2, 2, 2, 439, 442, 5, 89, 45, 2, 440, 442, 5, 91, 46, 2, 441, - 439, 3, 2, 2, 2, 441, 440, 3, 2, 2, 2, 442, 88, 3, 2, 2, 2, 443, 444, 5, - 129, 65, 2, 444, 445, 5, 131, 66, 2, 445, 446, 5, 127, 64, 2, 446, 447, - 5, 129, 65, 2, 447, 460, 3, 2, 2, 2, 448, 449, 5, 139, 70, 2, 449, 450, - 5, 123, 62, 2, 450, 451, 5, 121, 61, 2, 451, 452, 5, 131, 66, 2, 452, 453, - 5, 155, 78, 2, 453, 454, 5, 139, 70, 2, 454, 460, 3, 2, 2, 2, 455, 456, - 5, 137, 69, 2, 456, 457, 5, 143, 72, 2, 457, 458, 5, 159, 80, 2, 458, 460, - 3, 2, 2, 2, 459, 443, 3, 2, 2, 2, 459, 448, 3, 2, 2, 2, 459, 455, 3, 2, - 2, 2, 460, 90, 3, 2, 2, 2, 461, 462, 5, 123, 62, 2, 462, 463, 5, 139, 70, - 2, 463, 464, 5, 123, 62, 2, 464, 465, 5, 149, 75, 2, 465, 466, 5, 127, - 64, 2, 466, 467, 5, 123, 62, 2, 467, 468, 5, 141, 71, 2, 468, 469, 5, 119, - 60, 2, 469, 470, 5, 163, 82, 2, 470, 533, 3, 2, 2, 2, 471, 472, 5, 115, - 58, 2, 472, 473, 5, 137, 69, 2, 473, 474, 5, 123, 62, 2, 474, 475, 5, 149, - 75, 2, 475, 476, 5, 153, 77, 2, 476, 533, 3, 2, 2, 2, 477, 478, 5, 119, - 60, 2, 478, 479, 5, 149, 75, 2, 479, 480, 5, 131, 66, 2, 480, 481, 5, 153, - 77, 2, 481, 482, 5, 131, 66, 2, 482, 483, 5, 119, 60, 2, 483, 484, 5, 115, - 58, 2, 484, 485, 5, 137, 69, 2, 485, 533, 3, 2, 2, 2, 486, 487, 5, 123, - 62, 2, 487, 488, 5, 149, 75, 2, 488, 489, 5, 149, 75, 2, 489, 490, 5, 143, - 72, 2, 490, 491, 5, 149, 75, 2, 491, 533, 3, 2, 2, 2, 492, 493, 5, 159, - 80, 2, 493, 494, 5, 115, 58, 2, 494, 495, 5, 149, 75, 2, 495, 496, 5, 141, - 71, 2, 496, 497, 5, 131, 66, 2, 497, 498, 5, 141, 71, 2, 498, 499, 5, 127, - 64, 2, 499, 533, 3, 2, 2, 2, 500, 501, 5, 141, 71, 2, 501, 502, 5, 143, - 72, 2, 502, 503, 5, 153, 77, 2, 503, 504, 5, 131, 66, 2, 504, 505, 5, 119, - 60, 2, 505, 506, 5, 123, 62, 2, 506, 533, 3, 2, 2, 2, 507, 508, 5, 131, - 66, 2, 508, 509, 5, 141, 71, 2, 509, 510, 5, 125, 63, 2, 510, 511, 5, 143, - 72, 2, 511, 533, 3, 2, 2, 2, 512, 513, 5, 131, 66, 2, 513, 514, 5, 141, - 71, 2, 514, 515, 5, 125, 63, 2, 515, 516, 5, 143, 72, 2, 516, 517, 5, 149, - 75, 2, 517, 518, 5, 139, 70, 2, 518, 519, 5, 115, 58, 2, 519, 520, 5, 153, - 77, 2, 520, 521, 5, 131, 66, 2, 521, 522, 5, 143, 72, 2, 522, 523, 5, 141, - 71, 2, 523, 524, 5, 115, 58, 2, 524, 525, 5, 137, 69, 2, 525, 533, 3, 2, - 2, 2, 526, 527, 5, 121, 61, 2, 527, 528, 5, 123, 62, 2, 528, 529, 5, 117, - 59, 2, 529, 530, 5, 155, 78, 2, 530, 531, 5, 127, 64, 2, 531, 533, 3, 2, - 2, 2, 532, 461, 3, 2, 2, 2, 532, 471, 3, 2, 2, 2, 532, 477, 3, 2, 2, 2, - 532, 486, 3, 2, 2, 2, 532, 492, 3, 2, 2, 2, 532, 500, 3, 2, 2, 2, 532, - 507, 3, 2, 2, 2, 532, 512, 3, 2, 2, 2, 532, 526, 3, 2, 2, 2, 533, 92, 3, - 2, 2, 2, 534, 556, 9, 2, 2, 2, 535, 555, 9, 3, 2, 2, 536, 538, 7, 60, 2, - 2, 537, 536, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 539, 3, 2, 2, 2, 539, - 542, 7, 93, 2, 2, 540, 543, 5, 95, 48, 2, 541, 543, 5, 97, 49, 2, 542, - 540, 3, 2, 2, 2, 542, 541, 3, 2, 2, 2, 543, 548, 3, 2, 2, 2, 544, 545, - 7, 60, 2, 2, 545, 547, 5, 97, 49, 2, 546, 544, 3, 2, 2, 2, 547, 550, 3, - 2, 2, 2, 548, 546, 3, 2, 2, 2, 548, 549, 3, 2, 2, 2, 549, 551, 3, 2, 2, - 2, 550, 548, 3, 2, 2, 2, 551, 552, 7, 95, 2, 2, 552, 555, 3, 2, 2, 2, 553, - 555, 7, 44, 2, 2, 554, 535, 3, 2, 2, 2, 554, 537, 3, 2, 2, 2, 554, 553, - 3, 2, 2, 2, 555, 558, 3, 2, 2, 2, 556, 554, 3, 2, 2, 2, 556, 557, 3, 2, - 2, 2, 557, 94, 3, 2, 2, 2, 558, 556, 3, 2, 2, 2, 559, 561, 4, 50, 59, 2, - 560, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 560, 3, 2, 2, 2, 562, - 563, 3, 2, 2, 2, 563, 570, 3, 2, 2, 2, 564, 566, 7, 48, 2, 2, 565, 567, - 4, 50, 59, 2, 566, 565, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 566, 3, - 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, 571, 3, 2, 2, 2, 570, 564, 3, 2, 2, - 2, 570, 571, 3, 2, 2, 2, 571, 96, 3, 2, 2, 2, 572, 576, 9, 4, 2, 2, 573, - 575, 9, 5, 2, 2, 574, 573, 3, 2, 2, 2, 575, 578, 3, 2, 2, 2, 576, 574, - 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 98, 3, 2, 2, 2, 578, 576, 3, 2, - 2, 2, 579, 582, 7, 36, 2, 2, 580, 583, 5, 99, 50, 2, 581, 583, 5, 103, - 52, 2, 582, 580, 3, 2, 2, 2, 582, 581, 3, 2, 2, 2, 583, 584, 3, 2, 2, 2, - 584, 585, 7, 36, 2, 2, 585, 614, 3, 2, 2, 2, 586, 589, 7, 41, 2, 2, 587, - 590, 5, 99, 50, 2, 588, 590, 5, 103, 52, 2, 589, 587, 3, 2, 2, 2, 589, - 588, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 592, 7, 41, 2, 2, 592, 614, - 3, 2, 2, 2, 593, 594, 7, 94, 2, 2, 594, 595, 7, 36, 2, 2, 595, 598, 3, - 2, 2, 2, 596, 599, 5, 99, 50, 2, 597, 599, 5, 103, 52, 2, 598, 596, 3, - 2, 2, 2, 598, 597, 3, 2, 2, 2, 599, 600, 3, 2, 2, 2, 600, 601, 7, 94, 2, - 2, 601, 602, 7, 36, 2, 2, 602, 614, 3, 2, 2, 2, 603, 604, 7, 41, 2, 2, - 604, 605, 7, 41, 2, 2, 605, 608, 3, 2, 2, 2, 606, 609, 5, 99, 50, 2, 607, - 609, 5, 103, 52, 2, 608, 606, 3, 2, 2, 2, 608, 607, 3, 2, 2, 2, 609, 610, - 3, 2, 2, 2, 610, 611, 7, 41, 2, 2, 611, 612, 7, 41, 2, 2, 612, 614, 3, - 2, 2, 2, 613, 579, 3, 2, 2, 2, 613, 586, 3, 2, 2, 2, 613, 593, 3, 2, 2, - 2, 613, 603, 3, 2, 2, 2, 614, 100, 3, 2, 2, 2, 615, 616, 5, 93, 47, 2, - 616, 617, 7, 60, 2, 2, 617, 618, 5, 93, 47, 2, 618, 102, 3, 2, 2, 2, 619, - 621, 10, 6, 2, 2, 620, 619, 3, 2, 2, 2, 621, 624, 3, 2, 2, 2, 622, 623, - 3, 2, 2, 2, 622, 620, 3, 2, 2, 2, 623, 104, 3, 2, 2, 2, 624, 622, 3, 2, - 2, 2, 625, 626, 7, 94, 2, 2, 626, 630, 7, 36, 2, 2, 627, 628, 7, 41, 2, - 2, 628, 630, 7, 41, 2, 2, 629, 625, 3, 2, 2, 2, 629, 627, 3, 2, 2, 2, 630, - 106, 3, 2, 2, 2, 631, 633, 9, 7, 2, 2, 632, 631, 3, 2, 2, 2, 633, 634, - 3, 2, 2, 2, 634, 632, 3, 2, 2, 2, 634, 635, 3, 2, 2, 2, 635, 636, 3, 2, - 2, 2, 636, 637, 8, 54, 2, 2, 637, 108, 3, 2, 2, 2, 638, 640, 7, 15, 2, - 2, 639, 638, 3, 2, 2, 2, 639, 640, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, - 642, 7, 12, 2, 2, 642, 643, 3, 2, 2, 2, 643, 644, 8, 55, 2, 2, 644, 110, - 3, 2, 2, 2, 645, 649, 7, 37, 2, 2, 646, 648, 10, 6, 2, 2, 647, 646, 3, - 2, 2, 2, 648, 651, 3, 2, 2, 2, 649, 647, 3, 2, 2, 2, 649, 650, 3, 2, 2, - 2, 650, 652, 3, 2, 2, 2, 651, 649, 3, 2, 2, 2, 652, 653, 8, 56, 2, 2, 653, - 112, 3, 2, 2, 2, 654, 655, 11, 2, 2, 2, 655, 114, 3, 2, 2, 2, 656, 657, - 9, 8, 2, 2, 657, 116, 3, 2, 2, 2, 658, 659, 9, 9, 2, 2, 659, 118, 3, 2, - 2, 2, 660, 661, 9, 10, 2, 2, 661, 120, 3, 2, 2, 2, 662, 663, 9, 11, 2, - 2, 663, 122, 3, 2, 2, 2, 664, 665, 9, 12, 2, 2, 665, 124, 3, 2, 2, 2, 666, - 667, 9, 13, 2, 2, 667, 126, 3, 2, 2, 2, 668, 669, 9, 14, 2, 2, 669, 128, - 3, 2, 2, 2, 670, 671, 9, 15, 2, 2, 671, 130, 3, 2, 2, 2, 672, 673, 9, 16, - 2, 2, 673, 132, 3, 2, 2, 2, 674, 675, 9, 17, 2, 2, 675, 134, 3, 2, 2, 2, - 676, 677, 9, 18, 2, 2, 677, 136, 3, 2, 2, 2, 678, 679, 9, 19, 2, 2, 679, - 138, 3, 2, 2, 2, 680, 681, 9, 20, 2, 2, 681, 140, 3, 2, 2, 2, 682, 683, - 9, 21, 2, 2, 683, 142, 3, 2, 2, 2, 684, 685, 9, 22, 2, 2, 685, 144, 3, - 2, 2, 2, 686, 687, 9, 23, 2, 2, 687, 146, 3, 2, 2, 2, 688, 689, 9, 24, - 2, 2, 689, 148, 3, 2, 2, 2, 690, 691, 9, 25, 2, 2, 691, 150, 3, 2, 2, 2, - 692, 693, 9, 26, 2, 2, 693, 152, 3, 2, 2, 2, 694, 695, 9, 27, 2, 2, 695, - 154, 3, 2, 2, 2, 696, 697, 9, 28, 2, 2, 697, 156, 3, 2, 2, 2, 698, 699, - 9, 29, 2, 2, 699, 158, 3, 2, 2, 2, 700, 701, 9, 30, 2, 2, 701, 160, 3, - 2, 2, 2, 702, 703, 9, 31, 2, 2, 703, 162, 3, 2, 2, 2, 704, 705, 9, 32, - 2, 2, 705, 164, 3, 2, 2, 2, 706, 707, 9, 33, 2, 2, 707, 166, 3, 2, 2, 2, - 27, 2, 433, 437, 441, 459, 532, 537, 542, 548, 554, 556, 562, 568, 570, - 576, 582, 589, 598, 608, 613, 622, 629, 634, 639, 649, 3, 2, 3, 2, + 226, 227, 7, 112, 2, 2, 227, 228, 7, 117, 2, 2, 228, 22, 3, 2, 2, 2, 229, + 230, 7, 113, 2, 2, 230, 231, 7, 119, 2, 2, 231, 232, 7, 118, 2, 2, 232, + 233, 7, 114, 2, 2, 233, 234, 7, 119, 2, 2, 234, 235, 7, 118, 2, 2, 235, + 24, 3, 2, 2, 2, 236, 237, 7, 114, 2, 2, 237, 238, 7, 116, 2, 2, 238, 239, + 7, 107, 2, 2, 239, 240, 7, 113, 2, 2, 240, 241, 7, 116, 2, 2, 241, 242, + 7, 107, 2, 2, 242, 243, 7, 118, 2, 2, 243, 244, 7, 123, 2, 2, 244, 26, + 3, 2, 2, 2, 245, 246, 7, 118, 2, 2, 246, 247, 7, 99, 2, 2, 247, 248, 7, + 105, 2, 2, 248, 249, 7, 117, 2, 2, 249, 28, 3, 2, 2, 2, 250, 251, 7, 114, + 2, 2, 251, 252, 7, 116, 2, 2, 252, 253, 7, 103, 2, 2, 253, 254, 7, 104, + 2, 2, 254, 255, 7, 107, 2, 2, 255, 256, 7, 110, 2, 2, 256, 257, 7, 118, + 2, 2, 257, 258, 7, 103, 2, 2, 258, 259, 7, 116, 2, 2, 259, 30, 3, 2, 2, + 2, 260, 261, 7, 103, 2, 2, 261, 262, 7, 112, 2, 2, 262, 263, 7, 99, 2, + 2, 263, 264, 7, 100, 2, 2, 264, 265, 7, 110, 2, 2, 265, 266, 7, 103, 2, + 2, 266, 267, 7, 102, 2, 2, 267, 32, 3, 2, 2, 2, 268, 269, 7, 121, 2, 2, + 269, 270, 7, 99, 2, 2, 270, 271, 7, 116, 2, 2, 271, 272, 7, 112, 2, 2, + 272, 273, 7, 97, 2, 2, 273, 274, 7, 103, 2, 2, 274, 275, 7, 120, 2, 2, + 275, 276, 7, 118, 2, 2, 276, 277, 7, 118, 2, 2, 277, 278, 7, 123, 2, 2, + 278, 279, 7, 114, 2, 2, 279, 280, 7, 103, 2, 2, 280, 281, 7, 117, 2, 2, + 281, 34, 3, 2, 2, 2, 282, 283, 7, 117, 2, 2, 283, 284, 7, 109, 2, 2, 284, + 285, 7, 107, 2, 2, 285, 286, 7, 114, 2, 2, 286, 287, 7, 47, 2, 2, 287, + 288, 7, 107, 2, 2, 288, 289, 7, 104, 2, 2, 289, 290, 7, 47, 2, 2, 290, + 291, 7, 119, 2, 2, 291, 292, 7, 112, 2, 2, 292, 293, 7, 109, 2, 2, 293, + 294, 7, 112, 2, 2, 294, 295, 7, 113, 2, 2, 295, 296, 7, 121, 2, 2, 296, + 297, 7, 112, 2, 2, 297, 298, 7, 47, 2, 2, 298, 299, 7, 104, 2, 2, 299, + 300, 7, 107, 2, 2, 300, 301, 7, 110, 2, 2, 301, 302, 7, 118, 2, 2, 302, + 303, 7, 103, 2, 2, 303, 304, 7, 116, 2, 2, 304, 36, 3, 2, 2, 2, 305, 306, + 7, 99, 2, 2, 306, 307, 7, 114, 2, 2, 307, 308, 7, 114, 2, 2, 308, 309, + 7, 103, 2, 2, 309, 310, 7, 112, 2, 2, 310, 311, 7, 102, 2, 2, 311, 38, + 3, 2, 2, 2, 312, 313, 7, 116, 2, 2, 313, 314, 7, 103, 2, 2, 314, 315, 7, + 115, 2, 2, 315, 316, 7, 119, 2, 2, 316, 317, 7, 107, 2, 2, 317, 318, 7, + 116, 2, 2, 318, 319, 7, 103, 2, 2, 319, 320, 7, 102, 2, 2, 320, 321, 7, + 97, 2, 2, 321, 322, 7, 103, 2, 2, 322, 323, 7, 112, 2, 2, 323, 324, 7, + 105, 2, 2, 324, 325, 7, 107, 2, 2, 325, 326, 7, 112, 2, 2, 326, 327, 7, + 103, 2, 2, 327, 328, 7, 97, 2, 2, 328, 329, 7, 120, 2, 2, 329, 330, 7, + 103, 2, 2, 330, 331, 7, 116, 2, 2, 331, 332, 7, 117, 2, 2, 332, 333, 7, + 107, 2, 2, 333, 334, 7, 113, 2, 2, 334, 335, 7, 112, 2, 2, 335, 40, 3, + 2, 2, 2, 336, 337, 7, 99, 2, 2, 337, 338, 7, 112, 2, 2, 338, 339, 7, 102, + 2, 2, 339, 42, 3, 2, 2, 2, 340, 341, 7, 113, 2, 2, 341, 342, 7, 116, 2, + 2, 342, 44, 3, 2, 2, 2, 343, 344, 7, 112, 2, 2, 344, 345, 7, 113, 2, 2, + 345, 346, 7, 118, 2, 2, 346, 46, 3, 2, 2, 2, 347, 348, 7, 62, 2, 2, 348, + 48, 3, 2, 2, 2, 349, 350, 7, 62, 2, 2, 350, 351, 7, 63, 2, 2, 351, 50, + 3, 2, 2, 2, 352, 353, 7, 64, 2, 2, 353, 52, 3, 2, 2, 2, 354, 355, 7, 64, + 2, 2, 355, 356, 7, 63, 2, 2, 356, 54, 3, 2, 2, 2, 357, 358, 7, 63, 2, 2, + 358, 56, 3, 2, 2, 2, 359, 360, 7, 35, 2, 2, 360, 361, 7, 63, 2, 2, 361, + 58, 3, 2, 2, 2, 362, 363, 7, 107, 2, 2, 363, 364, 7, 112, 2, 2, 364, 60, + 3, 2, 2, 2, 365, 366, 7, 101, 2, 2, 366, 367, 7, 113, 2, 2, 367, 368, 7, + 112, 2, 2, 368, 369, 7, 118, 2, 2, 369, 370, 7, 99, 2, 2, 370, 371, 7, + 107, 2, 2, 371, 372, 7, 112, 2, 2, 372, 373, 7, 117, 2, 2, 373, 62, 3, + 2, 2, 2, 374, 375, 7, 107, 2, 2, 375, 376, 7, 101, 2, 2, 376, 377, 7, 113, + 2, 2, 377, 378, 7, 112, 2, 2, 378, 379, 7, 118, 2, 2, 379, 380, 7, 99, + 2, 2, 380, 381, 7, 107, 2, 2, 381, 382, 7, 112, 2, 2, 382, 383, 7, 117, + 2, 2, 383, 64, 3, 2, 2, 2, 384, 385, 7, 117, 2, 2, 385, 386, 7, 118, 2, + 2, 386, 387, 7, 99, 2, 2, 387, 388, 7, 116, 2, 2, 388, 389, 7, 118, 2, + 2, 389, 390, 7, 117, 2, 2, 390, 391, 7, 121, 2, 2, 391, 392, 7, 107, 2, + 2, 392, 393, 7, 118, 2, 2, 393, 394, 7, 106, 2, 2, 394, 66, 3, 2, 2, 2, + 395, 396, 7, 103, 2, 2, 396, 397, 7, 112, 2, 2, 397, 398, 7, 102, 2, 2, + 398, 399, 7, 117, 2, 2, 399, 400, 7, 121, 2, 2, 400, 401, 7, 107, 2, 2, + 401, 402, 7, 118, 2, 2, 402, 403, 7, 106, 2, 2, 403, 68, 3, 2, 2, 2, 404, + 405, 7, 114, 2, 2, 405, 406, 7, 111, 2, 2, 406, 407, 7, 99, 2, 2, 407, + 408, 7, 118, 2, 2, 408, 409, 7, 101, 2, 2, 409, 410, 7, 106, 2, 2, 410, + 70, 3, 2, 2, 2, 411, 412, 7, 103, 2, 2, 412, 413, 7, 122, 2, 2, 413, 414, + 7, 107, 2, 2, 414, 415, 7, 117, 2, 2, 415, 416, 7, 118, 2, 2, 416, 417, + 7, 117, 2, 2, 417, 72, 3, 2, 2, 2, 418, 419, 7, 93, 2, 2, 419, 74, 3, 2, + 2, 2, 420, 421, 7, 95, 2, 2, 421, 76, 3, 2, 2, 2, 422, 423, 7, 42, 2, 2, + 423, 78, 3, 2, 2, 2, 424, 425, 7, 43, 2, 2, 425, 80, 3, 2, 2, 2, 426, 427, + 7, 46, 2, 2, 427, 82, 3, 2, 2, 2, 428, 429, 7, 47, 2, 2, 429, 84, 3, 2, + 2, 2, 430, 438, 7, 60, 2, 2, 431, 433, 7, 34, 2, 2, 432, 431, 3, 2, 2, + 2, 433, 436, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, + 437, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 437, 439, 7, 64, 2, 2, 438, 434, + 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 86, 3, 2, 2, 2, 440, 443, 5, 89, + 45, 2, 441, 443, 5, 91, 46, 2, 442, 440, 3, 2, 2, 2, 442, 441, 3, 2, 2, + 2, 443, 88, 3, 2, 2, 2, 444, 445, 5, 129, 65, 2, 445, 446, 5, 131, 66, + 2, 446, 447, 5, 127, 64, 2, 447, 448, 5, 129, 65, 2, 448, 461, 3, 2, 2, + 2, 449, 450, 5, 139, 70, 2, 450, 451, 5, 123, 62, 2, 451, 452, 5, 121, + 61, 2, 452, 453, 5, 131, 66, 2, 453, 454, 5, 155, 78, 2, 454, 455, 5, 139, + 70, 2, 455, 461, 3, 2, 2, 2, 456, 457, 5, 137, 69, 2, 457, 458, 5, 143, + 72, 2, 458, 459, 5, 159, 80, 2, 459, 461, 3, 2, 2, 2, 460, 444, 3, 2, 2, + 2, 460, 449, 3, 2, 2, 2, 460, 456, 3, 2, 2, 2, 461, 90, 3, 2, 2, 2, 462, + 463, 5, 123, 62, 2, 463, 464, 5, 139, 70, 2, 464, 465, 5, 123, 62, 2, 465, + 466, 5, 149, 75, 2, 466, 467, 5, 127, 64, 2, 467, 468, 5, 123, 62, 2, 468, + 469, 5, 141, 71, 2, 469, 470, 5, 119, 60, 2, 470, 471, 5, 163, 82, 2, 471, + 534, 3, 2, 2, 2, 472, 473, 5, 115, 58, 2, 473, 474, 5, 137, 69, 2, 474, + 475, 5, 123, 62, 2, 475, 476, 5, 149, 75, 2, 476, 477, 5, 153, 77, 2, 477, + 534, 3, 2, 2, 2, 478, 479, 5, 119, 60, 2, 479, 480, 5, 149, 75, 2, 480, + 481, 5, 131, 66, 2, 481, 482, 5, 153, 77, 2, 482, 483, 5, 131, 66, 2, 483, + 484, 5, 119, 60, 2, 484, 485, 5, 115, 58, 2, 485, 486, 5, 137, 69, 2, 486, + 534, 3, 2, 2, 2, 487, 488, 5, 123, 62, 2, 488, 489, 5, 149, 75, 2, 489, + 490, 5, 149, 75, 2, 490, 491, 5, 143, 72, 2, 491, 492, 5, 149, 75, 2, 492, + 534, 3, 2, 2, 2, 493, 494, 5, 159, 80, 2, 494, 495, 5, 115, 58, 2, 495, + 496, 5, 149, 75, 2, 496, 497, 5, 141, 71, 2, 497, 498, 5, 131, 66, 2, 498, + 499, 5, 141, 71, 2, 499, 500, 5, 127, 64, 2, 500, 534, 3, 2, 2, 2, 501, + 502, 5, 141, 71, 2, 502, 503, 5, 143, 72, 2, 503, 504, 5, 153, 77, 2, 504, + 505, 5, 131, 66, 2, 505, 506, 5, 119, 60, 2, 506, 507, 5, 123, 62, 2, 507, + 534, 3, 2, 2, 2, 508, 509, 5, 131, 66, 2, 509, 510, 5, 141, 71, 2, 510, + 511, 5, 125, 63, 2, 511, 512, 5, 143, 72, 2, 512, 534, 3, 2, 2, 2, 513, + 514, 5, 131, 66, 2, 514, 515, 5, 141, 71, 2, 515, 516, 5, 125, 63, 2, 516, + 517, 5, 143, 72, 2, 517, 518, 5, 149, 75, 2, 518, 519, 5, 139, 70, 2, 519, + 520, 5, 115, 58, 2, 520, 521, 5, 153, 77, 2, 521, 522, 5, 131, 66, 2, 522, + 523, 5, 143, 72, 2, 523, 524, 5, 141, 71, 2, 524, 525, 5, 115, 58, 2, 525, + 526, 5, 137, 69, 2, 526, 534, 3, 2, 2, 2, 527, 528, 5, 121, 61, 2, 528, + 529, 5, 123, 62, 2, 529, 530, 5, 117, 59, 2, 530, 531, 5, 155, 78, 2, 531, + 532, 5, 127, 64, 2, 532, 534, 3, 2, 2, 2, 533, 462, 3, 2, 2, 2, 533, 472, + 3, 2, 2, 2, 533, 478, 3, 2, 2, 2, 533, 487, 3, 2, 2, 2, 533, 493, 3, 2, + 2, 2, 533, 501, 3, 2, 2, 2, 533, 508, 3, 2, 2, 2, 533, 513, 3, 2, 2, 2, + 533, 527, 3, 2, 2, 2, 534, 92, 3, 2, 2, 2, 535, 557, 9, 2, 2, 2, 536, 556, + 9, 3, 2, 2, 537, 539, 7, 60, 2, 2, 538, 537, 3, 2, 2, 2, 538, 539, 3, 2, + 2, 2, 539, 540, 3, 2, 2, 2, 540, 543, 7, 93, 2, 2, 541, 544, 5, 95, 48, + 2, 542, 544, 5, 97, 49, 2, 543, 541, 3, 2, 2, 2, 543, 542, 3, 2, 2, 2, + 544, 549, 3, 2, 2, 2, 545, 546, 7, 60, 2, 2, 546, 548, 5, 97, 49, 2, 547, + 545, 3, 2, 2, 2, 548, 551, 3, 2, 2, 2, 549, 547, 3, 2, 2, 2, 549, 550, + 3, 2, 2, 2, 550, 552, 3, 2, 2, 2, 551, 549, 3, 2, 2, 2, 552, 553, 7, 95, + 2, 2, 553, 556, 3, 2, 2, 2, 554, 556, 7, 44, 2, 2, 555, 536, 3, 2, 2, 2, + 555, 538, 3, 2, 2, 2, 555, 554, 3, 2, 2, 2, 556, 559, 3, 2, 2, 2, 557, + 555, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 94, 3, 2, 2, 2, 559, 557, 3, + 2, 2, 2, 560, 562, 4, 50, 59, 2, 561, 560, 3, 2, 2, 2, 562, 563, 3, 2, + 2, 2, 563, 561, 3, 2, 2, 2, 563, 564, 3, 2, 2, 2, 564, 571, 3, 2, 2, 2, + 565, 567, 7, 48, 2, 2, 566, 568, 4, 50, 59, 2, 567, 566, 3, 2, 2, 2, 568, + 569, 3, 2, 2, 2, 569, 567, 3, 2, 2, 2, 569, 570, 3, 2, 2, 2, 570, 572, + 3, 2, 2, 2, 571, 565, 3, 2, 2, 2, 571, 572, 3, 2, 2, 2, 572, 96, 3, 2, + 2, 2, 573, 577, 9, 4, 2, 2, 574, 576, 9, 5, 2, 2, 575, 574, 3, 2, 2, 2, + 576, 579, 3, 2, 2, 2, 577, 575, 3, 2, 2, 2, 577, 578, 3, 2, 2, 2, 578, + 98, 3, 2, 2, 2, 579, 577, 3, 2, 2, 2, 580, 583, 7, 36, 2, 2, 581, 584, + 5, 99, 50, 2, 582, 584, 5, 103, 52, 2, 583, 581, 3, 2, 2, 2, 583, 582, + 3, 2, 2, 2, 584, 585, 3, 2, 2, 2, 585, 586, 7, 36, 2, 2, 586, 615, 3, 2, + 2, 2, 587, 590, 7, 41, 2, 2, 588, 591, 5, 99, 50, 2, 589, 591, 5, 103, + 52, 2, 590, 588, 3, 2, 2, 2, 590, 589, 3, 2, 2, 2, 591, 592, 3, 2, 2, 2, + 592, 593, 7, 41, 2, 2, 593, 615, 3, 2, 2, 2, 594, 595, 7, 94, 2, 2, 595, + 596, 7, 36, 2, 2, 596, 599, 3, 2, 2, 2, 597, 600, 5, 99, 50, 2, 598, 600, + 5, 103, 52, 2, 599, 597, 3, 2, 2, 2, 599, 598, 3, 2, 2, 2, 600, 601, 3, + 2, 2, 2, 601, 602, 7, 94, 2, 2, 602, 603, 7, 36, 2, 2, 603, 615, 3, 2, + 2, 2, 604, 605, 7, 41, 2, 2, 605, 606, 7, 41, 2, 2, 606, 609, 3, 2, 2, + 2, 607, 610, 5, 99, 50, 2, 608, 610, 5, 103, 52, 2, 609, 607, 3, 2, 2, + 2, 609, 608, 3, 2, 2, 2, 610, 611, 3, 2, 2, 2, 611, 612, 7, 41, 2, 2, 612, + 613, 7, 41, 2, 2, 613, 615, 3, 2, 2, 2, 614, 580, 3, 2, 2, 2, 614, 587, + 3, 2, 2, 2, 614, 594, 3, 2, 2, 2, 614, 604, 3, 2, 2, 2, 615, 100, 3, 2, + 2, 2, 616, 617, 5, 93, 47, 2, 617, 618, 7, 60, 2, 2, 618, 619, 5, 93, 47, + 2, 619, 102, 3, 2, 2, 2, 620, 622, 10, 6, 2, 2, 621, 620, 3, 2, 2, 2, 622, + 625, 3, 2, 2, 2, 623, 624, 3, 2, 2, 2, 623, 621, 3, 2, 2, 2, 624, 104, + 3, 2, 2, 2, 625, 623, 3, 2, 2, 2, 626, 627, 7, 94, 2, 2, 627, 631, 7, 36, + 2, 2, 628, 629, 7, 41, 2, 2, 629, 631, 7, 41, 2, 2, 630, 626, 3, 2, 2, + 2, 630, 628, 3, 2, 2, 2, 631, 106, 3, 2, 2, 2, 632, 634, 9, 7, 2, 2, 633, + 632, 3, 2, 2, 2, 634, 635, 3, 2, 2, 2, 635, 633, 3, 2, 2, 2, 635, 636, + 3, 2, 2, 2, 636, 637, 3, 2, 2, 2, 637, 638, 8, 54, 2, 2, 638, 108, 3, 2, + 2, 2, 639, 641, 7, 15, 2, 2, 640, 639, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, + 641, 642, 3, 2, 2, 2, 642, 643, 7, 12, 2, 2, 643, 644, 3, 2, 2, 2, 644, + 645, 8, 55, 2, 2, 645, 110, 3, 2, 2, 2, 646, 650, 7, 37, 2, 2, 647, 649, + 10, 6, 2, 2, 648, 647, 3, 2, 2, 2, 649, 652, 3, 2, 2, 2, 650, 648, 3, 2, + 2, 2, 650, 651, 3, 2, 2, 2, 651, 653, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, + 653, 654, 8, 56, 2, 2, 654, 112, 3, 2, 2, 2, 655, 656, 11, 2, 2, 2, 656, + 114, 3, 2, 2, 2, 657, 658, 9, 8, 2, 2, 658, 116, 3, 2, 2, 2, 659, 660, + 9, 9, 2, 2, 660, 118, 3, 2, 2, 2, 661, 662, 9, 10, 2, 2, 662, 120, 3, 2, + 2, 2, 663, 664, 9, 11, 2, 2, 664, 122, 3, 2, 2, 2, 665, 666, 9, 12, 2, + 2, 666, 124, 3, 2, 2, 2, 667, 668, 9, 13, 2, 2, 668, 126, 3, 2, 2, 2, 669, + 670, 9, 14, 2, 2, 670, 128, 3, 2, 2, 2, 671, 672, 9, 15, 2, 2, 672, 130, + 3, 2, 2, 2, 673, 674, 9, 16, 2, 2, 674, 132, 3, 2, 2, 2, 675, 676, 9, 17, + 2, 2, 676, 134, 3, 2, 2, 2, 677, 678, 9, 18, 2, 2, 678, 136, 3, 2, 2, 2, + 679, 680, 9, 19, 2, 2, 680, 138, 3, 2, 2, 2, 681, 682, 9, 20, 2, 2, 682, + 140, 3, 2, 2, 2, 683, 684, 9, 21, 2, 2, 684, 142, 3, 2, 2, 2, 685, 686, + 9, 22, 2, 2, 686, 144, 3, 2, 2, 2, 687, 688, 9, 23, 2, 2, 688, 146, 3, + 2, 2, 2, 689, 690, 9, 24, 2, 2, 690, 148, 3, 2, 2, 2, 691, 692, 9, 25, + 2, 2, 692, 150, 3, 2, 2, 2, 693, 694, 9, 26, 2, 2, 694, 152, 3, 2, 2, 2, + 695, 696, 9, 27, 2, 2, 696, 154, 3, 2, 2, 2, 697, 698, 9, 28, 2, 2, 698, + 156, 3, 2, 2, 2, 699, 700, 9, 29, 2, 2, 700, 158, 3, 2, 2, 2, 701, 702, + 9, 30, 2, 2, 702, 160, 3, 2, 2, 2, 703, 704, 9, 31, 2, 2, 704, 162, 3, + 2, 2, 2, 705, 706, 9, 32, 2, 2, 706, 164, 3, 2, 2, 2, 707, 708, 9, 33, + 2, 2, 708, 166, 3, 2, 2, 2, 27, 2, 434, 438, 442, 460, 533, 538, 543, 549, + 555, 557, 563, 569, 571, 577, 583, 590, 599, 609, 614, 623, 630, 635, 640, + 650, 3, 2, 3, 2, } var lexerChannelNames = []string{ @@ -342,7 +343,7 @@ var lexerModeNames = []string{ var lexerLiteralNames = []string{ "", "'rule'", "'filter'", "'drop'", "'macro'", "'list'", "'name'", "'items'", - "'condition'", "'desc'", "'action'", "'output'", "'priority'", "'tags'", + "'condition'", "'desc'", "'actions'", "'output'", "'priority'", "'tags'", "'prefilter'", "'enabled'", "'warn_evttypes'", "'skip-if-unknown-filter'", "'append'", "'required_engine_version'", "'and'", "'or'", "'not'", "'<'", "'<='", "'>'", "'>='", "'='", "'!='", "'in'", "'contains'", "'icontains'", @@ -352,7 +353,7 @@ var lexerLiteralNames = []string{ var lexerSymbolicNames = []string{ "", "RULE", "FILTER", "DROP", "MACRO", "LIST", "NAME", "ITEMS", "COND", - "DESC", "ACTION", "OUTPUT", "PRIORITY", "TAGS", "PREFILTER", "ENABLED", + "DESC", "ACTIONS", "OUTPUT", "PRIORITY", "TAGS", "PREFILTER", "ENABLED", "WARNEVTTYPE", "SKIPUNKNOWN", "FAPPEND", "REQ", "AND", "OR", "NOT", "LT", "LE", "GT", "GE", "EQ", "NEQ", "IN", "CONTAINS", "ICONTAINS", "STARTSWITH", "ENDSWITH", "PMATCH", "EXISTS", "LBRACK", "RBRACK", "LPAREN", "RPAREN", @@ -362,7 +363,7 @@ var lexerSymbolicNames = []string{ var lexerRuleNames = []string{ "RULE", "FILTER", "DROP", "MACRO", "LIST", "NAME", "ITEMS", "COND", "DESC", - "ACTION", "OUTPUT", "PRIORITY", "TAGS", "PREFILTER", "ENABLED", "WARNEVTTYPE", + "ACTIONS", "OUTPUT", "PRIORITY", "TAGS", "PREFILTER", "ENABLED", "WARNEVTTYPE", "SKIPUNKNOWN", "FAPPEND", "REQ", "AND", "OR", "NOT", "LT", "LE", "GT", "GE", "EQ", "NEQ", "IN", "CONTAINS", "ICONTAINS", "STARTSWITH", "ENDSWITH", "PMATCH", "EXISTS", "LBRACK", "RBRACK", "LPAREN", "RPAREN", "LISTSEP", @@ -418,7 +419,7 @@ const ( SfplLexerITEMS = 7 SfplLexerCOND = 8 SfplLexerDESC = 9 - SfplLexerACTION = 10 + SfplLexerACTIONS = 10 SfplLexerOUTPUT = 11 SfplLexerPRIORITY = 12 SfplLexerTAGS = 13 diff --git a/core/policyengine/lang/parser/sfpl_parser.go b/core/policyengine/lang/parser/sfpl_parser.go index 21212e31..92081ca3 100644 --- a/core/policyengine/lang/parser/sfpl_parser.go +++ b/core/policyengine/lang/parser/sfpl_parser.go @@ -166,7 +166,7 @@ var parserATN = []uint16{ } var literalNames = []string{ "", "'rule'", "'filter'", "'drop'", "'macro'", "'list'", "'name'", "'items'", - "'condition'", "'desc'", "'action'", "'output'", "'priority'", "'tags'", + "'condition'", "'desc'", "'actions'", "'output'", "'priority'", "'tags'", "'prefilter'", "'enabled'", "'warn_evttypes'", "'skip-if-unknown-filter'", "'append'", "'required_engine_version'", "'and'", "'or'", "'not'", "'<'", "'<='", "'>'", "'>='", "'='", "'!='", "'in'", "'contains'", "'icontains'", @@ -175,7 +175,7 @@ var literalNames = []string{ } var symbolicNames = []string{ "", "RULE", "FILTER", "DROP", "MACRO", "LIST", "NAME", "ITEMS", "COND", - "DESC", "ACTION", "OUTPUT", "PRIORITY", "TAGS", "PREFILTER", "ENABLED", + "DESC", "ACTIONS", "OUTPUT", "PRIORITY", "TAGS", "PREFILTER", "ENABLED", "WARNEVTTYPE", "SKIPUNKNOWN", "FAPPEND", "REQ", "AND", "OR", "NOT", "LT", "LE", "GT", "GE", "EQ", "NEQ", "IN", "CONTAINS", "ICONTAINS", "STARTSWITH", "ENDSWITH", "PMATCH", "EXISTS", "LBRACK", "RBRACK", "LPAREN", "RPAREN", @@ -232,7 +232,7 @@ const ( SfplParserITEMS = 7 SfplParserCOND = 8 SfplParserDESC = 9 - SfplParserACTION = 10 + SfplParserACTIONS = 10 SfplParserOUTPUT = 11 SfplParserPRIORITY = 12 SfplParserTAGS = 13 @@ -936,12 +936,12 @@ func (s *PruleContext) OUTPUT(i int) antlr.TerminalNode { return s.GetToken(SfplParserOUTPUT, i) } -func (s *PruleContext) AllACTION() []antlr.TerminalNode { - return s.GetTokens(SfplParserACTION) +func (s *PruleContext) AllACTIONS() []antlr.TerminalNode { + return s.GetTokens(SfplParserACTIONS) } -func (s *PruleContext) ACTION(i int) antlr.TerminalNode { - return s.GetToken(SfplParserACTION, i) +func (s *PruleContext) ACTIONS(i int) antlr.TerminalNode { + return s.GetToken(SfplParserACTIONS, i) } func (s *PruleContext) AllActions() []IActionsContext { @@ -1249,7 +1249,7 @@ func (p *SfplParser) Prule() (localctx IPruleContext) { p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) - for ((_la)&-(0x1f+1)) == 0 && ((1<=0.4.0), `edge`, or `dev`. + +```bash +docker run --rm \ + -v $(pwd)/plugins:/usr/local/sysflow/plugins \ + -v $(pwd)/plugins:/usr/local/sysflow/core \ + -v $(pwd)/resources:/usr/local/sysflow/resources \ + --entrypoint=/bin/bash \ + sysflowtelemetry/sf-processor:$TAG \ + make -C /usr/local/sysflow/plugins/actions/example +``` diff --git a/plugins/actions/example/go.mod b/plugins/actions/example/go.mod index 07cd3bc2..19149e84 100644 --- a/plugins/actions/example/go.mod +++ b/plugins/actions/example/go.mod @@ -18,8 +18,17 @@ // module github.com/sysflow-telemetry/sf-processor/plugins/actions/example -go 1.14 +go 1.17 -require github.com/sysflow-telemetry/sf-processor/core v0.0.0-20201209134442-13e2a6e66430 +require github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220218215337-cb82d403e9f6 + +require ( + github.com/actgardner/gogen-avro/v7 v7.3.1 // indirect + github.com/antlr/antlr4 v0.0.0-20200417160354-8c50731894e0 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/golang/snappy v0.0.3 // indirect + github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6 // indirect + github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 // indirect +) replace github.com/sysflow-telemetry/sf-processor/core => ../../../core diff --git a/plugins/actions/example/go.sum b/plugins/actions/example/go.sum index 94e41011..82048a08 100644 --- a/plugins/actions/example/go.sum +++ b/plugins/actions/example/go.sum @@ -1,173 +1,698 @@ +bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= +github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/IBM/go-sdk-core/v3 v3.3.1/go.mod h1:lk9eOzNbNltPf3CBpcg1Ewkhw4qC3u2QCCKDRsUA2M0= +github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/IBM/go-sdk-core/v5 v5.7.0/go.mod h1:+YbdhrjCHC84ls4MeBp+Hj4NZCni+tDAc0XQUqRO9Jc= +github.com/IBM/go-sdk-core/v5 v5.9.2/go.mod h1:YlOwV9LeuclmT/qi/LAK2AsobbAP42veV0j68/rlZsE= +github.com/IBM/scc-go-sdk/v3 v3.1.5/go.mod h1:cBxkth9AIOcKQx4Gy9bWgyGYa7vYwHAalUBvY+O8xAE= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= +github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= +github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= +github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= +github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= +github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= +github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/RackSec/srslog v0.0.0-20180709174129-a4725f04ec91/go.mod h1:cDLGBht23g0XQdLjzn6xOGXDkLK182YfINAaZEQLCHQ= -github.com/actgardner/gogen-avro/v7 v7.1.1/go.mod h1:DALbHv5zAeoz7KJ/fPAvl+d8Ixcy6x8Fjo+PO0YM8mU= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/actgardner/gogen-avro/v7 v7.3.1 h1:6JJU3o7168lcyIB6uXYyYdflCsJT3aMFKZPSpSc4toI= github.com/actgardner/gogen-avro/v7 v7.3.1/go.mod h1:1d45RpDvI29sU7l9wUxlRTEglZSdQSbd6bDbWJaEMgo= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4 v0.0.0-20200417160354-8c50731894e0 h1:j7MyDjg6pb7A2ziow17FDZ2Oj5vGnJsLyDmjpN4Jkcg= github.com/antlr/antlr4 v0.0.0-20200417160354-8c50731894e0/go.mod h1:T7PbCXFs94rrTttyxjbyT5+/1V8T2TYDejxUfHJjw1Y= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= +github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= +github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= +github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= +github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= +github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= +github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= +github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= +github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= +github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= +github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= +github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= +github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= +github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= +github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= +github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= +github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= +github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= +github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= +github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= +github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= +github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= +github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= +github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= +github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= +github.com/containerd/stargz-snapshotter/estargz v0.11.0/go.mod h1:/KsZXsJRllMbTKFfG0miFQWViQKdI9+9aSXs+HN0+ac= github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= +github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containers/storage v1.19.1/go.mod h1:KbXjSwKnx17ejOsjFcCXSf78mCgZkQSLPBNTMRc3XrQ= +github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= +github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= +github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= +github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= +github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= +github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= +github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= +github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= +github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/containers/storage v1.38.2/go.mod h1:INP0RPLHWBxx+pTsO5uiHlDUGHDFvWZPWprAbAlQWPQ= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= +github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= +github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= +github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elastic/go-elasticsearch/v8 v8.0.0-20210427093042-01613f93a7ae/go.mod h1:xe9a/L2aeOgFKKgrO3ibQTnMdpAeL0GC+5/HpGScSa4= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= +github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git/v5 v5.0.0/go.mod h1:oYD8y9kWsGINPFJoLdaScGCN6dlKg23blmClfZwtUVA= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/strfmt v0.20.2/go.mod h1:43urheQI9dNtE5lTZQfuFJvjYJKPrxicATpEfZwHUNk= +github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= +github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/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-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= +github.com/google/go-intervals v0.0.2/go.mod h1:MkaR3LNRfeKLPmqgJYs4E66z5InYjmCjbbr4TQlcT6Y= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ibm-cloud-security/security-advisor-sdk-go v1.1.1/go.mod h1:0dvbVuB3/QPdwz0v1WZbwPy8w7ZdkQFK35i438RqCf8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= +github.com/johnstarich/go/gopages v0.1.8/go.mod h1:OaSRjfHdFfN+LS7u6xqgNO7C2Uxjlvpm17DcKcvLBhY= +github.com/johnstarich/go/pipe v0.2.0/go.mod h1:3X9IdVJJnI7pkpzEH6np98wqHl55zFmbilKG+9+koMo= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +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/klauspost/compress v1.10.5/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/pgzip v1.2.3/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/linkedin/goavro v2.1.0+incompatible/go.mod h1:bBCwI2eGYpUI/4820s67MElg9tdeLbINjLjiM2xZFYM= -github.com/linkedin/goavro/v2 v2.9.7/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA= github.com/linkedin/goavro/v2 v2.10.0/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA= +github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mistifyio/go-zfs v2.1.1+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= +github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= +github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= +github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= +github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= +github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= +github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.5.1/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= +github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= +github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6 h1:lNCW6THrCKBiJBpz8kbVGjC7MgdCGKwuvBgc7LoD6sw= github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= +github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pquerna/ffjson v0.0.0-20181028064349-e517b90714f7/go.mod h1:YARuvh7BUWHNhzDq2OM5tzR2RiCcN2D7sapiKyCel/M= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satta/gommunityid v0.0.0-20210315182841-1cdcb73ce408/go.mod h1:dz6UCF9ERHtGjdv5LwOTgZxng/7IZm2spR/mXtTpLjc= +github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= +github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= +github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -178,113 +703,475 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20210929184451-1b092dc0cfc7 h1:tXxUI8Jz8gTNflnOqKo/FPWn6G1FUCT1NGo9d3p+GsQ= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20210929184451-1b092dc0cfc7/go.mod h1:OSPDOqeD66l/sjuOG8klXtLQ8sUcx6WHvsXmwrtJoyE= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 h1:5PfMlv3Su4dSvHnXJgyZ1t9U3up9ZEnhujBW7AryUCM= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= +github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/vbatts/tar-split v0.11.1/go.mod h1:LEuURwDEiWjRjwu46yU3KVGuUdVv/dcnpcEPSzR8z6g= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= +github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +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= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= +go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw= +go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= +go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210315170653-34ac3e1c2000/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220114011407-0dd24b26b47d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191127021746-63cb32ae39b2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201021000207-d49c4edd7d96/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v9 v9.31.0/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/linkedin/goavro.v1 v1.0.5/go.mod h1:Aw5GdAbizjOEl0kAMHV9iHmA8reZzW/OKuJAl4Hb9F0= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= +k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= +k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= +k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= +k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= +k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= +k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= +k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= +k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= +k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= +k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= +k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= +k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= +k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= +k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= +k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= +k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= +k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= +k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/plugins/actions/example/now.go b/plugins/actions/example/now.go index 1c7d03a3..0be7f504 100644 --- a/plugins/actions/example/now.go +++ b/plugins/actions/example/now.go @@ -42,3 +42,5 @@ func addMyTag(r *engine.Record) error { var Action MyAction +// This function is not run when module is used as a plugin. +func main() {} diff --git a/plugins/actions/example/pipeline.actions.json b/plugins/actions/example/pipeline.actions.json new file mode 100644 index 00000000..5ad176ad --- /dev/null +++ b/plugins/actions/example/pipeline.actions.json @@ -0,0 +1,23 @@ +{ + "pipeline":[ + { + "processor": "sysflowreader", + "handler": "flattener", + "in": "sysflow sysflowchan", + "out": "flat flattenerchan" + }, + { + "processor": "policyengine", + "in": "flat flattenerchan", + "out": "evt eventchan", + "policies": "../plugins/actions/example/policy.yaml", + "mode": "alert" + }, + { + "processor": "exporter", + "in": "evt eventchan", + "export": "terminal", + "format": "json" + } + ] +} diff --git a/plugins/actions/example/policy.yaml b/plugins/actions/example/policy.yaml new file mode 100644 index 00000000..2ffba7bf --- /dev/null +++ b/plugins/actions/example/policy.yaml @@ -0,0 +1,4 @@ +- rule: Action example + desc: user-defined action example + condition: sf.opflags = EXEC + actions: [now] diff --git a/plugins/handlers/printer/go.mod b/plugins/handlers/printer/go.mod index abe5d4ef..f3c87168 100644 --- a/plugins/handlers/printer/go.mod +++ b/plugins/handlers/printer/go.mod @@ -19,12 +19,15 @@ // module github.com/sysflow-telemetry/sf-processor/plugins/handlers/printer -go 1.14 +go 1.17 + +require github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 require ( - github.com/actgardner/gogen-avro v6.5.0+incompatible // indirect - github.com/pquerna/ffjson v0.0.0-20181028064349-e517b90714f7 // indirect - github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f + github.com/actgardner/gogen-avro/v7 v7.3.1 // indirect + github.com/golang/snappy v0.0.3 // indirect + github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6 // indirect + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect ) replace github.com/sysflow-telemetry/sf-processor/core => ../../../core diff --git a/plugins/handlers/printer/go.sum b/plugins/handlers/printer/go.sum index e2785103..92d0806e 100644 --- a/plugins/handlers/printer/go.sum +++ b/plugins/handlers/printer/go.sum @@ -65,10 +65,7 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/actgardner/gogen-avro v6.5.0+incompatible h1:P73NiZR/S0lBWQDkK6mbvdgBXRc6e0/AaaSTqu/AvLI= -github.com/actgardner/gogen-avro v6.5.0+incompatible/go.mod h1:N2PzqZtS+5w9xxGp2daeykhWdTL0lBiRhbbvkVj4Yd8= -github.com/actgardner/gogen-avro/v7 v7.1.1 h1:fAKfqQNIDIXq4Pwop3Fqu+0Tym5PuAX/cMVbdEIuVdM= -github.com/actgardner/gogen-avro/v7 v7.1.1/go.mod h1:DALbHv5zAeoz7KJ/fPAvl+d8Ixcy6x8Fjo+PO0YM8mU= +github.com/actgardner/gogen-avro/v7 v7.3.1 h1:6JJU3o7168lcyIB6uXYyYdflCsJT3aMFKZPSpSc4toI= github.com/actgardner/gogen-avro/v7 v7.3.1/go.mod h1:1d45RpDvI29sU7l9wUxlRTEglZSdQSbd6bDbWJaEMgo= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -98,6 +95,7 @@ github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= @@ -201,7 +199,6 @@ github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRD github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/containers/storage v1.19.1/go.mod h1:KbXjSwKnx17ejOsjFcCXSf78mCgZkQSLPBNTMRc3XrQ= github.com/containers/storage v1.38.2/go.mod h1:INP0RPLHWBxx+pTsO5uiHlDUGHDFvWZPWprAbAlQWPQ= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -339,6 +336,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -418,27 +417,22 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= 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/klauspost/compress v1.10.5/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/pgzip v1.2.3/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/linkedin/goavro v2.1.0+incompatible/go.mod h1:bBCwI2eGYpUI/4820s67MElg9tdeLbINjLjiM2xZFYM= -github.com/linkedin/goavro/v2 v2.9.7/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA= github.com/linkedin/goavro/v2 v2.10.0/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA= github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -453,13 +447,11 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/mistifyio/go-zfs v2.1.1+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -523,7 +515,6 @@ github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/ github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.5.1/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= @@ -541,7 +532,6 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/pquerna/ffjson v0.0.0-20181028064349-e517b90714f7/go.mod h1:YARuvh7BUWHNhzDq2OM5tzR2RiCcN2D7sapiKyCel/M= github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -618,17 +608,15 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20210611191016-bbdbd17a2eaf h1:FD0V/q8vPyOLyFYD/jtZNrz/PVhZG121wrbAz8tmudc= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20210611191016-bbdbd17a2eaf/go.mod h1:3rICv2GmRq0ZCX9L0pYz8N0ItX/nbuALRotBWOOS4Gw= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f h1:quICy9nfEUaCRZpn0SDI3q6iRVfETcGq3LD/Bw1DGjc= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f/go.mod h1:6gzcis2lTDCL37xUZg+6u1JU0gAodMIvqp5wDl4ddms= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 h1:5PfMlv3Su4dSvHnXJgyZ1t9U3up9ZEnhujBW7AryUCM= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -640,7 +628,6 @@ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijb github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vbatts/tar-split v0.11.1/go.mod h1:LEuURwDEiWjRjwu46yU3KVGuUdVv/dcnpcEPSzR8z6g= github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= @@ -806,7 +793,6 @@ golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191127021746-63cb32ae39b2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -987,7 +973,6 @@ gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1013,9 +998,9 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c h1:grhR+C34yXImVGp7EzNk+DTIk+323eIUWOmEevy6bDo= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= diff --git a/plugins/handlers/printer/pipeline.printer.json b/plugins/handlers/printer/pipeline.printer.json new file mode 100644 index 00000000..5887516c --- /dev/null +++ b/plugins/handlers/printer/pipeline.printer.json @@ -0,0 +1,10 @@ +{ + "pipeline":[ + { + "processor": "sysflowreader", + "handler": "printer", + "handlerlibpath": "../resources/handlers", + "in": "sysflow sysflowchan" + } + ] +} diff --git a/plugins/handlers/printer/printer.go b/plugins/handlers/printer/printer.go index d47c90c5..68fc6ba4 100644 --- a/plugins/handlers/printer/printer.go +++ b/plugins/handlers/printer/printer.go @@ -70,58 +70,58 @@ func (s *Printer) Cleanup() { } // HandleHeader processes Header entities. -func (s *Printer) HandleHeader(sf *sfgo.SysFlow, hdr *sfgo.SFHeader) error { +func (s *Printer) HandleHeader(sf *plugins.CtxSysFlow, hdr *sfgo.SFHeader) error { return nil } // HandleContainer processes Container entities. -func (s *Printer) HandleContainer(sf *sfgo.SysFlow, hdr *sfgo.SFHeader, cont *sfgo.Container) error { +func (s *Printer) HandleContainer(sf *plugins.CtxSysFlow, cont *sfgo.Container) error { return nil } // HandleProcess processes Process entities. -func (s *Printer) HandleProcess(sf *sfgo.SysFlow, hdr *sfgo.SFHeader, cont *sfgo.Container, proc *sfgo.Process) error { +func (s *Printer) HandleProcess(sf *plugins.CtxSysFlow, proc *sfgo.Process) error { return nil } // HandleFile processes File entities. -func (s *Printer) HandleFile(sf *sfgo.SysFlow, hdr *sfgo.SFHeader, cont *sfgo.Container, file *sfgo.File) error { +func (s *Printer) HandleFile(sf *plugins.CtxSysFlow, file *sfgo.File) error { return nil } // HandleNetFlow processes Network Flows. -func (s *Printer) HandleNetFlow(sf *sfgo.SysFlow, hdr *sfgo.SFHeader, cont *sfgo.Container, proc *sfgo.Process, nf *sfgo.NetworkFlow) error { - logger.Info.Printf("NetworkFlow %s, %d", proc.Exe, nf.Dport) +func (s *Printer) HandleNetFlow(sf *plugins.CtxSysFlow, nf *sfgo.NetworkFlow) error { + logger.Info.Printf("NetworkFlow %s, %d", sf.Process.Exe, nf.Dport) return nil } // HandleFileFlow processes File Flows. -func (s *Printer) HandleFileFlow(sf *sfgo.SysFlow, hdr *sfgo.SFHeader, cont *sfgo.Container, proc *sfgo.Process, file *sfgo.File, ff *sfgo.FileFlow) error { - logger.Info.Printf("FileFlow %s, %d", proc.Exe, ff.Fd) +func (s *Printer) HandleFileFlow(sf *plugins.CtxSysFlow, ff *sfgo.FileFlow) error { + logger.Info.Printf("FileFlow %s, %d", sf.Process.Exe, ff.Fd) return nil } // HandleFileEvt processes File Events. -func (s *Printer) HandleFileEvt(sf *sfgo.SysFlow, hdr *sfgo.SFHeader, cont *sfgo.Container, proc *sfgo.Process, file1 *sfgo.File, file2 *sfgo.File, fe *sfgo.FileEvent) error { - logger.Info.Printf("FileEvt %s, %d", proc.Exe, fe.Tid) +func (s *Printer) HandleFileEvt(sf *plugins.CtxSysFlow, fe *sfgo.FileEvent) error { + logger.Info.Printf("FileEvt %s, %d", sf.Process.Exe, fe.Tid) return nil } // HandleFileEvt processes Net Events. -func (s *Printer) HandleNetEvt(sf *sfgo.SysFlow, hdr *sfgo.SFHeader, cont *sfgo.Container, proc *sfgo.Process, ne *sfgo.NetworkEvent) error { - logger.Info.Printf("NetEvt %s, %d", proc.Exe, ne.Tid) +func (s *Printer) HandleNetEvt(sf *plugins.CtxSysFlow, ne *sfgo.NetworkEvent) error { + logger.Info.Printf("NetEvt %s, %d", sf.Process.Exe, ne.Tid) return nil } // HandleProcEvt processes Process Events. -func (s *Printer) HandleProcEvt(sf *sfgo.SysFlow, hdr *sfgo.SFHeader, cont *sfgo.Container, proc *sfgo.Process, pe *sfgo.ProcessEvent) error { - logger.Info.Printf("ProcEvt %s, %d", proc.Exe, pe.Tid) +func (s *Printer) HandleProcEvt(sf *plugins.CtxSysFlow, pe *sfgo.ProcessEvent) error { + logger.Info.Printf("ProcEvt %s, %d", sf.Process.Exe, pe.Tid) return nil } // HandleProcEvt processes Process Flows. -func (s *Printer) HandleProcFlow(sf *sfgo.SysFlow, hdr *sfgo.SFHeader, cont *sfgo.Container, proc *sfgo.Process, pf *sfgo.ProcessFlow) error { - logger.Info.Printf("ProcFlow %s, %v", proc.Exe, pf.ProcOID) +func (s *Printer) HandleProcFlow(sf *plugins.CtxSysFlow, pf *sfgo.ProcessFlow) error { + logger.Info.Printf("ProcFlow %s, %v", sf.Process.Exe, pf.ProcOID) return nil } diff --git a/plugins/processors/example/go.mod b/plugins/processors/example/go.mod index 279c8326..09633eb8 100644 --- a/plugins/processors/example/go.mod +++ b/plugins/processors/example/go.mod @@ -19,11 +19,17 @@ // module github.com/sysflow-telemetry/sf-processor/plugins/processors/example -go 1.14 +go 1.17 require ( - github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f - github.com/sysflow-telemetry/sf-processor/core v0.0.0-20201209134442-13e2a6e66430 + github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 + github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220218215337-cb82d403e9f6 +) + +require ( + github.com/actgardner/gogen-avro/v7 v7.3.1 // indirect + github.com/golang/snappy v0.0.3 // indirect + github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6 // indirect ) replace github.com/sysflow-telemetry/sf-processor/core => ../../../core diff --git a/plugins/processors/example/go.sum b/plugins/processors/example/go.sum index 3e1e9b09..c5e8ed99 100644 --- a/plugins/processors/example/go.sum +++ b/plugins/processors/example/go.sum @@ -38,7 +38,9 @@ github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBp github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/IBM/go-sdk-core/v3 v3.3.1/go.mod h1:lk9eOzNbNltPf3CBpcg1Ewkhw4qC3u2QCCKDRsUA2M0= +github.com/IBM/go-sdk-core/v5 v5.7.0/go.mod h1:+YbdhrjCHC84ls4MeBp+Hj4NZCni+tDAc0XQUqRO9Jc= +github.com/IBM/go-sdk-core/v5 v5.9.2/go.mod h1:YlOwV9LeuclmT/qi/LAK2AsobbAP42veV0j68/rlZsE= +github.com/IBM/scc-go-sdk/v3 v3.1.5/go.mod h1:cBxkth9AIOcKQx4Gy9bWgyGYa7vYwHAalUBvY+O8xAE= github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= @@ -69,16 +71,21 @@ github.com/RackSec/srslog v0.0.0-20180709174129-a4725f04ec91/go.mod h1:cDLGBht23 github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/actgardner/gogen-avro/v7 v7.3.1 h1:6JJU3o7168lcyIB6uXYyYdflCsJT3aMFKZPSpSc4toI= github.com/actgardner/gogen-avro/v7 v7.3.1/go.mod h1:1d45RpDvI29sU7l9wUxlRTEglZSdQSbd6bDbWJaEMgo= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4 v0.0.0-20200417160354-8c50731894e0/go.mod h1:T7PbCXFs94rrTttyxjbyT5+/1V8T2TYDejxUfHJjw1Y= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -98,6 +105,7 @@ github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= @@ -257,6 +265,7 @@ github.com/elastic/go-elasticsearch/v8 v8.0.0-20210427093042-01613f93a7ae/go.mod github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -265,6 +274,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -273,6 +283,11 @@ github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXt github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git/v5 v5.0.0/go.mod h1:oYD8y9kWsGINPFJoLdaScGCN6dlKg23blmClfZwtUVA= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -283,7 +298,7 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -292,13 +307,41 @@ github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwoh github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= +github.com/go-openapi/strfmt v0.20.2/go.mod h1:43urheQI9dNtE5lTZQfuFJvjYJKPrxicATpEfZwHUNk= +github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= @@ -393,15 +436,18 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ibm-cloud-security/security-advisor-sdk-go v1.1.1/go.mod h1:0dvbVuB3/QPdwz0v1WZbwPy8w7ZdkQFK35i438RqCf8= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= @@ -409,9 +455,15 @@ github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= +github.com/johnstarich/go/gopages v0.1.8/go.mod h1:OaSRjfHdFfN+LS7u6xqgNO7C2Uxjlvpm17DcKcvLBhY= +github.com/johnstarich/go/pipe v0.2.0/go.mod h1:3X9IdVJJnI7pkpzEH6np98wqHl55zFmbilKG+9+koMo= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= @@ -424,12 +476,17 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= 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/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -442,9 +499,9 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/linkedin/goavro v2.1.0+incompatible/go.mod h1:bBCwI2eGYpUI/4820s67MElg9tdeLbINjLjiM2xZFYM= github.com/linkedin/goavro/v2 v2.10.0/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA= github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= @@ -455,6 +512,8 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -469,6 +528,7 @@ github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WT github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= @@ -481,6 +541,7 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= @@ -488,7 +549,6 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -502,14 +562,16 @@ github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= +github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -539,6 +601,7 @@ github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6 h1:lNCW6THr github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -579,6 +642,8 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= @@ -587,10 +652,12 @@ github.com/satta/gommunityid v0.0.0-20210315182841-1cdcb73ce408/go.mod h1:dz6UCF github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -634,8 +701,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f h1:quICy9nfEUaCRZpn0SDI3q6iRVfETcGq3LD/Bw1DGjc= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220204025248-25d44ab7fe1f/go.mod h1:6gzcis2lTDCL37xUZg+6u1JU0gAodMIvqp5wDl4ddms= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 h1:5PfMlv3Su4dSvHnXJgyZ1t9U3up9ZEnhujBW7AryUCM= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -657,11 +724,16 @@ github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17 github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +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= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= @@ -673,7 +745,8 @@ go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw= +go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -687,12 +760,15 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -758,16 +834,19 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210315170653-34ac3e1c2000/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220114011407-0dd24b26b47d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -777,6 +856,7 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -790,13 +870,17 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -830,6 +914,7 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -855,6 +940,7 @@ golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -862,7 +948,9 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -879,9 +967,13 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -911,6 +1003,7 @@ golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201021000207-d49c4edd7d96/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -998,8 +1091,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -1015,6 +1108,7 @@ gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76 gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1025,6 +1119,7 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From 4911c23d46bcaab6acd9a7dfe3ebdcf09c24ed10 Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Sun, 20 Feb 2022 15:15:52 -0500 Subject: [PATCH 03/15] feat(ci): add plugin builder image step to CI Signed-off-by: Frederico Araujo --- .github/workflows/ci.yaml | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 46517a72..1f468bdc 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -22,7 +22,9 @@ on: workflow_dispatch: env: - DOCKER_REGISTRY_REPOSITORY: sysflowtelemetry/sf-processor + DOCKER_REGISTRY_REPOSITORY: sysflowtelemetry/sf-processor + PLUGIN_BUILDER_DOCKER_REGISTRY_REPOSITORY: sysflowtelemetry/plugin-builder + GH_ORGANIZATION: sysflow-telemetry jobs: lint-core: @@ -60,7 +62,7 @@ jobs: - name: Read manifest shell: bash run: | - echo "UBI_VERSION=$(awk -F'=' '/UBI_VERSION/{print $2}' makefile.manifest.inc)" >> $GITHUB_ENV + echo "UBI_VERSION=$(awk -F'=' '/UBI_VERSION/{print $2}' makefile.manifest.inc)" >> $GITHUB_ENV - name: Docker meta id: meta uses: docker/metadata-action@v3 @@ -100,6 +102,21 @@ jobs: echo "##[set-output name=ubi_version;]$(awk -F'=' '/UBI_VERSION/{print $2}' makefile.manifest.inc)" echo "##[set-output name=branch;]$(echo ${GITHUB_REF##refs/*/})" echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + - name: Build and push plugin builder image + id: docker_plugin_builder + uses: docker/build-push-action@v2 + with: + push: ${{ github.event_name != 'pull_request' }} + tags: | + ${{ env.PLUGIN_BUILDER_DOCKER_REGISTRY_REPOSITORY }}:${{ steps.args.outputs.branch }} + ghcr.io/${{ env.GH_ORGANIZATION }}/plugin-builder:${{ steps.args.outputs.branch }} + target: base + labels: "${{ steps.meta.outputs.labels }}" + build-args: | + BUILD_NUMBER=${{ steps.args.outputs.sha_short }} + VERSION=${{ steps.args.outputs.branch }} + RELEASE=${{ steps.args.outputs.sha_short }} + UBI_VER=${{ steps.args.outputs.ubi_version }} - name: Build and push id: docker_build uses: docker/build-push-action@v2 From 4094158d0b788ca943c8da6b12904eeeefcb794d Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Sun, 20 Feb 2022 15:25:52 -0500 Subject: [PATCH 04/15] feat(ci): adding cache-from base image in docker build step Signed-off-by: Frederico Araujo --- .github/workflows/ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1f468bdc..b463e780 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -124,6 +124,7 @@ jobs: push: ${{ github.event_name != 'pull_request' }} tags: "${{ steps.meta.outputs.tags }}" labels: "${{ steps.meta.outputs.labels }}" + cache-from: type=registry,ref=ghcr.io/${{ env.GH_ORGANIZATION }}/plugin-builder:${{ steps.args.outputs.branch }} build-args: | BUILD_NUMBER=${{ steps.args.outputs.sha_short }} VERSION=${{ steps.args.outputs.branch }} From 960a02ef23ba4e114f57fd7ef307a17ff85151b9 Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Sun, 20 Feb 2022 20:57:11 -0500 Subject: [PATCH 05/15] feat(plugins): refactored make to build plugin-builder image; updated action plugins to build using plugin-builder Signed-off-by: Frederico Araujo --- Makefile | 10 +++++----- driver/go.mod | 2 +- plugins/actions/example/Makefile | 2 +- plugins/actions/example/READMEmd | 20 +++++++++++++++----- plugins/actions/example/go.mod | 2 +- plugins/actions/example/go.sum | 2 ++ 6 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 2b26f2dd..9ccaedea 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ include ./makefile.manifest.inc # Basic go commands PATH=$(shell printenv PATH):/usr/local/go/bin GOCMD=go -GOBUILD=$(GOCMD) build -tags exclude_graphdriver_btrfs +GOBUILD=$(GOCMD) build -trimpath -tags exclude_graphdriver_btrfs GOCLEAN=$(GOCMD) clean GOTEST=$(GOCMD) test -tags exclude_graphdriver_btrfs GOGET=$(GOCMD) get -tags exclude_graphdriver_btrfs @@ -66,11 +66,11 @@ install: build .PHONY: docker-build docker-build: - ( DOCKER_BUILDKIT=1 docker build -t sysflowtelemetry/sf-processor:${SYSFLOW_VERSION} --build-arg UBI_VER=$(UBI_VERSION) --target=runtime -f Dockerfile . ) + ( DOCKER_BUILDKIT=1 docker build --cache-from=sysflowtelemetry/plugin-builder:${SYSFLOW_VERSION} -t sysflowtelemetry/sf-processor:${SYSFLOW_VERSION} --build-arg UBI_VER=$(UBI_VERSION) --target=runtime -f Dockerfile . ) -.PHONY: docker-build-base -docker-build-base: - ( DOCKER_BUILDKIT=1 docker build -t sysflowtelemetry/sf-processor:base --build-arg UBI_VER=$(UBI_VERSION) --target=base -f Dockerfile . ) +.PHONY: docker-plugin-builder +docker-plugin-builder: + ( DOCKER_BUILDKIT=1 docker build -t sysflowtelemetry/plugin-builder:${SYSFLOW_VERSION} --build-arg UBI_VER=$(UBI_VERSION) --target=base -f Dockerfile . ) .PHONY: pull pull: diff --git a/driver/go.mod b/driver/go.mod index 5f4dfdfd..1f7f59db 100644 --- a/driver/go.mod +++ b/driver/go.mod @@ -26,7 +26,7 @@ require ( github.com/linkedin/goavro v2.1.0+incompatible github.com/spf13/viper v1.6.3 github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 - github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220218215337-cb82d403e9f6 + github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220220202552-4094158d0b78 ) require ( diff --git a/plugins/actions/example/Makefile b/plugins/actions/example/Makefile index af54b5af..f12f36f8 100644 --- a/plugins/actions/example/Makefile +++ b/plugins/actions/example/Makefile @@ -1,5 +1,5 @@ GOCMD=go -GOBUILD=$(GOCMD) build -buildmode=plugin -tags exclude_graphdriver_btrfs +GOBUILD=$(GOCMD) build -buildmode=plugin -trimpath -tags exclude_graphdriver_btrfs OUTPUT=../../../resources/actions INSTALL=/usr/local/sysflow/resources/actions diff --git a/plugins/actions/example/READMEmd b/plugins/actions/example/READMEmd index 21701e41..6a57c55e 100644 --- a/plugins/actions/example/READMEmd +++ b/plugins/actions/example/READMEmd @@ -39,14 +39,24 @@ cd driver && ./sfprocessor -log=error -config=../plugins/actions/example/pipelin ### Building the plugin for deployment -To build the plugin for deployment, Go requires the code to be compile with the exact packages that the SysFlow processor was compiled with. The easiest way to achieve this is to re-use the pre-built SysFlow Docker images in your build. Below is an example of how this can be achieved. Set $TAG to a SysFlow release (>=0.4.0), `edge`, or `dev`. +To build the plugin for deployment, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. + +Below is an example of how this can be achieved. Set $TAG to a SysFlow release (>=0.4.0), `edge`, or `dev`. + +```bash +docker run --rm \ + -v $(pwd)/plugins:/go/src/github.com/sysflow-telemetry/sf-processor/plugins \ + -v $(pwd)/resources:/go/src/github.com/sysflow-telemetry/sf-processor/resources \ + sysflowtelemetry/plugin-builder:$TAG \ + make -C /go/src/github.com/sysflow-telemetry/sf-processor/plugins/actions/example +``` ```bash -docker run --rm \ +docker run --rm \ -v $(pwd)/plugins:/usr/local/sysflow/plugins \ - -v $(pwd)/plugins:/usr/local/sysflow/core \ -v $(pwd)/resources:/usr/local/sysflow/resources \ - --entrypoint=/bin/bash \ + -w /usr/local/sysflow/bin \ + --entrypoint=/usr/local/sysflow/bin/sfprocessor \ sysflowtelemetry/sf-processor:$TAG \ - make -C /usr/local/sysflow/plugins/actions/example + -log=error -config=../plugins/actions/example/pipeline.actions.json ../resources/traces/tcp.sf ``` diff --git a/plugins/actions/example/go.mod b/plugins/actions/example/go.mod index 19149e84..70c2cd45 100644 --- a/plugins/actions/example/go.mod +++ b/plugins/actions/example/go.mod @@ -20,7 +20,7 @@ module github.com/sysflow-telemetry/sf-processor/plugins/actions/example go 1.17 -require github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220218215337-cb82d403e9f6 +require github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220220202552-4094158d0b78 require ( github.com/actgardner/gogen-avro/v7 v7.3.1 // indirect diff --git a/plugins/actions/example/go.sum b/plugins/actions/example/go.sum index 82048a08..0e3d8746 100644 --- a/plugins/actions/example/go.sum +++ b/plugins/actions/example/go.sum @@ -706,6 +706,8 @@ github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 h1:5PfMlv3Su4dSvHnXJgyZ1t9U3up9ZEnhujBW7AryUCM= github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= +github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220220202552-4094158d0b78 h1:j2ji94vQWyR0KhZPY219R28b6nJNOhXZO+M/50KiVZY= +github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220220202552-4094158d0b78/go.mod h1:Mk6c4gnk6gBtzd7EE3/469+5DE814/3i9S014re1Ex8= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= From 3c2e577544212b55c63fed1e710d02454f75ebff Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Sun, 20 Feb 2022 21:16:57 -0500 Subject: [PATCH 06/15] refactor(plugins): updated README of action plugins to include sample output Signed-off-by: Frederico Araujo --- plugins/actions/example/READMEmd | 38 +++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/plugins/actions/example/READMEmd b/plugins/actions/example/READMEmd index 6a57c55e..491dd0c6 100644 --- a/plugins/actions/example/READMEmd +++ b/plugins/actions/example/READMEmd @@ -2,7 +2,7 @@ User-defined actions can be plugged to SysFlow's Policy Engine rule declarations to perform additional processing on matched records. -### How do they work? +## How do actions work? Actions are implemented via the golang plugin mechanism. An action must implement the following interface defined in the `core/policyengine/engine` package. @@ -21,7 +21,7 @@ Actions have a name and an action function. Within a single policy engine instan The action function receives the current record as an argument and thus has access to all record attributes. The action result can be stored in the record context via the context modifier methods. -### How to run this example? +## How to run this example? The `now` action is a pluggable action that creates a tag containing the current time in nanosecond precision. @@ -34,23 +34,26 @@ make build && make -C plugins/actions/example Then, run: ```bash -cd driver && ./sfprocessor -log=error -config=../plugins/actions/example/pipeline.actions.json ../resources/traces/tcp.sf +cd driver && ./sfprocessor -log=quiet -config=../plugins/actions/example/pipeline.actions.json ../resources/traces/tcp.sf ``` -### Building the plugin for deployment +## Building the plugin for release To build the plugin for deployment, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. Below is an example of how this can be achieved. Set $TAG to a SysFlow release (>=0.4.0), `edge`, or `dev`. +First, build the plugin: + ```bash docker run --rm \ -v $(pwd)/plugins:/go/src/github.com/sysflow-telemetry/sf-processor/plugins \ - -v $(pwd)/resources:/go/src/github.com/sysflow-telemetry/sf-processor/resources \ sysflowtelemetry/plugin-builder:$TAG \ make -C /go/src/github.com/sysflow-telemetry/sf-processor/plugins/actions/example ``` +To test it, run the pre-built processor with the example configuration and trace. + ```bash docker run --rm \ -v $(pwd)/plugins:/usr/local/sysflow/plugins \ @@ -58,5 +61,28 @@ docker run --rm \ -w /usr/local/sysflow/bin \ --entrypoint=/usr/local/sysflow/bin/sfprocessor \ sysflowtelemetry/sf-processor:$TAG \ - -log=error -config=../plugins/actions/example/pipeline.actions.json ../resources/traces/tcp.sf + -log=quiet -config=../plugins/actions/example/pipeline.actions.json ../resources/traces/tcp.sf +``` + +In the output, observe that all records matching the policy speficied in `pipeline.actions.json` are tagged by action `now` with the tag `now_in_nanos`. For example: + +```json +{ + "version": 4, + "endts": 0, + "opflags": [ + "EXEC" + ], + ... + "policies": [ + { + "id": "Action example", + "desc": "user-defined action example", + "priority": 0 + } + ], + "tags": [ + "now_in_nanos:1645409122055957900" + ] +} ``` From 25c7181c29040f4875b2e00f5b0ea82cc8610154 Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Sun, 20 Feb 2022 21:18:11 -0500 Subject: [PATCH 07/15] chore(plugins): fix name of action plugin README file Signed-off-by: Frederico Araujo --- plugins/actions/example/{READMEmd => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename plugins/actions/example/{READMEmd => README.md} (100%) diff --git a/plugins/actions/example/READMEmd b/plugins/actions/example/README.md similarity index 100% rename from plugins/actions/example/READMEmd rename to plugins/actions/example/README.md From da3daff674118e3b79a751395f72330acda9f5ae Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Mon, 21 Feb 2022 13:56:19 -0500 Subject: [PATCH 08/15] feat(plugins): refactored and added how-tos for all plugins using the plugin builder Signed-off-by: Frederico Araujo --- core/go.mod | 2 +- core/go.sum | 4 +- driver/go.mod | 4 +- driver/go.sum | 4 +- plugins/actions/example/README.md | 9 +-- plugins/actions/example/go.mod | 4 +- plugins/actions/example/go.sum | 6 +- plugins/handlers/printer/Makefile | 2 +- plugins/handlers/printer/README.md | 90 +++++++++++++++++++++++++++ plugins/handlers/printer/go.mod | 2 +- plugins/handlers/printer/go.sum | 4 +- plugins/handlers/printer/printer.go | 2 +- plugins/processors/example/Makefile | 2 +- plugins/processors/example/README.md | 87 ++++++++++++++++++++++++++ plugins/processors/example/example.go | 5 +- plugins/processors/example/go.mod | 4 +- plugins/processors/example/go.sum | 4 +- scripts/build/update-sfapis.sh | 14 +++++ 18 files changed, 221 insertions(+), 28 deletions(-) create mode 100644 plugins/handlers/printer/README.md create mode 100644 plugins/processors/example/README.md create mode 100755 scripts/build/update-sfapis.sh diff --git a/core/go.mod b/core/go.mod index 72f44e7a..446bc5dd 100644 --- a/core/go.mod +++ b/core/go.mod @@ -37,7 +37,7 @@ require ( github.com/satta/gommunityid v0.0.0-20210315182841-1cdcb73ce408 github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 github.com/stretchr/testify v1.7.0 - github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 + github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e ) require ( diff --git a/core/go.sum b/core/go.sum index 99a68431..1696a2d6 100644 --- a/core/go.sum +++ b/core/go.sum @@ -735,8 +735,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 h1:5PfMlv3Su4dSvHnXJgyZ1t9U3up9ZEnhujBW7AryUCM= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e h1:VR8J80DbrpjOBdgc5qGZLuxqo1PJYJcdbLgyZ+9yQL0= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= diff --git a/driver/go.mod b/driver/go.mod index 1f7f59db..aa6286a9 100644 --- a/driver/go.mod +++ b/driver/go.mod @@ -25,8 +25,8 @@ require ( github.com/actgardner/gogen-avro/v7 v7.3.1 github.com/linkedin/goavro v2.1.0+incompatible github.com/spf13/viper v1.6.3 - github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 - github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220220202552-4094158d0b78 + github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e + github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220221021811-25c7181c2904 ) require ( diff --git a/driver/go.sum b/driver/go.sum index 6602050a..68d0ef68 100644 --- a/driver/go.sum +++ b/driver/go.sum @@ -750,8 +750,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 h1:5PfMlv3Su4dSvHnXJgyZ1t9U3up9ZEnhujBW7AryUCM= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e h1:VR8J80DbrpjOBdgc5qGZLuxqo1PJYJcdbLgyZ+9yQL0= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= diff --git a/plugins/actions/example/README.md b/plugins/actions/example/README.md index 491dd0c6..36c98e7e 100644 --- a/plugins/actions/example/README.md +++ b/plugins/actions/example/README.md @@ -4,7 +4,7 @@ User-defined actions can be plugged to SysFlow's Policy Engine rule declarations ## How do actions work? -Actions are implemented via the golang plugin mechanism. An action must implement the following interface defined in the `core/policyengine/engine` package. +Actions are implemented via the golang plugin mechanism. An action must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-processor/core/policyengine/engine` package. ```go // Prototype of an action function @@ -25,7 +25,7 @@ The action function receives the current record as an argument and thus has acce The `now` action is a pluggable action that creates a tag containing the current time in nanosecond precision. -First, in the root of sf-processor, build the processor and the action plugin: +First, in the root of sf-processor, build the processor and the action plugin. Note, this plugin's shared object is generated in `resources/actions/now.so`. ```bash make build && make -C plugins/actions/example @@ -39,7 +39,7 @@ cd driver && ./sfprocessor -log=quiet -config=../plugins/actions/example/pipelin ## Building the plugin for release -To build the plugin for deployment, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. +To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. Below is an example of how this can be achieved. Set $TAG to a SysFlow release (>=0.4.0), `edge`, or `dev`. @@ -48,6 +48,7 @@ First, build the plugin: ```bash docker run --rm \ -v $(pwd)/plugins:/go/src/github.com/sysflow-telemetry/sf-processor/plugins \ + -v $(pwd)/resources:/go/src/github.com/sysflow-telemetry/sf-processor/resources \ sysflowtelemetry/plugin-builder:$TAG \ make -C /go/src/github.com/sysflow-telemetry/sf-processor/plugins/actions/example ``` @@ -66,7 +67,7 @@ docker run --rm \ In the output, observe that all records matching the policy speficied in `pipeline.actions.json` are tagged by action `now` with the tag `now_in_nanos`. For example: -```json +```plain { "version": 4, "endts": 0, diff --git a/plugins/actions/example/go.mod b/plugins/actions/example/go.mod index 70c2cd45..52119695 100644 --- a/plugins/actions/example/go.mod +++ b/plugins/actions/example/go.mod @@ -20,7 +20,7 @@ module github.com/sysflow-telemetry/sf-processor/plugins/actions/example go 1.17 -require github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220220202552-4094158d0b78 +require github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220221021811-25c7181c2904 require ( github.com/actgardner/gogen-avro/v7 v7.3.1 // indirect @@ -28,7 +28,7 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/golang/snappy v0.0.3 // indirect github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6 // indirect - github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 // indirect + github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e // indirect ) replace github.com/sysflow-telemetry/sf-processor/core => ../../../core diff --git a/plugins/actions/example/go.sum b/plugins/actions/example/go.sum index 0e3d8746..407fcda0 100644 --- a/plugins/actions/example/go.sum +++ b/plugins/actions/example/go.sum @@ -704,10 +704,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 h1:5PfMlv3Su4dSvHnXJgyZ1t9U3up9ZEnhujBW7AryUCM= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= -github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220220202552-4094158d0b78 h1:j2ji94vQWyR0KhZPY219R28b6nJNOhXZO+M/50KiVZY= -github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220220202552-4094158d0b78/go.mod h1:Mk6c4gnk6gBtzd7EE3/469+5DE814/3i9S014re1Ex8= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e h1:VR8J80DbrpjOBdgc5qGZLuxqo1PJYJcdbLgyZ+9yQL0= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= diff --git a/plugins/handlers/printer/Makefile b/plugins/handlers/printer/Makefile index dbcf5d8e..7e9ed942 100644 --- a/plugins/handlers/printer/Makefile +++ b/plugins/handlers/printer/Makefile @@ -1,5 +1,5 @@ GOCMD=go -GOBUILD=$(GOCMD) build -buildmode=plugin -tags exclude_graphdriver_btrfs +GOBUILD=$(GOCMD) build -buildmode=plugin -trimpath -tags exclude_graphdriver_btrfs OUTPUT=../../../resources/handlers .PHONY: all diff --git a/plugins/handlers/printer/README.md b/plugins/handlers/printer/README.md new file mode 100644 index 00000000..3d5bbba7 --- /dev/null +++ b/plugins/handlers/printer/README.md @@ -0,0 +1,90 @@ +# Pluggable Data Processing Handler Example + +User-defined handler modules can be plugged to the built-in SysFlow `processor` plugin to implement custom data processing and analytic pipelines. + +## How do data processing handlers work? + +Handlers are implemented via the golang plugin mechanism. A handler must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-apis/go/plugins` package. + +```go +// SFHandler defines the SysFlow handler interface. +type SFHandler interface { + RegisterChannel(pc SFPluginCache) + RegisterHandler(hc SFHandlerCache) + Init(conf map[string]interface{}) error + IsEntityEnabled() bool + HandleHeader(sf *CtxSysFlow, hdr *sfgo.SFHeader) error + HandleContainer(sf *CtxSysFlow, cont *sfgo.Container) error + HandleProcess(sf *CtxSysFlow, proc *sfgo.Process) error + HandleFile(sf *CtxSysFlow, file *sfgo.File) error + HandleNetFlow(sf *CtxSysFlow, nf *sfgo.NetworkFlow) error + HandleNetEvt(sf *CtxSysFlow, ne *sfgo.NetworkEvent) error + HandleFileFlow(sf *CtxSysFlow, ff *sfgo.FileFlow) error + HandleFileEvt(sf *CtxSysFlow, fe *sfgo.FileEvent) error + HandleProcFlow(sf *CtxSysFlow, pf *sfgo.ProcessFlow) error + HandleProcEvt(sf *CtxSysFlow, pe *sfgo.ProcessEvent) error + SetOutChan(ch []interface{}) + Cleanup() +} +``` + +Each `Handle*` function receives the current SysFlow record being processed along with its corresponding parsed record type. Custom processing code should be implemented using these functions. + +## How to run this example? + +The `printer` handler is a pluggable handler that logs select SysFlow records to the standard output. This plugin doesn't define any output channels, so it acts as a plugin sink (last plugin in a pipeline). + +To run this example, in the root of sf-processor, build the processor and the handler plugin. Note, this plugin's shared object is generated in `resources/handlers/printer.so`. + +```bash +make build && make -C plugins/handlers/printer +``` + +Then, run: + +```bash +cd driver && ./sfprocessor -log=info -config=../plugins/handlers/printer/pipeline.printer.json ../resources/traces/tcp.sf +``` + +## Building the plugin for release + +To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. + +Below is an example of how this can be achieved. Set $TAG to a SysFlow release (>=0.4.0), `edge`, or `dev`. + +First, build the plugin: + +```bash +docker run --rm \ + -v $(pwd)/plugins:/go/src/github.com/sysflow-telemetry/sf-processor/plugins \ + -v $(pwd)/resources:/go/src/github.com/sysflow-telemetry/sf-processor/resources \ + sysflowtelemetry/plugin-builder:$TAG \ + make -C /go/src/github.com/sysflow-telemetry/sf-processor/plugins/handlers/printer +``` + +To test it, run the pre-built processor with the example configuration and trace. + +```bash +docker run --rm \ + -v $(pwd)/plugins:/usr/local/sysflow/plugins \ + -v $(pwd)/resources:/usr/local/sysflow/resources \ + -w /usr/local/sysflow/bin \ + --entrypoint=/usr/local/sysflow/bin/sfprocessor \ + sysflowtelemetry/sf-processor:$TAG \ + -log=info -config=../plugins/handlers/printer/pipeline.printer.json ../resources/traces/tcp.sf +``` + +The output on the above pre-recorded trace should look like this: + +```plain +[Info] 2022/02/21 15:39:58 printer.go:118: ProcEvt ./server, 13823 +[Info] 2022/02/21 15:39:58 printer.go:100: FileFlow ./server, 3 +[Info] 2022/02/21 15:39:58 printer.go:100: FileFlow ./server, 3 +[Info] 2022/02/21 15:39:58 printer.go:118: ProcEvt ./client, 13824 +[Info] 2022/02/21 15:39:58 printer.go:100: FileFlow ./client, 3 +[Info] 2022/02/21 15:39:58 printer.go:100: FileFlow ./client, 3 +[Info] 2022/02/21 15:39:58 printer.go:94: NetworkFlow ./client, 8080 +[Info] 2022/02/21 15:39:58 printer.go:118: ProcEvt ./client, 13824 +[Info] 2022/02/21 15:39:58 printer.go:94: NetworkFlow ./server, 8080 +[Info] 2022/02/21 15:39:58 printer.go:118: ProcEvt ./server, 13823 +``` diff --git a/plugins/handlers/printer/go.mod b/plugins/handlers/printer/go.mod index f3c87168..493529be 100644 --- a/plugins/handlers/printer/go.mod +++ b/plugins/handlers/printer/go.mod @@ -21,7 +21,7 @@ module github.com/sysflow-telemetry/sf-processor/plugins/handlers/printer go 1.17 -require github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 +require github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e require ( github.com/actgardner/gogen-avro/v7 v7.3.1 // indirect diff --git a/plugins/handlers/printer/go.sum b/plugins/handlers/printer/go.sum index 92d0806e..fdaeead3 100644 --- a/plugins/handlers/printer/go.sum +++ b/plugins/handlers/printer/go.sum @@ -615,8 +615,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 h1:5PfMlv3Su4dSvHnXJgyZ1t9U3up9ZEnhujBW7AryUCM= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e h1:VR8J80DbrpjOBdgc5qGZLuxqo1PJYJcdbLgyZ+9yQL0= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= diff --git a/plugins/handlers/printer/printer.go b/plugins/handlers/printer/printer.go index 68fc6ba4..96ebbc1c 100644 --- a/plugins/handlers/printer/printer.go +++ b/plugins/handlers/printer/printer.go @@ -26,7 +26,7 @@ import ( ) const ( - handlerName string = "print" + handlerName string = "printer" ) // Handler exports a symbol for this plugin. diff --git a/plugins/processors/example/Makefile b/plugins/processors/example/Makefile index 1f98d409..b41ff1e3 100644 --- a/plugins/processors/example/Makefile +++ b/plugins/processors/example/Makefile @@ -1,5 +1,5 @@ GOCMD=go -GOBUILD=$(GOCMD) build -buildmode=plugin -tags exclude_graphdriver_btrfs +GOBUILD=$(GOCMD) build -buildmode=plugin -trimpath -tags exclude_graphdriver_btrfs OUTPUT=../../../resources/plugins .PHONY: all diff --git a/plugins/processors/example/README.md b/plugins/processors/example/README.md new file mode 100644 index 00000000..f063d37b --- /dev/null +++ b/plugins/processors/example/README.md @@ -0,0 +1,87 @@ +# Processor Plugins + +User-defined plugins can be plugged and extend the SysFlow `processor` pipeline. These are the most generic type of plugins, from which all built-in processor plugins are build. Check the `core` package for examples. We have built-in processor plugins for flattening the telemetry stream, implementing a policy engine, and creating event exporters. + +## How do data processing handlers work? + +Processor plugins (or just plugins) are implemented via the golang plugin mechanism. A plugin must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-apis/go/plugins` package. + +```go +// SFProcessor defines the SysFlow processor interface. +type SFProcessor interface { + Register(pc SFPluginCache) + Init(conf map[string]interface{}) error + Process(ch interface{}, wg *sync.WaitGroup) + GetName() string + SetOutChan(ch []interface{}) + Cleanup() +} +``` + +The `Process` function is the main function of the plugin.It's where the "main loop" of the plugin should be implemented. It receives the input channel configured in the custom plugin's block in the pipeline configuration. It also received the pepeline thread WaitGroup. Custom processing code should be implemented using this function. `Init` is called once, when the pipeline is loaded. `Cleanup` is called when the pipeline is terminated. `SetOutChannel` receives a slice with the output channels configured in the plugin's block in the pipeline configuration. + +When loading a pipeline, sf-processor performes a series of health checks before the pipeline is enabled. If these health checks fail, the processor terminates. To enable health checks on cutom plugins, implement the `Test` function defined in the interface below. + +```go +// SFTestableProcessor defines a testable SysFlow processor interface. +type SFTestableProcessor interface { + SFProcessor + Test() (bool, error) +} +``` + +## How to run this example? + +The `example` plugin is a custom plugin that illustrates how to implement a minimal plugin that reads the records from the input channel and logs them to the standard output. + +To run this example, in the root of sf-processor, build the processor and the example plugin. Note, this plugin's shared object is generated in `resources/plugins/example.so`. + +```bash +make build && make -C plugins/processors/example +``` + +Then, run: + +```bash +cd driver && ./sfprocessor -log=info -config=../plugins/processors/example/pipeline.example.json ../resources/traces/tcp.sf +``` + +## Building the plugin for release + +To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. + +Below is an example of how this can be achieved. Set $TAG to a SysFlow release (>=0.4.0), `edge`, or `dev`. + +First, build the plugin: + +```bash +docker run --rm \ + -v $(pwd)/plugins:/go/src/github.com/sysflow-telemetry/sf-processor/plugins \ + -v $(pwd)/resources:/go/src/github.com/sysflow-telemetry/sf-processor/resources \ + sysflowtelemetry/plugin-builder:$TAG \ + make -C /go/src/github.com/sysflow-telemetry/sf-processor/plugins/processors/example +``` + +To test it, run the pre-built processor with the example configuration and trace. + +```bash +docker run --rm \ + -v $(pwd)/plugins:/usr/local/sysflow/plugins \ + -v $(pwd)/resources:/usr/local/sysflow/resources \ + -w /usr/local/sysflow/bin \ + --entrypoint=/usr/local/sysflow/bin/sfprocessor \ + sysflowtelemetry/sf-processor:$TAG \ + -log=info -config=../plugins/processors/example/pipeline.example.json ../resources/traces/tcp.sf +``` + +The output on the above pre-recorded trace should look like this: + +```plain +[Health] 2022/02/21 12:55:19 pipeline.go:246: Health checks: passed +[Info] 2022/02/21 12:55:19 main.go:147: Successfully loaded pipeline configuration +[Info] 2022/02/21 12:55:19 pipeline.go:170: Starting the processing pipeline +[Info] 2022/02/21 12:55:19 example.go:75: Process Event: ./server, 13823 +[Info] 2022/02/21 12:55:19 example.go:75: Process Event: ./client, 13824 +[Info] 2022/02/21 12:55:19 example.go:75: Process Event: ./client, 13824 +[Info] 2022/02/21 12:55:19 example.go:75: Process Event: ./server, 13823 +``` diff --git a/plugins/processors/example/example.go b/plugins/processors/example/example.go index 0bf78062..c0aed375 100644 --- a/plugins/processors/example/example.go +++ b/plugins/processors/example/example.go @@ -24,6 +24,7 @@ import ( "github.com/sysflow-telemetry/sf-apis/go/logger" "github.com/sysflow-telemetry/sf-apis/go/plugins" + "github.com/sysflow-telemetry/sf-apis/go/sfgo" "github.com/sysflow-telemetry/sf-processor/core/flattener" ) @@ -70,7 +71,9 @@ func (s *Example) Process(ch interface{}, wg *sync.WaitGroup) { logger.Trace.Println("Channel closed. Shutting down.") break } - logger.Trace.Println(fc) + if fc.Ints[sfgo.SYSFLOW_IDX][sfgo.SF_REC_TYPE] == sfgo.PROC_EVT { + logger.Info.Printf("Process Event: %s, %d", fc.Strs[sfgo.SYSFLOW_IDX][sfgo.PROC_EXE_STR], fc.Ints[sfgo.SYSFLOW_IDX][sfgo.EV_PROC_TID_INT]) + } } logger.Trace.Println("Exiting Example") } diff --git a/plugins/processors/example/go.mod b/plugins/processors/example/go.mod index 09633eb8..93d7ba2a 100644 --- a/plugins/processors/example/go.mod +++ b/plugins/processors/example/go.mod @@ -22,8 +22,8 @@ module github.com/sysflow-telemetry/sf-processor/plugins/processors/example go 1.17 require ( - github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 - github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220218215337-cb82d403e9f6 + github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e + github.com/sysflow-telemetry/sf-processor/core v0.0.0-20220221021811-25c7181c2904 ) require ( diff --git a/plugins/processors/example/go.sum b/plugins/processors/example/go.sum index c5e8ed99..e86ff7db 100644 --- a/plugins/processors/example/go.sum +++ b/plugins/processors/example/go.sum @@ -701,8 +701,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8 h1:5PfMlv3Su4dSvHnXJgyZ1t9U3up9ZEnhujBW7AryUCM= -github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220220141421-08882228d4d8/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e h1:VR8J80DbrpjOBdgc5qGZLuxqo1PJYJcdbLgyZ+9yQL0= +github.com/sysflow-telemetry/sf-apis/go v0.0.0-20220221182316-8e41f56e373e/go.mod h1:0xb+dFYM8a3FGTjB6s5w7Yt58HxdJat3ZRXr/dTndG8= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= diff --git a/scripts/build/update-sfapis.sh b/scripts/build/update-sfapis.sh new file mode 100755 index 00000000..54d0132a --- /dev/null +++ b/scripts/build/update-sfapis.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# Usage: update-sfapis.sh [tag|branch] +DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +for gomod in $(find $DIR/../.. -name go.mod); do + match=$(grep -w github.com/sysflow-telemetry/sf-apis/go $gomod) + if [ -n "$match" ]; then + echo "Updating $gomod" + CDIR=$(pwd) + cd $(dirname $gomod) + go get -u github.com/sysflow-telemetry/sf-apis/go@$1 + go mod tidy + cd $CDIR + fi +done \ No newline at end of file From fe635790c6667898ded8a5c1302c6b4de5d071bb Mon Sep 17 00:00:00 2001 From: terylt <30874627+terylt@users.noreply.github.com> Date: Mon, 21 Feb 2022 18:16:07 -0500 Subject: [PATCH 09/15] fix: fixed some typos --- plugins/processors/example/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/processors/example/README.md b/plugins/processors/example/README.md index f063d37b..258ce412 100644 --- a/plugins/processors/example/README.md +++ b/plugins/processors/example/README.md @@ -18,9 +18,9 @@ type SFProcessor interface { } ``` -The `Process` function is the main function of the plugin.It's where the "main loop" of the plugin should be implemented. It receives the input channel configured in the custom plugin's block in the pipeline configuration. It also received the pepeline thread WaitGroup. Custom processing code should be implemented using this function. `Init` is called once, when the pipeline is loaded. `Cleanup` is called when the pipeline is terminated. `SetOutChannel` receives a slice with the output channels configured in the plugin's block in the pipeline configuration. +The `Process` function is the main function of the plugin. It's where the "main loop" of the plugin should be implemented. It receives the input channel configured in the custom plugin's block in the pipeline configuration. It also received the pipeline thread WaitGroup. Custom processing code should be implemented using this function. `Init` is called once, when the pipeline is loaded. `Cleanup` is called when the pipeline is terminated. `SetOutChannel` receives a slice with the output channels configured in the plugin's block in the pipeline configuration. -When loading a pipeline, sf-processor performes a series of health checks before the pipeline is enabled. If these health checks fail, the processor terminates. To enable health checks on cutom plugins, implement the `Test` function defined in the interface below. +When loading a pipeline, sf-processor performs a series of health checks before the pipeline is enabled. If these health checks fail, the processor terminates. To enable health checks on custom plugins, implement the `Test` function defined in the interface below. ```go // SFTestableProcessor defines a testable SysFlow processor interface. From 0e33a388ffd5b0b37aec74513584a5de57d25248 Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Mon, 21 Feb 2022 22:51:38 -0500 Subject: [PATCH 10/15] refactor(docs): refactored and edited documentation Signed-off-by: Frederico Araujo --- docs/CONFIG.md | 22 +- docs/DOCKER.md | 92 ++------ docs/PLUGINS.md | 312 +++++++++++++++++++++++++-- docs/POLICIES.md | 51 +---- plugins/actions/example/README.md | 4 +- plugins/handlers/printer/README.md | 4 +- plugins/processors/example/README.md | 6 +- 7 files changed, 336 insertions(+), 155 deletions(-) diff --git a/docs/CONFIG.md b/docs/CONFIG.md index d3735cc1..711dd19b 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -1,4 +1,4 @@ -## Pipeline Configuration +## Configuration The pipeline configuration below shows how to configure a pipeline that will read a sysflow stream and push records to the policy engine, which will trigger alerts using a set of runtime policies stored in a `yaml` file. An example pipeline with this configuration looks as follows: @@ -30,7 +30,10 @@ The pipeline configuration below shows how to configure a pipeline that will rea } ``` -> Note: This configuration can be found in: `sf-collector/resources/pipelines/pipeline.syslog.json` +>--- +> **NOTE** This configuration can be found in: `sf-collector/resources/pipelines/pipeline.syslog.json` +> +>--- This pipeline specifies three built-in plugins: @@ -49,7 +52,10 @@ The general attributes are as follows: Channels are modeled as channel objects that have an `In` attribute representing some golang channel of objects. See [SFChannel](https://github.com/sysflow-telemetry/sf-apis/blob/master/go/plugins/processor.go) for an example. The syntax for a channel in the pipeline is `[channel name] [channel type]`. Where channel type is the label given to the channel type at plugin registration (more on this later), and channel name is a unique identifier for the current channel instance. The name and type of an output channel in one plugin must match that of the name and type of the input channel of the next plugin in the pipeline sequence. -A plugin has exacly one input channel but it may specify more than one output channels. This allows pipeline definitions that fan out data to more than one receiver plugin similar to a Unix `tee` command. While there must be always one SysFlow reader acting as the entry point of a pipeline, a pipeline configuration may specify policy engines passing data to different exporters or a SysFlow reader passing data to different policy engines. Generally, pipelines form a tree rather being a linear structure. +>--- +> **NOTE** A plugin has exacly one input channel but it may specify more than one output channels. This allows pipeline definitions that fan out data to more than one receiver plugin similar to a Unix `tee` command. While there must be always one SysFlow reader acting as the entry point of a pipeline, a pipeline configuration may specify policy engines passing data to different exporters or a SysFlow reader passing data to different policy engines. Generally, pipelines form a tree rather being a linear structure. +> +>--- ### Policy engine configuration @@ -84,11 +90,11 @@ The following table lists the currently supported exporter modules and the corre Some of these combinations require additional configuration as described in the following sections. `null` is used for debugging the processor and doesn't export any data. -#### Export to file +#### File If _export_ is set to `file`, an additional parameter _file.path_ allows the specification of the target file. -#### Export to syslog +#### Syslog If the _export_ parameter is set to `syslog`, output to syslog is enabled and the following addtional parameters are used: @@ -98,7 +104,7 @@ If the _export_ parameter is set to `syslog`, output to syslog is enabled and th - _syslog.host_ (optional): The hostname of the sysflow server. Default is `localhost`. - _syslog.port_ (optional): The port pf the syslow server. Default is `514`. -#### Export to ElasticSearch +#### ElasticSearch Export to ElasticSearch is enabled by setting the config parameter _export_ to `es`. The only supported _format_ for export to ElasticSearch is `ecs`. @@ -115,7 +121,7 @@ Data export is done via bulk ingestion. The ingestion can be controlled by some The Elastic exporter does not make any assumption on the existence or configuration of the index specified in _es.index_. If the index does not exist, Elastic will automatically create it and apply a default dynamic mapping. It may be beneficial to use an explicit mapping for the ECS data generated by the Elastic exporter. For convinience we provide an [explicit mapping](resources/mappings/ecs_mapping.json) for creating a new tailored index in Elastic. For more information refer to the [Elastic Mapping](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html) reference. -#### Export fo IBM Findings API (IBM Cloud Security & Compliance Center) +#### IBM Findings Export to IBM Findings API allows adding custom findings to the IBM Cloud Security & Compliance Center (SCC). The mode is enabled via setting the configuration parameter _export_ to `findings`. The _format_ parameter must be set to `occurence` in this case. For export to IBM Findings, the following parameters are used: @@ -134,7 +140,7 @@ Export to IBM Findings API allows adding custom findings to the IBM Cloud Securi For more information about inserting custom findings into IBM SCC, refer to [Custom Findings](https://cloud.ibm.com/docs/security-advisor?topic=security-advisor-setup_custom) section of IBM Cloud Security Advisor. -## Override plugin configuration attributes with environment variables +### Environment variables It is possible to override any of the custom attributes of a plugin using an environment variable. This is especially useful when operating the processor as a container, where you may have to deploy the processor to multiple nodes, and have attributes that change per node. If an environment variable is set, it overrides the setting inside the config file. The environment variables must follow the following structure: diff --git a/docs/DOCKER.md b/docs/DOCKER.md index c1728dc2..47683349 100644 --- a/docs/DOCKER.md +++ b/docs/DOCKER.md @@ -1,70 +1,24 @@ -## Deploy collector and processor using docker +## Docker usage -The following docker-compose file illustrates how to deploy the processor and the collector as containers. +Documentation and scripts for how to deploy the SysFlow Processor with docker compose can be found in [here](https://sysflow.readthedocs.io/en/latest/docker.html). -```yaml -version: "3.5" -services: - sf-processor: - container_name: sf-processor - image: sysflowtelemetry/sf-processor:latest - privileged: false - volumes: - - socket-vol:/sock/ - environment: - DRIVER: socket - INPUT_PATH: /sock/sysflow.sock - POLICYENGINE_MODE: alert - EXPORTER_TYPE: telemetry - EXPORTER_SOURCE: sysflow - EXPORTER_EXPORT: syslog - EXPORTER_HOST: - EXPORTER_PORT: 514 - sf-collector: - container_name: sf-collector - image: sysflowtelemetry/sf-collector:latest - depends_on: - - "sf-processor" - privileged: true - volumes: - - /var/run/docker.sock:/host/var/run/docker.sock - - /dev:/host/dev - - /proc:/host/proc:ro - - /boot:/host/boot:ro - - /lib/modules:/host/lib/modules:ro - - /usr:/host/usr:ro - - /mnt/data:/mnt/data - - socket-vol:/sock/ - - ./resources/traces:/tests/traces - environment: - EXPORTER_ID: ${HOSTNAME} - NODE_IP: - FILTER: "container.name!=sf-collector and container.name!=sf-processor" - INTERVAL: 300 - SOCK_FILE: /sock/sysflow.sock -volumes: - socket-vol: -``` +### Collector environment -### Setting up the collector environment +The key setting in the collector portion of the file is the `FILTER` variable. Since the collector is built atop the Falco libs, it uses Falco's filtering mechanism described [here](https://falco.org/docs/rules/supported-fields/) and can support the attributes described there in case you want to filter on specific containers, processes, operations, etc. One of the most powerful filters is the `container.type!=host` filter, which limits collection only to container monitoring. If you want to monitor the entire host, simply remove the `container.type` operation from the filter. -The key setting in the collector portion of the file is the `FILTER` variable. Since the collector is built atop the sysdig core, it uses the sysdig filtering mechanism described [here](https://github.com/draios/sysdig/wiki/Sysdig-User-Guide#user-content-filtering) and can support all the sysdig attributes described there in case you want to filter on specific containers, processes, operations, etc. One of the more powerful filters is the `container.type!=host` filter, which limits collection only to container monitoring. If you want to monitor the entire host, simply remove the `container.type` operation from the filter. +### Processor environment -### Setting up the processor environment - -As mentioned in a previous section, all custom plugin attributes can be set using the following: `_` format. Note that the docker compose file sets several attributes including `EXPORTER_TYPE`, `EXPORTER_HOST` and `EXPORTER_PORT`. Note that `EXPORTER_SOURCE` is set to the bash environment variable `${HOSTNAME}`. `HOSTNAME` must be explicitly exported before launching docker compose in order to be picked up. - -```bash -export HOSTNAME -docker-compose up -``` +As mentioned in a previous section, all custom plugin attributes can be set using the following: `_` format. Note that the docker compose file sets several attributes including `EXPORTER_TYPE`, `EXPORTER_HOST` and `EXPORTER_PORT`. The following are the default locations of the pipeline configuration and plugins directory: -- pipeline.json - `/usr/local/sysflow/conf/pipeline.json` -- plugins dir - `/usr/local/sysflow/resources/plugins` +- pipeline.json: `/usr/local/sysflow/conf/pipeline.json` +- drivers dir: `/usr/local/sysflow/resources/drivers` +- plugins dir: `/usr/local/sysflow/resources/plugins` +- handler dir: `/usr/local/sysflow/resources/handlers` +- actions dir: `/usr/local/sysflow/resources/actions` -We can overwrite these particular files/dirs in the docker container with those on the host by setting up a virtual mounts mapping the host directories/files into the container using the volumes section of the sf-processor in the docker-compose.yaml. +The default configuration can be changed by setting up a virtual mounts mapping the host directories/files into the container using the volumes section of the sf-processor in the docker-compose.yaml. ```yaml sf-processor: @@ -72,27 +26,21 @@ sf-processor: image: sysflowtelemetry/sf-processor:latest privileged: true volumes: - - /var/run/docker.sock:/var/run/docker.sock - - socket-vol:/sock/ - - ./resources/pipelines/pipeline.runtimeintegrity.json:/usr/local/sysflow/conf/pipeline.json - - ./resources/plugins:/usr/local/sysflow/resources/plugins + ... + - ./path/to/my.pipeline.json:/usr/local/sysflow/conf/pipeline.json ``` -If using the policy engine, the policy folder defaults to the following location in the container: +The policy location can be overwritten by setting the `POLICYENGINE_POLICIES` environment variable, which can point to a policy file or a directory containing policy files (must have yaml extension). -`/usr/local/sysflow/resources/policies/` - -This location can be overwritten by setting the `POLICYENGINE_POLICIES` environment variable. - -The docker container uses a default `filter.yaml` policy that outputs sysflow records in json. You can use your own policy files from the host by mounting your policy directory into the container as follows: +The docker container uses a default `filter.yaml` policy that outputs SysFlow records in json. You can use your own policy files from the host by mounting your policy directory into the container as follows, in which the custom pipeline points to the mounted policies. ```yaml sf-processor: container_name: sf-processor image: sysflowtelemetry/sf-processor:latest privileged: true - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - socket-vol:/sock/ - - ./resources/policies/runtimeintegrity/:/usr/local/sysflow/resources/policies/ + volumes: + ... + - ./path/to/my.pipeline.json:/usr/local/sysflow/conf/pipeline.json + - ./path/to/policies/:/usr/local/sysflow/resources/policies/ ``` diff --git a/docs/PLUGINS.md b/docs/PLUGINS.md index c65674cf..e40c6ad0 100644 --- a/docs/PLUGINS.md +++ b/docs/PLUGINS.md @@ -1,8 +1,49 @@ -## Write a simple processing plugin +## Plugins -In addition to its core plugins, the processor also supports custom plugins that can be dynamically loaded into the processor via a compiled golang shared library using the [golang plugin package](https://golang.org/pkg/plugin/). Custom plugins enables easy extension of the processor and the creation of custom pipelines tailored to specific use cases. +In addition to its core plugins, the processor also supports custom plugins that can be dynamically loaded into the processor via a compiled golang shared library using the [golang plugin package](https://golang.org/pkg/plugin/). Custom plugins enable easy extension of the processor and the creation of custom pipelines tailored to specific use cases. -A dynamic plugin example is provided in [github](https://github.com/sysflow-telemetry/sf-processor/tree/master/plugins/example). The core of the plugin is building an object that implements an [SFProcessor interface](https://github.com/sysflow-telemetry/sf-apis/blob/master/go/plugins/processor.go). Such an implementation looks as follows: +The processor supports four types of plugins: + +* **sources**: enable the ingestion of different telemetry sources into the processor pipeline. +* **processors**: enable the creation of custom data processing and analytic plugins to extend sf-processor pipelines. +* **handlers**: enable the creation of custom SysFlow record handling plugins. +* **actions**: enable the creation of custom action plugins to extend sf-processor's policy engine. + +### Processor Plugins + +User-defined plugins can be plugged and extend the sf-processor pipeline. These are the most generic type of plugins, from which all built-in processor plugins are build. Check the `core` package for examples. We have built-in processor plugins for flattening the telemetry stream, implementing a policy engine, and creating event exporters. + +#### How do data processing plugins work? + +Processor plugins (or just plugins) are implemented via the golang plugin mechanism. A plugin must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-apis/go/plugins` package. + +```go +// SFProcessor defines the SysFlow processor interface. +type SFProcessor interface { + Register(pc SFPluginCache) + Init(conf map[string]interface{}) error + Process(ch interface{}, wg *sync.WaitGroup) + GetName() string + SetOutChan(ch []interface{}) + Cleanup() +} +``` + +The `Process` function is the main function of the plugin.It's where the "main loop" of the plugin should be implemented. It receives the input channel configured in the custom plugin's block in the pipeline configuration. It also received the pepeline thread WaitGroup. Custom processing code should be implemented using this function. `Init` is called once, when the pipeline is loaded. `Cleanup` is called when the pipeline is terminated. `SetOutChannel` receives a slice with the output channels configured in the plugin's block in the pipeline configuration. + +When loading a pipeline, sf-processor performs a series of health checks before the pipeline is enabled. If these health checks fail, the processor terminates. To enable health checks on cutom plugins, implement the `Test` function defined in the interface below. + +```go +// SFTestableProcessor defines a testable SysFlow processor interface. +type SFTestableProcessor interface { + SFProcessor + Test() (bool, error) +} +``` + +#### An example plugin + +A dynamic plugin example is provided in [github](https://github.com/sysflow-telemetry/sf-processor/tree/master/plugins/processors/example). The core of the plugin is building an object that implements an [SFProcessor interface](https://github.com/sysflow-telemetry/sf-apis/blob/master/go/plugins/processor.go). Such an implementation looks as follows: ```golang package main @@ -12,6 +53,7 @@ import ( "github.com/sysflow-telemetry/sf-apis/go/logger" "github.com/sysflow-telemetry/sf-apis/go/plugins" + "github.com/sysflow-telemetry/sf-apis/go/sfgo" "github.com/sysflow-telemetry/sf-processor/core/flattener" ) @@ -36,7 +78,7 @@ func (s *Example) GetName() string { } // Init initializes the plugin with a configuration map. -func (s *Example) Init(conf map[string]string) error { +func (s *Example) Init(conf map[string]interface{}) error { return nil } @@ -58,25 +100,28 @@ func (s *Example) Process(ch interface{}, wg *sync.WaitGroup) { logger.Trace.Println("Channel closed. Shutting down.") break } - logger.Info.Println(fc) + if fc.Ints[sfgo.SYSFLOW_IDX][sfgo.SF_REC_TYPE] == sfgo.PROC_EVT { + logger.Info.Printf("Process Event: %s, %d", fc.Strs[sfgo.SYSFLOW_IDX][sfgo.PROC_EXE_STR], fc.Ints[sfgo.SYSFLOW_IDX][sfgo.EV_PROC_TID_INT]) + } } logger.Trace.Println("Exiting Example") } // SetOutChan sets the output channel of the plugin. -func (s *Example) SetOutChan(ch interface{}) {} +func (s *Example) SetOutChan(ch []interface{}) {} // Cleanup tears down plugin resources. func (s *Example) Cleanup() {} // This function is not run when module is used as a plugin. func main() {} + ``` -The object must implement the following interface: +The custom plugin must implement the following interface: * `GetName()` - returns a lowercase string representing the plugin's label. This label is important, because it identifies the plugin in the `pipeline.json` file, enabling the processor to load the plugin. In the object above, this plugin is called `example`. Note that the label must be unique. -* `Init(config map[string]string) error` - used to initialize the plugin. The configuration map that is passed to the function stores all the configuration information defined in the plugin's definition inside `pipeline.json` (more on this later). +* `Init(conf map[string]interface{}) error` - used to initialize the plugin. The configuration map that is passed to the function stores all the configuration information defined in the plugin's definition inside `pipeline.json` (more on this later). * `Register(pc plugins.SFPluginCache)` - this registers the plugin with the plugin cache of the processor. * `pc.AddProcessor(pluginName, )` (required) - registers the plugin named `example` with the processor. You must define a constructor function using the convention `New` which is used to instantiate the plugin, and returns it as an `SFProcessor` interface - see `NewExample` for an example. * `pc.AddChannel(channelName, )` (optional) - if your plugin is using a custom output channel of objects (i.e., the channel used to pass output objects from this plugin to the next in the pipeline), it should be included in this plugin. @@ -84,20 +129,19 @@ The object must implement the following interface: * The constructor function should return a golang `interface{}` representing an object that as an `In` attribute of type `chan `. We will call this object, a wrapped channel object going forward. For example, the channel object that passes sysflow objects is called SFChannel, and is defined [here](https://github.com/sysflow-telemetry/sf-apis/blob/master/go/plugins/processor.go) * For a complete example of defining an output channel, see `NewFlattenerChan` in the [flattener](https://github.com/sysflow-telemetry/sf-processor/blob/master/core/flattener/flattener.go) as well as the `Register` function. The `FlatChannel` is defined [here](https://github.com/sysflow-telemetry/sf-apis/blob/master/go/plugins/handler.go) * `Process(ch interface{}, wg *sync.WaitGroup)` - this function is launched by the processor as a go thread and is where the main plugin processing occurs. It takes a wrapped channel object, which acts as the input data source to the plugin (i.e., this is the channel that is configured as the input channel to the plugin in the pipeline.json). It also takes a sync.WaitGroup object, which is used to signal to the processor when the plugin has completed running (see `defer wg.Done()` in code). The processor must loop on the input channel, and do its analysis on each input record. In this case, the example plugin is reading flat records and printing them to the screen. -* `SetOutChan(ch interface{})` - sets the wrapped channel that will serve as the output channel for the plugin. The output channel is instantiated by the processor, which is also in charge of stitching the plugins together. If the plugin is the last one in the chain, then this function can be left empty. See the `SetOutputChan` function in the [flattener](https://github.com/sysflow-telemetry/sf-processor/blob/master/core/flattener/flattener.go) to see how an output channel is implemented. -* `Cleanup()` - Used to cleanup any resources. This function is called by the processor after the plugin `Process` function exits. One of the key items to close in the `Cleanup` function is the output channel using the golang `close()` [function](https://gobyexample.com/closing-channels). Closing the output channel enables the pipeline to be torn down gracefully and in sequence. +* `SetOutChan(ch []interface{})` - sets the wrapped channels that will serve as the output channels for the plugin. The output channels are instantiated by the processor, which is also in charge of stitching the plugins together. If the plugin is the last one in the chain, then this function can be left empty. See the `SetOutputChan` function in the [flattener](https://github.com/sysflow-telemetry/sf-processor/blob/master/core/flattener/flattener.go) to see how an output channel is implemented. +* `Cleanup()` - Used to cleanup any resources. This function is called by the processor after the plugin `Process` function exits. One of the key items to close in the `Cleanup` function is the output channel using the golang `close()` [function](https://gobyexample.com/closing-channels). Closing the output channel enables the pipeline to be torn down gracefully and in sequence. * `main(){}` - this main method is not used by the plugin or processor. It's required by golang in order to be able to compile as a shared object. To compile the example plugin, use the provided Makefile: -``` -cd plugins/example -make +```bash +make -C plugins/processors/example ``` This will build the plugin and copy it into `resources/plugins/`. -To use the new plugin, use the configuration provided in [github](https://github.com/sysflow-telemetry/sf-processor/tree/master/plugins/example), which defines the following pipeline: +To use the new plugin, use the configuration provided in [github](https://github.com/sysflow-telemetry/sf-processor/tree/master/plugins/processors/example), which defines the following pipeline: ```bash { @@ -117,15 +161,245 @@ To use the new plugin, use the configuration provided in [github](https://github ``` This pipeline contains two plugins: -- The builtin `sysflowReader` plugin with flattener handler, which takes raw sysflow objects, and flattens them +* The builtin `sysflowReader` plugin with flattener handler, which takes raw sysflow objects, and flattens them into arrays of integers and strings for easier processing in certain plugins like the policy engine. -- The `example` plugin, which takes the flattened output from the sysflowreader plugin, and prints it the screen. +* The `example` plugin, which takes the flattened output from the sysflowreader plugin, and prints it the screen. The key item to note is that the output channel (i.e., `out`) of `sysflowreader` matches the input channel (i.e., `in`) of the example plugin. This ensures that the plugins will be properly stitched together. -To run the example pipeline: +#### How to run this example? + +The `example` plugin is a custom plugin that illustrates how to implement a minimal plugin that reads the records from the input channel and logs them to the standard output. + +To run this example, in the root of sf-processor, build the processor and the example plugin. Note, this plugin's shared object is generated in `resources/plugins/example.so`. + +```bash +make build && make -C plugins/processors/example +``` + +Then, run: + +```bash +cd driver && ./sfprocessor -log=info -config=../plugins/processors/example/pipeline.example.json ../resources/traces/tcp.sf +``` + +#### Building the plugin for release + +To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. + +Below is an example of how this can be achieved. Set $TAG to a SysFlow release (>=0.4.0), `edge`, or `dev`. + +First, build the plugin: + +```bash +docker run --rm \ + -v $(pwd)/plugins:/go/src/github.com/sysflow-telemetry/sf-processor/plugins \ + -v $(pwd)/resources:/go/src/github.com/sysflow-telemetry/sf-processor/resources \ + sysflowtelemetry/plugin-builder:$TAG \ + make -C /go/src/github.com/sysflow-telemetry/sf-processor/plugins/processors/example +``` + +To test it, run the pre-built processor with the example configuration and trace. +```bash +docker run --rm \ + -v $(pwd)/plugins:/usr/local/sysflow/plugins \ + -v $(pwd)/resources:/usr/local/sysflow/resources \ + -w /usr/local/sysflow/bin \ + --entrypoint=/usr/local/sysflow/bin/sfprocessor \ + sysflowtelemetry/sf-processor:$TAG \ + -log=info -config=../plugins/processors/example/pipeline.example.json ../resources/traces/tcp.sf +``` + +The output on the above pre-recorded trace should look like this: + +```plain +[Health] 2022/02/21 12:55:19 pipeline.go:246: Health checks: passed +[Info] 2022/02/21 12:55:19 main.go:147: Successfully loaded pipeline configuration +[Info] 2022/02/21 12:55:19 pipeline.go:170: Starting the processing pipeline +[Info] 2022/02/21 12:55:19 example.go:75: Process Event: ./server, 13823 +[Info] 2022/02/21 12:55:19 example.go:75: Process Event: ./client, 13824 +[Info] 2022/02/21 12:55:19 example.go:75: Process Event: ./client, 13824 +[Info] 2022/02/21 12:55:19 example.go:75: Process Event: ./server, 13823 +``` + +### Handler Plugins + +User-defined handler modules can be plugged to the built-in SysFlow `processor` plugin to implement custom data processing and analytic pipelines. + +#### How do handler plugins work? + +Handlers are implemented via the golang plugin mechanism. A handler must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-apis/go/plugins` package. + +```go +// SFHandler defines the SysFlow handler interface. +type SFHandler interface { + RegisterChannel(pc SFPluginCache) + RegisterHandler(hc SFHandlerCache) + Init(conf map[string]interface{}) error + IsEntityEnabled() bool + HandleHeader(sf *CtxSysFlow, hdr *sfgo.SFHeader) error + HandleContainer(sf *CtxSysFlow, cont *sfgo.Container) error + HandleProcess(sf *CtxSysFlow, proc *sfgo.Process) error + HandleFile(sf *CtxSysFlow, file *sfgo.File) error + HandleNetFlow(sf *CtxSysFlow, nf *sfgo.NetworkFlow) error + HandleNetEvt(sf *CtxSysFlow, ne *sfgo.NetworkEvent) error + HandleFileFlow(sf *CtxSysFlow, ff *sfgo.FileFlow) error + HandleFileEvt(sf *CtxSysFlow, fe *sfgo.FileEvent) error + HandleProcFlow(sf *CtxSysFlow, pf *sfgo.ProcessFlow) error + HandleProcEvt(sf *CtxSysFlow, pe *sfgo.ProcessEvent) error + SetOutChan(ch []interface{}) + Cleanup() +} +``` + +Each `Handle*` function receives the current SysFlow record being processed along with its corresponding parsed record type. Custom processing code should be implemented using these functions. + +## How to run this example? + +The `printer` handler is a pluggable handler that logs select SysFlow records to the standard output. This plugin doesn't define any output channels, so it acts as a plugin sink (last plugin in a pipeline). + +To run this example, in the root of sf-processor, build the processor and the handler plugin. Note, this plugin's shared object is generated in `resources/handlers/printer.so`. + +```bash +make build && make -C plugins/handlers/printer ``` -cd driver -./sfprocessor -config ../plugins/example/pipeline.example.json -plugdir ../resources/plugins/ ../resources/traces/mon.1531776712.sf + +Then, run: + +```bash +cd driver && ./sfprocessor -log=info -config=../plugins/handlers/printer/pipeline.printer.json ../resources/traces/tcp.sf +``` + +## Building the plugin for release + +To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. + +Below is an example of how this can be achieved. Set $TAG to a SysFlow release (>=0.4.0), `edge`, or `dev`. + +First, build the plugin: + +```bash +docker run --rm \ + -v $(pwd)/plugins:/go/src/github.com/sysflow-telemetry/sf-processor/plugins \ + -v $(pwd)/resources:/go/src/github.com/sysflow-telemetry/sf-processor/resources \ + sysflowtelemetry/plugin-builder:$TAG \ + make -C /go/src/github.com/sysflow-telemetry/sf-processor/plugins/handlers/printer +``` + +To test it, run the pre-built processor with the example configuration and trace. + +```bash +docker run --rm \ + -v $(pwd)/plugins:/usr/local/sysflow/plugins \ + -v $(pwd)/resources:/usr/local/sysflow/resources \ + -w /usr/local/sysflow/bin \ + --entrypoint=/usr/local/sysflow/bin/sfprocessor \ + sysflowtelemetry/sf-processor:$TAG \ + -log=info -config=../plugins/handlers/printer/pipeline.printer.json ../resources/traces/tcp.sf +``` + +The output on the above pre-recorded trace should look like this: + +```plain +[Info] 2022/02/21 15:39:58 printer.go:118: ProcEvt ./server, 13823 +[Info] 2022/02/21 15:39:58 printer.go:100: FileFlow ./server, 3 +[Info] 2022/02/21 15:39:58 printer.go:100: FileFlow ./server, 3 +[Info] 2022/02/21 15:39:58 printer.go:118: ProcEvt ./client, 13824 +[Info] 2022/02/21 15:39:58 printer.go:100: FileFlow ./client, 3 +[Info] 2022/02/21 15:39:58 printer.go:100: FileFlow ./client, 3 +[Info] 2022/02/21 15:39:58 printer.go:94: NetworkFlow ./client, 8080 +[Info] 2022/02/21 15:39:58 printer.go:118: ProcEvt ./client, 13824 +[Info] 2022/02/21 15:39:58 printer.go:94: NetworkFlow ./server, 8080 +[Info] 2022/02/21 15:39:58 printer.go:118: ProcEvt ./server, 13823 +``` + +### Action Plugins + +User-defined actions can be plugged to SysFlow's Policy Engine rule declarations to perform additional processing on matched records. + +#### How do action plugins work? + +Actions are implemented via the golang plugin mechanism. An action must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-processor/core/policyengine/engine` package. + +```go +// Prototype of an action function +type ActionFunc func(r *Record) error + +// Action interface for user-defined actions +type Action interface { + GetName() string + GetFunc() ActionFunc +} +``` + +Actions have a name and an action function. Within a single policy engine instance, action names must be unique. User-defined actions cannot re-declare built-in actions. Reusing names of user-defined actions overwrites previously registered actions. + +The action function receives the current record as an argument and thus has access to all record attributes. The action result can be stored in the record context via the context modifier methods. + +#### How to run this example? + +The `now` action is a pluggable action that creates a tag containing the current time in nanosecond precision. + +First, in the root of sf-processor, build the processor and the action plugin. Note, this plugin's shared object is generated in `resources/actions/now.so`. + +```bash +make build && make -C plugins/actions/example +``` + +Then, run: + +```bash +cd driver && ./sfprocessor -log=quiet -config=../plugins/actions/example/pipeline.actions.json ../resources/traces/tcp.sf +``` + +#### Building the plugin for release + +To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. + +Below is an example of how this can be achieved. Set $TAG to a SysFlow release (>=0.4.0), `edge`, or `dev`. + +First, build the plugin: + +```bash +docker run --rm \ + -v $(pwd)/plugins:/go/src/github.com/sysflow-telemetry/sf-processor/plugins \ + -v $(pwd)/resources:/go/src/github.com/sysflow-telemetry/sf-processor/resources \ + sysflowtelemetry/plugin-builder:$TAG \ + make -C /go/src/github.com/sysflow-telemetry/sf-processor/plugins/actions/example +``` + +To test it, run the pre-built processor with the example configuration and trace. + +```bash +docker run --rm \ + -v $(pwd)/plugins:/usr/local/sysflow/plugins \ + -v $(pwd)/resources:/usr/local/sysflow/resources \ + -w /usr/local/sysflow/bin \ + --entrypoint=/usr/local/sysflow/bin/sfprocessor \ + sysflowtelemetry/sf-processor:$TAG \ + -log=quiet -config=../plugins/actions/example/pipeline.actions.json ../resources/traces/tcp.sf +``` + +In the output, observe that all records matching the policy speficied in `pipeline.actions.json` are tagged by action `now` with the tag `now_in_nanos`. For example: + +```plain +{ + "version": 4, + "endts": 0, + "opflags": [ + "EXEC" + ], + ... + "policies": [ + { + "id": "Action example", + "desc": "user-defined action example", + "priority": 0 + } + ], + "tags": [ + "now_in_nanos:1645409122055957900" + ] +} ``` diff --git a/docs/POLICIES.md b/docs/POLICIES.md index f74d935a..57edcd8e 100644 --- a/docs/POLICIES.md +++ b/docs/POLICIES.md @@ -1,4 +1,4 @@ -## Writing runtime policies +## Policy Language The policy engine adopts and extends the Falco rules definition syntax. Before reading the rest of this section, please go through the [Falco Rules](https://falco.org/docs/rules/) documentation to get familiar with _rule_, _macro_, and _list_ syntax, all of which are supported in our policy engine. Policies are written in one or more `yaml` files, and stored in a directory specified in the pipeline configuration file under the `policies` attribute of the policy engine plugin. @@ -161,51 +161,4 @@ See the resources policies directory in [github](https://github.com/sysflow-tele ### User-defined Actions -User-defined actions are implemented via the golang plugin mechanism. An action must implement the following interface defined in the `core/policyengine/engine` package. - -```go -// Prototype of an action function -type ActionFunc func(r *Record) error - -// Action interface for user-defined actions -type Action interface { - GetName() string - GetFunc() ActionFunc -} -``` - -Actions have a name and an action function. Within a single policy engine instance, action names must be unique. User-defined actions cannot re-declare built-in actions. Reusing names of user-defined actions overwrites previously registered actions. - -The action function receives the current record as an argument and thus has access to all record attributes. The action result can be stored in the record context via the context modifier methods. Below is a sample implementation of a user-defined action that creates a tag containing the current time in nanosecond precision. - -```go -package main - -import ( - "strconv" - "time" - - "github.com/sysflow-telemetry/sf-processor/core/policyengine/engine" -) - -type MyAction struct{} - -func (a *MyAction) GetName() string { - return "now" -} - -func (a *MyAction) GetFunc() engine.ActionFunc { - return addMyTag -} - -func addMyTag(r *engine.Record) error { - r.Ctx.AddTag("now_in_nanos:" + strconv.FormatInt(time.Now().UnixNano(), 10)) - return nil -} - -var Action MyAction -``` - -For the matching records above action can be executed by specifying `actions: [now]` as part of the rule. - -Using the Golang compiler switch `-buildmode=plugin`, the action code is compiled into a shared object file (`.so`). There is no limit to the number of user-defined actions. The policy engine loads all `.so` files found in the action directory specified via the `actiondir` parameter of the pipeline configuration. +User-defined actions are implemented via the golang plugin mechanism. Check the documentation on [Action Plugins](https://sysflow.readthedocs.io/en/latest/processor.html#action-plugins) for a custom action plugin example. diff --git a/plugins/actions/example/README.md b/plugins/actions/example/README.md index 36c98e7e..87d1cba4 100644 --- a/plugins/actions/example/README.md +++ b/plugins/actions/example/README.md @@ -1,8 +1,8 @@ -# Pluggable Action Example +# Action Plugins User-defined actions can be plugged to SysFlow's Policy Engine rule declarations to perform additional processing on matched records. -## How do actions work? +## How do action plugins work? Actions are implemented via the golang plugin mechanism. An action must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-processor/core/policyengine/engine` package. diff --git a/plugins/handlers/printer/README.md b/plugins/handlers/printer/README.md index 3d5bbba7..cde27857 100644 --- a/plugins/handlers/printer/README.md +++ b/plugins/handlers/printer/README.md @@ -1,8 +1,8 @@ -# Pluggable Data Processing Handler Example +# Handler Plugins User-defined handler modules can be plugged to the built-in SysFlow `processor` plugin to implement custom data processing and analytic pipelines. -## How do data processing handlers work? +## How do handler plugin work? Handlers are implemented via the golang plugin mechanism. A handler must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-apis/go/plugins` package. diff --git a/plugins/processors/example/README.md b/plugins/processors/example/README.md index f063d37b..b8b3a391 100644 --- a/plugins/processors/example/README.md +++ b/plugins/processors/example/README.md @@ -1,8 +1,8 @@ # Processor Plugins -User-defined plugins can be plugged and extend the SysFlow `processor` pipeline. These are the most generic type of plugins, from which all built-in processor plugins are build. Check the `core` package for examples. We have built-in processor plugins for flattening the telemetry stream, implementing a policy engine, and creating event exporters. +User-defined plugins can be plugged and extend the sf-processor pipeline. These are the most generic type of plugins, from which all built-in processor plugins are build. Check the `core` package for examples. We have built-in processor plugins for flattening the telemetry stream, implementing a policy engine, and creating event exporters. -## How do data processing handlers work? +## How do data processing plugins work? Processor plugins (or just plugins) are implemented via the golang plugin mechanism. A plugin must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-apis/go/plugins` package. @@ -20,7 +20,7 @@ type SFProcessor interface { The `Process` function is the main function of the plugin.It's where the "main loop" of the plugin should be implemented. It receives the input channel configured in the custom plugin's block in the pipeline configuration. It also received the pepeline thread WaitGroup. Custom processing code should be implemented using this function. `Init` is called once, when the pipeline is loaded. `Cleanup` is called when the pipeline is terminated. `SetOutChannel` receives a slice with the output channels configured in the plugin's block in the pipeline configuration. -When loading a pipeline, sf-processor performes a series of health checks before the pipeline is enabled. If these health checks fail, the processor terminates. To enable health checks on cutom plugins, implement the `Test` function defined in the interface below. +When loading a pipeline, sf-processor performs a series of health checks before the pipeline is enabled. If these health checks fail, the processor terminates. To enable health checks on cutom plugins, implement the `Test` function defined in the interface below. ```go // SFTestableProcessor defines a testable SysFlow processor interface. From 76721907d67068d869e726c7dc3294a6635d6ec3 Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Mon, 21 Feb 2022 23:28:02 -0500 Subject: [PATCH 11/15] refactor(docs): updated headings Signed-off-by: Frederico Araujo --- docs/PLUGINS.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/PLUGINS.md b/docs/PLUGINS.md index 69afd9ae..9e6b592f 100644 --- a/docs/PLUGINS.md +++ b/docs/PLUGINS.md @@ -13,7 +13,7 @@ The processor supports four types of plugins: User-defined plugins can be plugged and extend the sf-processor pipeline. These are the most generic type of plugins, from which all built-in processor plugins are build. Check the `core` package for examples. We have built-in processor plugins for flattening the telemetry stream, implementing a policy engine, and creating event exporters. -#### How do data processing plugins work? +#### Interface Processor plugins (or just plugins) are implemented via the golang plugin mechanism. A plugin must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-apis/go/plugins` package. @@ -41,7 +41,7 @@ type SFTestableProcessor interface { } ``` -#### An example plugin +#### Example A dynamic plugin example is provided in [github](https://github.com/sysflow-telemetry/sf-processor/tree/master/plugins/processors/example). The core of the plugin is building an object that implements an [SFProcessor interface](https://github.com/sysflow-telemetry/sf-apis/blob/master/go/plugins/processor.go). Such an implementation looks as follows: @@ -167,7 +167,7 @@ This pipeline contains two plugins: The key item to note is that the output channel (i.e., `out`) of `sysflowreader` matches the input channel (i.e., `in`) of the example plugin. This ensures that the plugins will be properly stitched together. -#### How to run this example? +#### Build The `example` plugin is a custom plugin that illustrates how to implement a minimal plugin that reads the records from the input channel and logs them to the standard output. @@ -183,7 +183,7 @@ Then, run: cd driver && ./sfprocessor -log=info -config=../plugins/processors/example/pipeline.example.json ../resources/traces/tcp.sf ``` -#### Building the plugin for release +#### Plugin builder To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. @@ -227,7 +227,7 @@ The output on the above pre-recorded trace should look like this: User-defined handler modules can be plugged to the built-in SysFlow `processor` plugin to implement custom data processing and analytic pipelines. -#### How do handler plugins work? +#### Interface Handlers are implemented via the golang plugin mechanism. A handler must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-apis/go/plugins` package. @@ -255,7 +255,7 @@ type SFHandler interface { Each `Handle*` function receives the current SysFlow record being processed along with its corresponding parsed record type. Custom processing code should be implemented using these functions. -## How to run this example? +#### Build The `printer` handler is a pluggable handler that logs select SysFlow records to the standard output. This plugin doesn't define any output channels, so it acts as a plugin sink (last plugin in a pipeline). @@ -271,7 +271,7 @@ Then, run: cd driver && ./sfprocessor -log=info -config=../plugins/handlers/printer/pipeline.printer.json ../resources/traces/tcp.sf ``` -## Building the plugin for release +#### Plugin builder To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. @@ -318,7 +318,7 @@ The output on the above pre-recorded trace should look like this: User-defined actions can be plugged to SysFlow's Policy Engine rule declarations to perform additional processing on matched records. -#### How do action plugins work? +#### Interface Actions are implemented via the golang plugin mechanism. An action must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-processor/core/policyengine/engine` package. @@ -337,7 +337,7 @@ Actions have a name and an action function. Within a single policy engine instan The action function receives the current record as an argument and thus has access to all record attributes. The action result can be stored in the record context via the context modifier methods. -#### How to run this example? +#### Build The `now` action is a pluggable action that creates a tag containing the current time in nanosecond precision. @@ -353,7 +353,7 @@ Then, run: cd driver && ./sfprocessor -log=quiet -config=../plugins/actions/example/pipeline.actions.json ../resources/traces/tcp.sf ``` -#### Building the plugin for release +#### Plugin builder To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. From fe7c6739218ea021b42c969d5343eae5c5dea46a Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Tue, 22 Feb 2022 08:49:54 -0500 Subject: [PATCH 12/15] refactor(docs): updated Go version required Signed-off-by: Frederico Araujo --- docs/BUILD.md | 4 ++-- docs/PLUGINS.md | 4 ++++ plugins/actions/example/README.md | 10 +++++++--- plugins/handlers/printer/README.md | 10 +++++++--- plugins/processors/example/README.md | 10 +++++++--- 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/docs/BUILD.md b/docs/BUILD.md index ddd9f94a..add50f92 100644 --- a/docs/BUILD.md +++ b/docs/BUILD.md @@ -8,11 +8,11 @@ Custom plugins and drivers can be implemented as dynamic libraries to tailor ana The endpoint of a pipeline configuration is an exporter plugin that sends the processed data to a target. The processor supports various types of export plugins for a variety of different targets. -## Prerequisites +## Pre-requisites The processor has been tested on Ubuntu/RHEL distributions, but should work on any Linux system. -- Golang version 1.14+ and make (if building from sources) +- Golang version 1.17+ and make (if building from sources) - Docker, docker-compose (if building with docker) ## Build diff --git a/docs/PLUGINS.md b/docs/PLUGINS.md index 9e6b592f..d6ecdb73 100644 --- a/docs/PLUGINS.md +++ b/docs/PLUGINS.md @@ -9,6 +9,10 @@ The processor supports four types of plugins: * **handlers**: enable the creation of custom SysFlow record handling plugins. * **actions**: enable the creation of custom action plugins to extend sf-processor's policy engine. +## Pre-requisites + +* Go 1.17 (if building locally, without the plugin builder) + ### Processor Plugins User-defined plugins can be plugged and extend the sf-processor pipeline. These are the most generic type of plugins, from which all built-in processor plugins are build. Check the `core` package for examples. We have built-in processor plugins for flattening the telemetry stream, implementing a policy engine, and creating event exporters. diff --git a/plugins/actions/example/README.md b/plugins/actions/example/README.md index 87d1cba4..574463e1 100644 --- a/plugins/actions/example/README.md +++ b/plugins/actions/example/README.md @@ -2,7 +2,7 @@ User-defined actions can be plugged to SysFlow's Policy Engine rule declarations to perform additional processing on matched records. -## How do action plugins work? +## Interface Actions are implemented via the golang plugin mechanism. An action must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-processor/core/policyengine/engine` package. @@ -21,7 +21,11 @@ Actions have a name and an action function. Within a single policy engine instan The action function receives the current record as an argument and thus has access to all record attributes. The action result can be stored in the record context via the context modifier methods. -## How to run this example? +## Pre-requisites + +* Go 1.17 (if building locally, without the plugin builder) + +## Build The `now` action is a pluggable action that creates a tag containing the current time in nanosecond precision. @@ -37,7 +41,7 @@ Then, run: cd driver && ./sfprocessor -log=quiet -config=../plugins/actions/example/pipeline.actions.json ../resources/traces/tcp.sf ``` -## Building the plugin for release +## Plugin builder To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. diff --git a/plugins/handlers/printer/README.md b/plugins/handlers/printer/README.md index cde27857..2179028f 100644 --- a/plugins/handlers/printer/README.md +++ b/plugins/handlers/printer/README.md @@ -2,7 +2,7 @@ User-defined handler modules can be plugged to the built-in SysFlow `processor` plugin to implement custom data processing and analytic pipelines. -## How do handler plugin work? +## Interface Handlers are implemented via the golang plugin mechanism. A handler must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-apis/go/plugins` package. @@ -30,7 +30,11 @@ type SFHandler interface { Each `Handle*` function receives the current SysFlow record being processed along with its corresponding parsed record type. Custom processing code should be implemented using these functions. -## How to run this example? +## Pre-requisites + +* Go 1.17 (if building locally, without the plugin builder) + +## Build The `printer` handler is a pluggable handler that logs select SysFlow records to the standard output. This plugin doesn't define any output channels, so it acts as a plugin sink (last plugin in a pipeline). @@ -46,7 +50,7 @@ Then, run: cd driver && ./sfprocessor -log=info -config=../plugins/handlers/printer/pipeline.printer.json ../resources/traces/tcp.sf ``` -## Building the plugin for release +## Plugin builder To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. diff --git a/plugins/processors/example/README.md b/plugins/processors/example/README.md index 881aadfd..f39c182d 100644 --- a/plugins/processors/example/README.md +++ b/plugins/processors/example/README.md @@ -2,7 +2,7 @@ User-defined plugins can be plugged and extend the sf-processor pipeline. These are the most generic type of plugins, from which all built-in processor plugins are build. Check the `core` package for examples. We have built-in processor plugins for flattening the telemetry stream, implementing a policy engine, and creating event exporters. -## How do data processing plugins work? +## Interface Processor plugins (or just plugins) are implemented via the golang plugin mechanism. A plugin must implement the following interface, defined in the `github.com/sysflow-telemetry/sf-apis/go/plugins` package. @@ -30,7 +30,11 @@ type SFTestableProcessor interface { } ``` -## How to run this example? +## Pre-requisites + +* Go 1.17 (if building locally, without the plugin builder) + +## Build The `example` plugin is a custom plugin that illustrates how to implement a minimal plugin that reads the records from the input channel and logs them to the standard output. @@ -46,7 +50,7 @@ Then, run: cd driver && ./sfprocessor -log=info -config=../plugins/processors/example/pipeline.example.json ../resources/traces/tcp.sf ``` -## Building the plugin for release +## Plugin builder To build the plugin for release, Go requires the code to be compiled with the exact package versions that the SysFlow processor was compiled with. The easiest way to achieve this is to use the pre-built `plugin-builder` Docker image in your build. This option also works for building plugins for deployment with the SysFlow binary packages. From 578f8393c66b19f4c6b02bcba85149e2b84aa32d Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Tue, 22 Feb 2022 12:01:42 -0500 Subject: [PATCH 13/15] chore(changelog): updated changelog Signed-off-by: Frederico Araujo --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23909bf1..af53c355 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). - Packaging in deb, rpm, and targz formats - Added 14 new MITRE TTP tagging rules - Added support for quiet logging mode +- Added plugin builder image to support plugin development and releases ### Changed From 110b9a00da4b2645452c635e289780996b7e69be Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Tue, 22 Feb 2022 12:57:16 -0500 Subject: [PATCH 14/15] refactor(docs): refactored TOC Signed-off-by: Frederico Araujo --- docs/PLUGINS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/PLUGINS.md b/docs/PLUGINS.md index d6ecdb73..e28f9fd1 100644 --- a/docs/PLUGINS.md +++ b/docs/PLUGINS.md @@ -9,7 +9,7 @@ The processor supports four types of plugins: * **handlers**: enable the creation of custom SysFlow record handling plugins. * **actions**: enable the creation of custom action plugins to extend sf-processor's policy engine. -## Pre-requisites +### Pre-requisites * Go 1.17 (if building locally, without the plugin builder) From 3927b89d514018fcb5f26b8e38ef4339b0ea465e Mon Sep 17 00:00:00 2001 From: Frederico Araujo Date: Tue, 22 Feb 2022 13:16:07 -0500 Subject: [PATCH 15/15] refactor(docs): fixed typo in plugin name Signed-off-by: Frederico Araujo --- docs/PLUGINS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/PLUGINS.md b/docs/PLUGINS.md index e28f9fd1..b124b3eb 100644 --- a/docs/PLUGINS.md +++ b/docs/PLUGINS.md @@ -4,7 +4,7 @@ In addition to its core plugins, the processor also supports custom plugins that The processor supports four types of plugins: -* **sources**: enable the ingestion of different telemetry sources into the processor pipeline. +* **drivers**: enable the ingestion of different telemetry sources into the processor pipeline. * **processors**: enable the creation of custom data processing and analytic plugins to extend sf-processor pipelines. * **handlers**: enable the creation of custom SysFlow record handling plugins. * **actions**: enable the creation of custom action plugins to extend sf-processor's policy engine.