Update dependencies
This commit is contained in:
		
							
								
								
									
										44
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								go.mod
									
									
									
									
									
								
							| @ -6,41 +6,41 @@ require ( | ||||
| 	github.com/TwinProduction/gocache v1.2.3 | ||||
| 	github.com/TwinProduction/health v1.0.0 | ||||
| 	github.com/beorn7/perks v1.0.1 // indirect | ||||
| 	github.com/cespare/xxhash/v2 v2.1.1 // indirect | ||||
| 	github.com/go-ping/ping v0.0.0-20201115131931-3300c582a663 | ||||
| 	github.com/cespare/xxhash/v2 v2.1.2 // indirect | ||||
| 	github.com/go-ping/ping v0.0.0-20210911151512-381826476871 | ||||
| 	github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect | ||||
| 	github.com/golang/protobuf v1.4.3 // indirect | ||||
| 	github.com/google/go-cmp v0.5.4 // indirect | ||||
| 	github.com/golang/protobuf v1.5.2 // indirect | ||||
| 	github.com/google/uuid v1.3.0 // indirect | ||||
| 	github.com/gorilla/mux v1.8.0 | ||||
| 	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect | ||||
| 	github.com/lib/pq v1.10.3 | ||||
| 	github.com/mattn/go-isatty v0.0.12 // indirect | ||||
| 	github.com/mattn/go-isatty v0.0.14 // indirect | ||||
| 	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect | ||||
| 	github.com/miekg/dns v1.1.35 | ||||
| 	github.com/prometheus/client_golang v1.9.0 | ||||
| 	github.com/miekg/dns v1.1.43 | ||||
| 	github.com/prometheus/client_golang v1.11.0 | ||||
| 	github.com/prometheus/client_model v0.2.0 // indirect | ||||
| 	github.com/prometheus/common v0.15.0 // indirect | ||||
| 	github.com/prometheus/procfs v0.2.0 // indirect | ||||
| 	github.com/prometheus/common v0.31.1 // indirect | ||||
| 	github.com/prometheus/procfs v0.7.3 // indirect | ||||
| 	github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect | ||||
| 	github.com/wcharczuk/go-chart/v2 v2.1.0 | ||||
| 	go.etcd.io/bbolt v1.3.5 // indirect | ||||
| 	golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad // indirect | ||||
| 	go.etcd.io/bbolt v1.3.6 // indirect | ||||
| 	golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d // indirect | ||||
| 	golang.org/x/mod v0.4.0 // indirect | ||||
| 	golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect | ||||
| 	golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c // indirect | ||||
| 	golang.org/x/tools v0.0.0-20201208233053-a543418bbed2 // indirect | ||||
| 	golang.org/x/mod v0.5.1 // indirect | ||||
| 	golang.org/x/net v0.0.0-20210929193557-e81a3d93ecf6 // indirect | ||||
| 	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect | ||||
| 	golang.org/x/sys v0.0.0-20211003122950-b1ebd4e1001c // indirect | ||||
| 	golang.org/x/tools v0.1.7 // indirect | ||||
| 	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect | ||||
| 	google.golang.org/protobuf v1.25.0 // indirect | ||||
| 	google.golang.org/protobuf v1.27.1 // indirect | ||||
| 	gopkg.in/yaml.v2 v2.4.0 | ||||
| 	lukechampine.com/uint128 v1.1.1 // indirect | ||||
| 	modernc.org/cc/v3 v3.33.6 // indirect | ||||
| 	modernc.org/ccgo/v3 v3.9.5 // indirect | ||||
| 	modernc.org/libc v1.9.11 // indirect | ||||
| 	modernc.org/mathutil v1.4.0 // indirect | ||||
| 	modernc.org/memory v1.0.4 // indirect | ||||
| 	modernc.org/cc/v3 v3.35.8 // indirect | ||||
| 	modernc.org/ccgo/v3 v3.12.16 // indirect | ||||
| 	modernc.org/libc v1.11.22 // indirect | ||||
| 	modernc.org/mathutil v1.4.1 // indirect | ||||
| 	modernc.org/memory v1.0.5 // indirect | ||||
| 	modernc.org/opt v0.1.1 // indirect | ||||
| 	modernc.org/sqlite v1.11.2 | ||||
| 	modernc.org/sqlite v1.13.1 | ||||
| 	modernc.org/strutil v1.1.1 // indirect | ||||
| 	modernc.org/token v1.0.0 // indirect | ||||
| ) | ||||
|  | ||||
							
								
								
									
										579
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										579
									
								
								go.sum
									
									
									
									
									
								
							| @ -1,91 +1,103 @@ | ||||
| cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= | ||||
| cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= | ||||
| cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= | ||||
| cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= | ||||
| cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= | ||||
| cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= | ||||
| cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= | ||||
| cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= | ||||
| cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= | ||||
| cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= | ||||
| cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= | ||||
| cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= | ||||
| cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= | ||||
| cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= | ||||
| cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= | ||||
| cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= | ||||
| cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= | ||||
| cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= | ||||
| cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= | ||||
| cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= | ||||
| cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= | ||||
| cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= | ||||
| cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= | ||||
| cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= | ||||
| cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= | ||||
| cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= | ||||
| cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= | ||||
| cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= | ||||
| cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= | ||||
| cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= | ||||
| cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= | ||||
| cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= | ||||
| dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= | ||||
| github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | ||||
| github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= | ||||
| github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= | ||||
| github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= | ||||
| github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= | ||||
| github.com/TwinProduction/gocache v1.2.3 h1:4wFNih4CemUX+A99Gk/EsaU0SXSNZV42Ve77v7/7ToY= | ||||
| github.com/TwinProduction/gocache v1.2.3/go.mod h1:Yj2daITit8TTBgiOpc26XCDSbg9xcFskUilHj9u3Mh8= | ||||
| github.com/TwinProduction/health v1.0.0 h1:TVyYTAORQQZ8LaptX8jCHZRCGCAO6e+oJx19BUIzQYY= | ||||
| github.com/TwinProduction/health v1.0.0/go.mod h1:ys4mYKUeEfYrWmkm60xLtPjTuLIEDQNBZaTZvenLG1c= | ||||
| github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= | ||||
| github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= | ||||
| 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/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= | ||||
| github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= | ||||
| github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= | ||||
| github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= | ||||
| github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= | ||||
| github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= | ||||
| github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= | ||||
| github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= | ||||
| github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= | ||||
| github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= | ||||
| 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 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= | ||||
| 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/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= | ||||
| github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= | ||||
| github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= | ||||
| github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= | ||||
| github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= | ||||
| github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= | ||||
| 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/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= | ||||
| github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= | ||||
| github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= | ||||
| github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= | ||||
| github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= | ||||
| github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= | ||||
| github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= | ||||
| github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | ||||
| github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/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/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= | ||||
| github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= | ||||
| github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= | ||||
| github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= | ||||
| github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= | ||||
| github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= | ||||
| github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= | ||||
| github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= | ||||
| github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= | ||||
| github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= | ||||
| github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= | ||||
| 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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= | ||||
| github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= | ||||
| github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= | ||||
| github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= | ||||
| 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/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | ||||
| github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= | ||||
| github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= | ||||
| github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= | ||||
| github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | ||||
| github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | ||||
| github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= | ||||
| github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= | ||||
| 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-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= | ||||
| github.com/go-ping/ping v0.0.0-20201115131931-3300c582a663 h1:jI2GiiRh+pPbey52EVmbU6kuLiXqwy4CXZ4gwUBj8Y0= | ||||
| github.com/go-ping/ping v0.0.0-20201115131931-3300c582a663/go.mod h1:35JbSyV/BYqHwwRA6Zr1uVDm1637YlNOU61wI797NPI= | ||||
| github.com/go-ping/ping v0.0.0-20210911151512-381826476871 h1:wtjTfjwAR/BYYMJ+QOLI/3J/qGEI0fgrkZvgsEWK2/Q= | ||||
| github.com/go-ping/ping v0.0.0-20210911151512-381826476871/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk= | ||||
| github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= | ||||
| github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= | ||||
| github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | ||||
| github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= | ||||
| github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | ||||
| github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | ||||
| github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= | ||||
| github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= | ||||
| github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= | ||||
| github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= | ||||
| github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | ||||
| github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | ||||
| github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | ||||
| github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | ||||
| github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | ||||
| github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | ||||
| github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= | ||||
| github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= | ||||
| github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= | ||||
| github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= | ||||
| github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= | ||||
| github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||
| github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||
| github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||
| github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= | ||||
| github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= | ||||
| github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= | ||||
| github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= | ||||
| github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= | ||||
| github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= | ||||
| @ -93,69 +105,55 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W | ||||
| 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 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= | ||||
| github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | ||||
| github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||
| github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | ||||
| github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= | ||||
| github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | ||||
| github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | ||||
| github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | ||||
| github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= | ||||
| github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= | ||||
| github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= | ||||
| github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||
| github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||
| github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||
| github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||
| github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||
| github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= | ||||
| github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||
| github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= | ||||
| github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||
| github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||||
| github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | ||||
| github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= | ||||
| github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | ||||
| github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | ||||
| github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | ||||
| github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | ||||
| github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | ||||
| github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | ||||
| github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | ||||
| github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= | ||||
| github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||||
| github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= | ||||
| github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= | ||||
| github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= | ||||
| github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= | ||||
| github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= | ||||
| github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= | ||||
| github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= | ||||
| github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= | ||||
| github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= | ||||
| 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.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= | ||||
| github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= | ||||
| github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= | ||||
| github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= | ||||
| github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= | ||||
| github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= | ||||
| github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= | ||||
| github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= | ||||
| github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= | ||||
| github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= | ||||
| github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= | ||||
| github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= | ||||
| github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= | ||||
| github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= | ||||
| github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= | ||||
| github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | ||||
| github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | ||||
| github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= | ||||
| github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= | ||||
| github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= | ||||
| github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= | ||||
| github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= | ||||
| github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= | ||||
| github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= | ||||
| github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= | ||||
| github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= | ||||
| github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= | ||||
| github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= | ||||
| github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= | ||||
| 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.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= | ||||
| github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= | ||||
| github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= | ||||
| github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= | ||||
| 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/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= | ||||
| github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= | ||||
| github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= | ||||
| github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= | ||||
| github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= | ||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||
| @ -167,161 +165,98 @@ 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/lib/pq v1.10.3 h1:v9QZf2Sn6AmjXtQeFpdoq/eaNtYP6IN+7lcrygsIAtg= | ||||
| github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= | ||||
| github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= | ||||
| github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= | ||||
| github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= | ||||
| github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= | ||||
| github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= | ||||
| github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= | ||||
| github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= | ||||
| github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= | ||||
| github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= | ||||
| github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= | ||||
| github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= | ||||
| github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= | ||||
| github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= | ||||
| github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxzIU= | ||||
| github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= | ||||
| github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= | ||||
| github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= | ||||
| github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= | ||||
| github.com/miekg/dns v1.1.35 h1:oTfOaDH+mZkdcgdIjH6yBajRGtIwcwcaR+rt23ZSrJs= | ||||
| github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= | ||||
| github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= | ||||
| github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | ||||
| github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= | ||||
| github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= | ||||
| github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= | ||||
| github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= | ||||
| github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= | ||||
| github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= | ||||
| github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= | ||||
| 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/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | ||||
| github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | ||||
| github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= | ||||
| github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= | ||||
| github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= | ||||
| github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= | ||||
| github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= | ||||
| github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= | ||||
| github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= | ||||
| github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= | ||||
| github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= | ||||
| github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= | ||||
| github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= | ||||
| github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= | ||||
| github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= | ||||
| github.com/onsi/gomega v1.4.3/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.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= | ||||
| github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= | ||||
| github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= | ||||
| github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= | ||||
| github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= | ||||
| github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= | ||||
| github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= | ||||
| github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= | ||||
| github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= | ||||
| github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= | ||||
| github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= | ||||
| github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= | ||||
| github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= | ||||
| github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= | ||||
| github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= | ||||
| github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= | ||||
| github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= | ||||
| github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||
| github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||
| github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||
| github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= | ||||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= | ||||
| github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= | ||||
| github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= | ||||
| github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= | ||||
| github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= | ||||
| github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= | ||||
| github.com/prometheus/client_golang v1.9.0 h1:Rrch9mh17XcxvEu9D9DEpb4isxjGBtcevQjKvxPRQIU= | ||||
| github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= | ||||
| github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= | ||||
| github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= | ||||
| github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= | ||||
| github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/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.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= | ||||
| github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= | ||||
| github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= | ||||
| github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= | ||||
| github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= | ||||
| github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= | ||||
| github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= | ||||
| github.com/prometheus/common v0.15.0 h1:4fgOnadei3EZvgRwxJ7RMpG1k1pOZth5Pc13tyspaKM= | ||||
| github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= | ||||
| github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= | ||||
| github.com/prometheus/common v0.31.1 h1:d18hG4PkHnNAKNMOmFuXFaiY8Us0nird/2m60uS1AMs= | ||||
| github.com/prometheus/common v0.31.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= | ||||
| github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= | ||||
| github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= | ||||
| github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= | ||||
| 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 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= | ||||
| github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | ||||
| github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= | ||||
| github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= | ||||
| github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= | ||||
| github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= | ||||
| github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= | ||||
| github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= | ||||
| github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= | ||||
| github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= | ||||
| github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= | ||||
| github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= | ||||
| github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= | ||||
| github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= | ||||
| github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= | ||||
| github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= | ||||
| github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= | ||||
| github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= | ||||
| github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | ||||
| github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | ||||
| github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= | ||||
| github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= | ||||
| github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= | ||||
| github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | ||||
| github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= | ||||
| github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= | ||||
| github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= | ||||
| 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/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | ||||
| github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||||
| github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= | ||||
| github.com/tidwall/redcon v1.3.2/go.mod h1:bdYBm4rlcWpst2XMwKVzWDF9CoUxEbUmM7CQrKeOZas= | ||||
| github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | ||||
| 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/wcharczuk/go-chart/v2 v2.1.0 h1:tY2slqVQ6bN+yHSnDYwZebLQFkphK4WNrVwnt7CJZ2I= | ||||
| github.com/wcharczuk/go-chart/v2 v2.1.0/go.mod h1:yx7MvAVNcP/kN9lKXM/NTce4au4DFN99j6i1OwDclNA= | ||||
| github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= | ||||
| github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= | ||||
| go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= | ||||
| github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= | ||||
| go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= | ||||
| go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= | ||||
| go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= | ||||
| go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= | ||||
| go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= | ||||
| go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= | ||||
| 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.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= | ||||
| go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= | ||||
| go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= | ||||
| go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= | ||||
| go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= | ||||
| go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= | ||||
| go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= | ||||
| go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | ||||
| go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | ||||
| golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | ||||
| golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | ||||
| golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||||
| golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||
| golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||
| golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||
| golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||
| golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
| golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= | ||||
| golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= | ||||
| golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
| golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
| golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= | ||||
| golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= | ||||
| golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= | ||||
| golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= | ||||
| golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= | ||||
| golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= | ||||
| golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= | ||||
| golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= | ||||
| golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= | ||||
| golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= | ||||
| golang.org/x/image v0.0.0-20200927104501-e162460cd6b5/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= | ||||
| golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs= | ||||
| golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= | ||||
| @ -329,129 +264,250 @@ golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTk | ||||
| 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.0 h1:8pl+sMODzuvGJkmj2W4kZihvVb5mKm8pB/X44PIQHv8= | ||||
| golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38= | ||||
| golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= | ||||
| 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-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||
| golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||
| golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||
| golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||
| golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= | ||||
| golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/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-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20190923162816-aa69164e4478/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-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | ||||
| golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | ||||
| golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | ||||
| golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | ||||
| golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
| golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw= | ||||
| 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-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= | ||||
| golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20210929193557-e81a3d93ecf6 h1:Z04ewVs7JhXaYkmDhBERPi41gnltfQpMWDnTnQbaCqk= | ||||
| golang.org/x/net v0.0.0-20210929193557-e81a3d93ecf6/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/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||
| golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= | ||||
| golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= | ||||
| 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-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-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-20190924154521-2837fb4f24fe/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-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-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-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/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-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= | ||||
| golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= | ||||
| golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20211003122950-b1ebd4e1001c h1:EyJTLQbOxvk8V6oDdD8ILR1BOs3nEJXThD6aqsiPNkM= | ||||
| golang.org/x/sys v0.0.0-20211003122950-b1ebd4e1001c/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.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| 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/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= | ||||
| golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||
| golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||
| golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||
| golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||||
| golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | ||||
| golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | ||||
| golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= | ||||
| golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | ||||
| golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | ||||
| golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | ||||
| golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-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-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= | ||||
| golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= | ||||
| golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= | ||||
| golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||
| golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||
| golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||
| golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||
| golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= | ||||
| golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= | ||||
| golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= | ||||
| golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/tools v0.0.0-20201208233053-a543418bbed2 h1:vEtypaVub6UvKkiXZ2xx9QIvp9TL7sI7xp7vdi2kezA= | ||||
| golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/tools v0.1.7 h1:6j8CgantCy3yc8JGBqkDLMKWqZ0RDU2g1HVgacojGWQ= | ||||
| golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= | ||||
| golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= | ||||
| golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= | ||||
| google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= | ||||
| google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= | ||||
| google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= | ||||
| google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= | ||||
| google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= | ||||
| google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= | ||||
| google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= | ||||
| google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= | ||||
| google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= | ||||
| google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= | ||||
| google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= | ||||
| google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= | ||||
| google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= | ||||
| google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= | ||||
| google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= | ||||
| google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= | ||||
| google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | ||||
| google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | ||||
| google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | ||||
| google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | ||||
| google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= | ||||
| google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= | ||||
| google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= | ||||
| google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= | ||||
| google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | ||||
| google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | ||||
| google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | ||||
| google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= | ||||
| google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | ||||
| google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= | ||||
| google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= | ||||
| google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= | ||||
| google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= | ||||
| google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= | ||||
| google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= | ||||
| google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= | ||||
| google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= | ||||
| google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= | ||||
| google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= | ||||
| google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= | ||||
| google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= | ||||
| google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= | ||||
| google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= | ||||
| google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= | ||||
| google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= | ||||
| 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.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= | ||||
| 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.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= | ||||
| google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= | ||||
| google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= | ||||
| google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= | ||||
| google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= | ||||
| google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= | ||||
| google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | ||||
| google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | ||||
| google.golang.org/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= | ||||
| @ -460,21 +516,20 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi | ||||
| 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.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= | ||||
| 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 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= | ||||
| google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= | ||||
| gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/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/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/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= | ||||
| gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= | ||||
| 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.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||
| @ -482,39 +537,73 @@ gopkg.in/yaml.v2 v2.2.5/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 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= | ||||
| gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | ||||
| honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||
| honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||
| honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||
| honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||
| honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||
| honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= | ||||
| honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= | ||||
| honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= | ||||
| lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU= | ||||
| lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= | ||||
| modernc.org/cc/v3 v3.33.6 h1:r63dgSzVzRxUpAJFPQWHy1QeZeY1ydNENUDaBx1GqYc= | ||||
| modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= | ||||
| modernc.org/ccgo/v3 v3.9.5 h1:dEuUSf8WN51rDkprFuAqjfchKEzN0WttP/Py3enBwjk= | ||||
| modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= | ||||
| modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= | ||||
| modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= | ||||
| modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= | ||||
| modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= | ||||
| modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= | ||||
| modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= | ||||
| modernc.org/cc/v3 v3.35.8 h1:jJydTMwMwOdv78Ij8hZVTS2uLP8LroN0ey0r+dwFMJg= | ||||
| modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= | ||||
| modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60= | ||||
| modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw= | ||||
| modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI= | ||||
| modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag= | ||||
| modernc.org/ccgo/v3 v3.11.2/go.mod h1:6kii3AptTDI+nUrM9RFBoIEUEisSWCbdczD9ZwQH2FE= | ||||
| modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw= | ||||
| modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ= | ||||
| modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c= | ||||
| modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo= | ||||
| modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg= | ||||
| modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I= | ||||
| modernc.org/ccgo/v3 v3.12.16 h1:UTOh3qwbtGTT2bAPkU3y05xyj4haNiRuzs/QqIspjhw= | ||||
| modernc.org/ccgo/v3 v3.12.16/go.mod h1:4Irvb6s9pzGIjrtVfvDDgoAQAH/L7KpHjgTYvcAMXV0= | ||||
| modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= | ||||
| modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= | ||||
| modernc.org/libc v1.7.13-0.20210308123627-12f642a52bb8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= | ||||
| modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= | ||||
| modernc.org/libc v1.9.11 h1:QUxZMs48Ahg2F7SN41aERvMfGLY2HU/ADnB9DC4Yts8= | ||||
| modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q= | ||||
| modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg= | ||||
| modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M= | ||||
| modernc.org/libc v1.11.3/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU= | ||||
| modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU= | ||||
| modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE= | ||||
| modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso= | ||||
| modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8= | ||||
| modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8= | ||||
| modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I= | ||||
| modernc.org/libc v1.11.22 h1:u2ek1qgzki0RUDI2kW3EC9VKHP9LXKxKnoQLZmIeCbA= | ||||
| modernc.org/libc v1.11.22/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk= | ||||
| modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= | ||||
| modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= | ||||
| modernc.org/mathutil v1.4.0 h1:GCjoRaBew8ECCKINQA2nYjzvufFW9YiEuuB+rQ9bn2E= | ||||
| modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= | ||||
| modernc.org/memory v1.0.4 h1:utMBrFcpnQDdNsmM6asmyH/FM9TqLPS7XF7otpJmrwM= | ||||
| modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8= | ||||
| modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= | ||||
| modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc= | ||||
| modernc.org/memory v1.0.5 h1:XRch8trV7GgvTec2i7jc33YlUI0RKVDBvZ5eZ5m8y14= | ||||
| modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM= | ||||
| modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A= | ||||
| modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= | ||||
| modernc.org/sqlite v1.11.2 h1:ShWQpeD3ag/bmx6TqidBlIWonWmQaSQKls3aenCbt+w= | ||||
| modernc.org/sqlite v1.11.2/go.mod h1:+mhs/P1ONd+6G7hcAs6irwDi/bjTQ7nLW6LHRBsEa3A= | ||||
| modernc.org/sqlite v1.13.1 h1:s/qk6VTTVyQIyhVNWa50whBBcI3+2oREbx85t227iOo= | ||||
| modernc.org/sqlite v1.13.1/go.mod h1:2qO/6jZJrcQaxFUHxOwa6Q6WfiGSsiVj6GXX0Ker+Jg= | ||||
| modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= | ||||
| modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= | ||||
| modernc.org/tcl v1.5.5 h1:N03RwthgTR/l/eQvz3UjfYnvVVj1G2sZqzFGfoD4HE4= | ||||
| modernc.org/tcl v1.5.5/go.mod h1:ADkaTUuwukkrlhqwERyq0SM8OvyXo7+TjFz7yAF56EI= | ||||
| modernc.org/tcl v1.5.9 h1:DZMfR+RDJRhcrmMEMTJgVIX+Wf5qhfVX0llI0rsc20w= | ||||
| modernc.org/tcl v1.5.9/go.mod h1:bcwjvBJ2u0exY6K35eAmxXBBij5kXb1dHlAWmfhqThE= | ||||
| modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk= | ||||
| modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= | ||||
| modernc.org/z v1.0.1 h1:WyIDpEpAIx4Hel6q/Pcgj/VhaQV5XPJ2I6ryIYbjnpc= | ||||
| modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA= | ||||
| sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= | ||||
| sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= | ||||
| modernc.org/z v1.1.2 h1:IjjzDsIFbl0wuF2KfwvdyUAJVwxD4iwZ6akLNiDoClM= | ||||
| modernc.org/z v1.1.2/go.mod h1:sj9T1AGBG0dm6SCVzldPOHWrif6XBpooJtbttMn1+Js= | ||||
| 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= | ||||
|  | ||||
							
								
								
									
										8
									
								
								vendor/github.com/cespare/xxhash/v2/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/cespare/xxhash/v2/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,8 +0,0 @@ | ||||
| language: go | ||||
| go: | ||||
|   - "1.x" | ||||
|   - master | ||||
| env: | ||||
|   - TAGS="" | ||||
|   - TAGS="-tags purego" | ||||
| script: go test $TAGS -v ./... | ||||
							
								
								
									
										6
									
								
								vendor/github.com/cespare/xxhash/v2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/cespare/xxhash/v2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,7 +1,7 @@ | ||||
| # xxhash | ||||
|  | ||||
| [](https://godoc.org/github.com/cespare/xxhash) | ||||
| [](https://travis-ci.org/cespare/xxhash) | ||||
| [](https://pkg.go.dev/github.com/cespare/xxhash/v2) | ||||
| [](https://github.com/cespare/xxhash/actions/workflows/test.yml) | ||||
|  | ||||
| xxhash is a Go implementation of the 64-bit | ||||
| [xxHash](http://cyan4973.github.io/xxHash/) algorithm, XXH64. This is a | ||||
| @ -64,4 +64,6 @@ $ go test -benchtime 10s -bench '/xxhash,direct,bytes' | ||||
|  | ||||
| - [InfluxDB](https://github.com/influxdata/influxdb) | ||||
| - [Prometheus](https://github.com/prometheus/prometheus) | ||||
| - [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) | ||||
| - [FreeCache](https://github.com/coocood/freecache) | ||||
| - [FastCache](https://github.com/VictoriaMetrics/fastcache) | ||||
|  | ||||
							
								
								
									
										1
									
								
								vendor/github.com/cespare/xxhash/v2/xxhash.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/cespare/xxhash/v2/xxhash.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -193,7 +193,6 @@ func (d *Digest) UnmarshalBinary(b []byte) error { | ||||
| 	b, d.v4 = consumeUint64(b) | ||||
| 	b, d.total = consumeUint64(b) | ||||
| 	copy(d.mem[:], b) | ||||
| 	b = b[len(d.mem):] | ||||
| 	d.n = int(d.total % uint64(len(d.mem))) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
							
								
								
									
										62
									
								
								vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -6,7 +6,7 @@ | ||||
|  | ||||
| // Register allocation: | ||||
| // AX	h | ||||
| // CX	pointer to advance through b | ||||
| // SI	pointer to advance through b | ||||
| // DX	n | ||||
| // BX	loop end | ||||
| // R8	v1, k1 | ||||
| @ -16,39 +16,39 @@ | ||||
| // R12	tmp | ||||
| // R13	prime1v | ||||
| // R14	prime2v | ||||
| // R15	prime4v | ||||
| // DI	prime4v | ||||
|  | ||||
| // round reads from and advances the buffer pointer in CX. | ||||
| // round reads from and advances the buffer pointer in SI. | ||||
| // It assumes that R13 has prime1v and R14 has prime2v. | ||||
| #define round(r) \ | ||||
| 	MOVQ  (CX), R12 \ | ||||
| 	ADDQ  $8, CX    \ | ||||
| 	MOVQ  (SI), R12 \ | ||||
| 	ADDQ  $8, SI    \ | ||||
| 	IMULQ R14, R12  \ | ||||
| 	ADDQ  R12, r    \ | ||||
| 	ROLQ  $31, r    \ | ||||
| 	IMULQ R13, r | ||||
|  | ||||
| // mergeRound applies a merge round on the two registers acc and val. | ||||
| // It assumes that R13 has prime1v, R14 has prime2v, and R15 has prime4v. | ||||
| // It assumes that R13 has prime1v, R14 has prime2v, and DI has prime4v. | ||||
| #define mergeRound(acc, val) \ | ||||
| 	IMULQ R14, val \ | ||||
| 	ROLQ  $31, val \ | ||||
| 	IMULQ R13, val \ | ||||
| 	XORQ  val, acc \ | ||||
| 	IMULQ R13, acc \ | ||||
| 	ADDQ  R15, acc | ||||
| 	ADDQ  DI, acc | ||||
|  | ||||
| // func Sum64(b []byte) uint64 | ||||
| TEXT ·Sum64(SB), NOSPLIT, $0-32 | ||||
| 	// Load fixed primes. | ||||
| 	MOVQ ·prime1v(SB), R13 | ||||
| 	MOVQ ·prime2v(SB), R14 | ||||
| 	MOVQ ·prime4v(SB), R15 | ||||
| 	MOVQ ·prime4v(SB), DI | ||||
|  | ||||
| 	// Load slice. | ||||
| 	MOVQ b_base+0(FP), CX | ||||
| 	MOVQ b_base+0(FP), SI | ||||
| 	MOVQ b_len+8(FP), DX | ||||
| 	LEAQ (CX)(DX*1), BX | ||||
| 	LEAQ (SI)(DX*1), BX | ||||
|  | ||||
| 	// The first loop limit will be len(b)-32. | ||||
| 	SUBQ $32, BX | ||||
| @ -65,14 +65,14 @@ TEXT ·Sum64(SB), NOSPLIT, $0-32 | ||||
| 	XORQ R11, R11 | ||||
| 	SUBQ R13, R11 | ||||
|  | ||||
| 	// Loop until CX > BX. | ||||
| 	// Loop until SI > BX. | ||||
| blockLoop: | ||||
| 	round(R8) | ||||
| 	round(R9) | ||||
| 	round(R10) | ||||
| 	round(R11) | ||||
|  | ||||
| 	CMPQ CX, BX | ||||
| 	CMPQ SI, BX | ||||
| 	JLE  blockLoop | ||||
|  | ||||
| 	MOVQ R8, AX | ||||
| @ -100,16 +100,16 @@ noBlocks: | ||||
| afterBlocks: | ||||
| 	ADDQ DX, AX | ||||
|  | ||||
| 	// Right now BX has len(b)-32, and we want to loop until CX > len(b)-8. | ||||
| 	// Right now BX has len(b)-32, and we want to loop until SI > len(b)-8. | ||||
| 	ADDQ $24, BX | ||||
|  | ||||
| 	CMPQ CX, BX | ||||
| 	CMPQ SI, BX | ||||
| 	JG   fourByte | ||||
|  | ||||
| wordLoop: | ||||
| 	// Calculate k1. | ||||
| 	MOVQ  (CX), R8 | ||||
| 	ADDQ  $8, CX | ||||
| 	MOVQ  (SI), R8 | ||||
| 	ADDQ  $8, SI | ||||
| 	IMULQ R14, R8 | ||||
| 	ROLQ  $31, R8 | ||||
| 	IMULQ R13, R8 | ||||
| @ -117,18 +117,18 @@ wordLoop: | ||||
| 	XORQ  R8, AX | ||||
| 	ROLQ  $27, AX | ||||
| 	IMULQ R13, AX | ||||
| 	ADDQ  R15, AX | ||||
| 	ADDQ  DI, AX | ||||
|  | ||||
| 	CMPQ CX, BX | ||||
| 	CMPQ SI, BX | ||||
| 	JLE  wordLoop | ||||
|  | ||||
| fourByte: | ||||
| 	ADDQ $4, BX | ||||
| 	CMPQ CX, BX | ||||
| 	CMPQ SI, BX | ||||
| 	JG   singles | ||||
|  | ||||
| 	MOVL  (CX), R8 | ||||
| 	ADDQ  $4, CX | ||||
| 	MOVL  (SI), R8 | ||||
| 	ADDQ  $4, SI | ||||
| 	IMULQ R13, R8 | ||||
| 	XORQ  R8, AX | ||||
|  | ||||
| @ -138,19 +138,19 @@ fourByte: | ||||
|  | ||||
| singles: | ||||
| 	ADDQ $4, BX | ||||
| 	CMPQ CX, BX | ||||
| 	CMPQ SI, BX | ||||
| 	JGE  finalize | ||||
|  | ||||
| singlesLoop: | ||||
| 	MOVBQZX (CX), R12 | ||||
| 	ADDQ    $1, CX | ||||
| 	MOVBQZX (SI), R12 | ||||
| 	ADDQ    $1, SI | ||||
| 	IMULQ   ·prime5v(SB), R12 | ||||
| 	XORQ    R12, AX | ||||
|  | ||||
| 	ROLQ  $11, AX | ||||
| 	IMULQ R13, AX | ||||
|  | ||||
| 	CMPQ CX, BX | ||||
| 	CMPQ SI, BX | ||||
| 	JL   singlesLoop | ||||
|  | ||||
| finalize: | ||||
| @ -179,9 +179,9 @@ TEXT ·writeBlocks(SB), NOSPLIT, $0-40 | ||||
| 	MOVQ ·prime2v(SB), R14 | ||||
|  | ||||
| 	// Load slice. | ||||
| 	MOVQ b_base+8(FP), CX | ||||
| 	MOVQ b_base+8(FP), SI | ||||
| 	MOVQ b_len+16(FP), DX | ||||
| 	LEAQ (CX)(DX*1), BX | ||||
| 	LEAQ (SI)(DX*1), BX | ||||
| 	SUBQ $32, BX | ||||
|  | ||||
| 	// Load vN from d. | ||||
| @ -199,7 +199,7 @@ blockLoop: | ||||
| 	round(R10) | ||||
| 	round(R11) | ||||
|  | ||||
| 	CMPQ CX, BX | ||||
| 	CMPQ SI, BX | ||||
| 	JLE  blockLoop | ||||
|  | ||||
| 	// Copy vN back to d. | ||||
| @ -208,8 +208,8 @@ blockLoop: | ||||
| 	MOVQ R10, 16(AX) | ||||
| 	MOVQ R11, 24(AX) | ||||
|  | ||||
| 	// The number of bytes written is CX minus the old base pointer. | ||||
| 	SUBQ b_base+8(FP), CX | ||||
| 	MOVQ CX, ret+32(FP) | ||||
| 	// The number of bytes written is SI minus the old base pointer. | ||||
| 	SUBQ b_base+8(FP), SI | ||||
| 	MOVQ SI, ret+32(FP) | ||||
|  | ||||
| 	RET | ||||
|  | ||||
							
								
								
									
										55
									
								
								vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										55
									
								
								vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -6,41 +6,52 @@ | ||||
| package xxhash | ||||
|  | ||||
| import ( | ||||
| 	"reflect" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| // Notes: | ||||
| // | ||||
| // See https://groups.google.com/d/msg/golang-nuts/dcjzJy-bSpw/tcZYBzQqAQAJ | ||||
| // for some discussion about these unsafe conversions. | ||||
| // | ||||
| // In the future it's possible that compiler optimizations will make these | ||||
| // unsafe operations unnecessary: https://golang.org/issue/2205. | ||||
| // XxxString functions unnecessary by realizing that calls such as | ||||
| // Sum64([]byte(s)) don't need to copy s. See https://golang.org/issue/2205. | ||||
| // If that happens, even if we keep these functions they can be replaced with | ||||
| // the trivial safe code. | ||||
|  | ||||
| // NOTE: The usual way of doing an unsafe string-to-[]byte conversion is: | ||||
| // | ||||
| // Both of these wrapper functions still incur function call overhead since they | ||||
| // will not be inlined. We could write Go/asm copies of Sum64 and Digest.Write | ||||
| // for strings to squeeze out a bit more speed. Mid-stack inlining should | ||||
| // eventually fix this. | ||||
| //   var b []byte | ||||
| //   bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) | ||||
| //   bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data | ||||
| //   bh.Len = len(s) | ||||
| //   bh.Cap = len(s) | ||||
| // | ||||
| // Unfortunately, as of Go 1.15.3 the inliner's cost model assigns a high enough | ||||
| // weight to this sequence of expressions that any function that uses it will | ||||
| // not be inlined. Instead, the functions below use a different unsafe | ||||
| // conversion designed to minimize the inliner weight and allow both to be | ||||
| // inlined. There is also a test (TestInlining) which verifies that these are | ||||
| // inlined. | ||||
| // | ||||
| // See https://github.com/golang/go/issues/42739 for discussion. | ||||
|  | ||||
| // Sum64String computes the 64-bit xxHash digest of s. | ||||
| // It may be faster than Sum64([]byte(s)) by avoiding a copy. | ||||
| func Sum64String(s string) uint64 { | ||||
| 	var b []byte | ||||
| 	bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) | ||||
| 	bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data | ||||
| 	bh.Len = len(s) | ||||
| 	bh.Cap = len(s) | ||||
| 	b := *(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)})) | ||||
| 	return Sum64(b) | ||||
| } | ||||
|  | ||||
| // WriteString adds more data to d. It always returns len(s), nil. | ||||
| // It may be faster than Write([]byte(s)) by avoiding a copy. | ||||
| func (d *Digest) WriteString(s string) (n int, err error) { | ||||
| 	var b []byte | ||||
| 	bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) | ||||
| 	bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data | ||||
| 	bh.Len = len(s) | ||||
| 	bh.Cap = len(s) | ||||
| 	return d.Write(b) | ||||
| 	d.Write(*(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)}))) | ||||
| 	// d.Write always returns len(s), nil. | ||||
| 	// Ignoring the return output and returning these fixed values buys a | ||||
| 	// savings of 6 in the inliner's cost model. | ||||
| 	return len(s), nil | ||||
| } | ||||
|  | ||||
| // sliceHeader is similar to reflect.SliceHeader, but it assumes that the layout | ||||
| // of the first two words is the same as the layout of a string. | ||||
| type sliceHeader struct { | ||||
| 	s   string | ||||
| 	cap int | ||||
| } | ||||
|  | ||||
							
								
								
									
										44
									
								
								vendor/github.com/go-ping/ping/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								vendor/github.com/go-ping/ping/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| # Contributing | ||||
|  | ||||
| First off, thanks for taking the time to contribute! | ||||
|  | ||||
| Remember that this is open source software so please consider the other people who will read your code. | ||||
| Make it look nice for them, document your logic in comments and add or update the unit test cases. | ||||
|  | ||||
| This library is used by various other projects, companies and individuals in live production environments so please discuss any breaking changes with us before making them. | ||||
| Feel free to join us in the #go-ping channel of the [Gophers Slack](https://invite.slack.golangbridge.org/). | ||||
|  | ||||
| ## Pull Requests | ||||
|  | ||||
| [Fork the repo on GitHub](https://github.com/go-ping/ping/fork) and clone it to your local machine. | ||||
|  | ||||
| ```bash | ||||
| git clone https://github.com/YOUR_USERNAME/ping.git && cd ping | ||||
| ``` | ||||
|  | ||||
| Here is a guide on [how to configure a remote repository](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork). | ||||
|  | ||||
| Check out a new branch, make changes, run tests, commit & sign-off, then push branch to your fork. | ||||
|  | ||||
| ```bash | ||||
| $ git checkout -b <BRANCH_NAME> | ||||
| # edit files | ||||
| $ make style vet test | ||||
| $ git add <CHANGED_FILES> | ||||
| $ git commit -s | ||||
| $ git push <FORK> <BRANCH_NAME> | ||||
| ``` | ||||
|  | ||||
| Open a [new pull request](https://github.com/go-ping/ping/compare) in the main `go-ping/ping` repository. | ||||
| Please describe the purpose of your PR and remember link it to any related issues. | ||||
|  | ||||
| *We may ask you to rebase your feature branch or squash the commits in order to keep the history clean.* | ||||
|  | ||||
| ## Development Guides | ||||
|  | ||||
| - Run `make style vet test` before committing your changes. | ||||
| - Document your logic in code comments. | ||||
| - Add tests for bug fixes and new features. | ||||
| - Use UNIX-style (LF) line endings. | ||||
| - End every file with a single blank line. | ||||
| - Use the UTF-8 character set. | ||||
							
								
								
									
										17
									
								
								vendor/github.com/go-ping/ping/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								vendor/github.com/go-ping/ping/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -17,7 +17,7 @@ err = pinger.Run() // Blocks until finished. | ||||
| if err != nil { | ||||
| 	panic(err) | ||||
| } | ||||
| stats := pinger.Statistics() // get send/receive/rtt stats | ||||
| stats := pinger.Statistics() // get send/receive/duplicate/rtt stats | ||||
| ``` | ||||
|  | ||||
| Here is an example that emulates the traditional UNIX ping command: | ||||
| @ -42,6 +42,11 @@ pinger.OnRecv = func(pkt *ping.Packet) { | ||||
| 		pkt.Nbytes, pkt.IPAddr, pkt.Seq, pkt.Rtt) | ||||
| } | ||||
|  | ||||
| pinger.OnDuplicateRecv = func(pkt *ping.Packet) { | ||||
| 	fmt.Printf("%d bytes from %s: icmp_seq=%d time=%v ttl=%v (DUP!)\n", | ||||
| 		pkt.Nbytes, pkt.IPAddr, pkt.Seq, pkt.Rtt, pkt.Ttl) | ||||
| } | ||||
|  | ||||
| pinger.OnFinish = func(stats *ping.Statistics) { | ||||
| 	fmt.Printf("\n--- %s ping statistics ---\n", stats.Addr) | ||||
| 	fmt.Printf("%d packets transmitted, %d packets received, %v%% packet loss\n", | ||||
| @ -58,8 +63,10 @@ if err != nil { | ||||
| ``` | ||||
|  | ||||
| It sends ICMP Echo Request packet(s) and waits for an Echo Reply in | ||||
| response. If it receives a response, it calls the `OnRecv` callback. | ||||
| When it's finished, it calls the `OnFinish` callback. | ||||
| response. If it receives a response, it calls the `OnRecv` callback | ||||
| unless a packet with that sequence number has already been received, | ||||
| in which case it calls the `OnDuplicateRecv` callback. When it's | ||||
| finished, it calls the `OnFinish` callback. | ||||
|  | ||||
| For a full ping example, see | ||||
| [cmd/ping/ping.go](https://github.com/go-ping/ping/blob/master/cmd/ping/ping.go). | ||||
| @ -128,3 +135,7 @@ This repo was originally in the personal account of | ||||
| For support and help, you usually find us in the #go-ping channel of | ||||
| Gophers Slack. See https://invite.slack.golangbridge.org/ for an invite | ||||
| to the Gophers Slack org. | ||||
|  | ||||
| ## Contributing | ||||
|  | ||||
| Refer to [CONTRIBUTING.md](https://github.com/go-ping/ping/blob/master/CONTRIBUTING.md) | ||||
|  | ||||
							
								
								
									
										53
									
								
								vendor/github.com/go-ping/ping/logger.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								vendor/github.com/go-ping/ping/logger.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| package ping | ||||
|  | ||||
| import "log" | ||||
|  | ||||
| type Logger interface { | ||||
| 	Fatalf(format string, v ...interface{}) | ||||
| 	Errorf(format string, v ...interface{}) | ||||
| 	Warnf(format string, v ...interface{}) | ||||
| 	Infof(format string, v ...interface{}) | ||||
| 	Debugf(format string, v ...interface{}) | ||||
| } | ||||
|  | ||||
| type StdLogger struct { | ||||
| 	Logger *log.Logger | ||||
| } | ||||
|  | ||||
| func (l StdLogger) Fatalf(format string, v ...interface{}) { | ||||
| 	l.Logger.Printf("FATAL: "+format, v...) | ||||
| } | ||||
|  | ||||
| func (l StdLogger) Errorf(format string, v ...interface{}) { | ||||
| 	l.Logger.Printf("ERROR: "+format, v...) | ||||
| } | ||||
|  | ||||
| func (l StdLogger) Warnf(format string, v ...interface{}) { | ||||
| 	l.Logger.Printf("WARN: "+format, v...) | ||||
| } | ||||
|  | ||||
| func (l StdLogger) Infof(format string, v ...interface{}) { | ||||
| 	l.Logger.Printf("INFO: "+format, v...) | ||||
| } | ||||
|  | ||||
| func (l StdLogger) Debugf(format string, v ...interface{}) { | ||||
| 	l.Logger.Printf("DEBUG: "+format, v...) | ||||
| } | ||||
|  | ||||
| type NoopLogger struct { | ||||
| } | ||||
|  | ||||
| func (l NoopLogger) Fatalf(format string, v ...interface{}) { | ||||
| } | ||||
|  | ||||
| func (l NoopLogger) Errorf(format string, v ...interface{}) { | ||||
| } | ||||
|  | ||||
| func (l NoopLogger) Warnf(format string, v ...interface{}) { | ||||
| } | ||||
|  | ||||
| func (l NoopLogger) Infof(format string, v ...interface{}) { | ||||
| } | ||||
|  | ||||
| func (l NoopLogger) Debugf(format string, v ...interface{}) { | ||||
| } | ||||
							
								
								
									
										86
									
								
								vendor/github.com/go-ping/ping/packetconn.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								vendor/github.com/go-ping/ping/packetconn.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,86 @@ | ||||
| package ping | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
| 	"runtime" | ||||
| 	"time" | ||||
|  | ||||
| 	"golang.org/x/net/icmp" | ||||
| 	"golang.org/x/net/ipv4" | ||||
| 	"golang.org/x/net/ipv6" | ||||
| ) | ||||
|  | ||||
| type packetConn interface { | ||||
| 	Close() error | ||||
| 	ICMPRequestType() icmp.Type | ||||
| 	ReadFrom(b []byte) (n int, ttl int, src net.Addr, err error) | ||||
| 	SetFlagTTL() error | ||||
| 	SetReadDeadline(t time.Time) error | ||||
| 	WriteTo(b []byte, dst net.Addr) (int, error) | ||||
| } | ||||
|  | ||||
| type icmpConn struct { | ||||
| 	c *icmp.PacketConn | ||||
| } | ||||
|  | ||||
| func (c *icmpConn) Close() error { | ||||
| 	return c.c.Close() | ||||
| } | ||||
|  | ||||
| func (c *icmpConn) SetReadDeadline(t time.Time) error { | ||||
| 	return c.c.SetReadDeadline(t) | ||||
| } | ||||
|  | ||||
| func (c *icmpConn) WriteTo(b []byte, dst net.Addr) (int, error) { | ||||
| 	return c.c.WriteTo(b, dst) | ||||
| } | ||||
|  | ||||
| type icmpv4Conn struct { | ||||
| 	icmpConn | ||||
| } | ||||
|  | ||||
| func (c *icmpv4Conn) SetFlagTTL() error { | ||||
| 	err := c.c.IPv4PacketConn().SetControlMessage(ipv4.FlagTTL, true) | ||||
| 	if runtime.GOOS == "windows" { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func (c *icmpv4Conn) ReadFrom(b []byte) (int, int, net.Addr, error) { | ||||
| 	var ttl int | ||||
| 	n, cm, src, err := c.c.IPv4PacketConn().ReadFrom(b) | ||||
| 	if cm != nil { | ||||
| 		ttl = cm.TTL | ||||
| 	} | ||||
| 	return n, ttl, src, err | ||||
| } | ||||
|  | ||||
| func (c icmpv4Conn) ICMPRequestType() icmp.Type { | ||||
| 	return ipv4.ICMPTypeEcho | ||||
| } | ||||
|  | ||||
| type icmpV6Conn struct { | ||||
| 	icmpConn | ||||
| } | ||||
|  | ||||
| func (c *icmpV6Conn) SetFlagTTL() error { | ||||
| 	err := c.c.IPv6PacketConn().SetControlMessage(ipv6.FlagHopLimit, true) | ||||
| 	if runtime.GOOS == "windows" { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func (c *icmpV6Conn) ReadFrom(b []byte) (int, int, net.Addr, error) { | ||||
| 	var ttl int | ||||
| 	n, cm, src, err := c.c.IPv6PacketConn().ReadFrom(b) | ||||
| 	if cm != nil { | ||||
| 		ttl = cm.HopLimit | ||||
| 	} | ||||
| 	return n, ttl, src, err | ||||
| } | ||||
|  | ||||
| func (c icmpV6Conn) ICMPRequestType() icmp.Type { | ||||
| 	return ipv6.ICMPTypeEchoRequest | ||||
| } | ||||
							
								
								
									
										439
									
								
								vendor/github.com/go-ping/ping/ping.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										439
									
								
								vendor/github.com/go-ping/ping/ping.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -54,25 +54,27 @@ package ping | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/binary" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"log" | ||||
| 	"math" | ||||
| 	"math/rand" | ||||
| 	"net" | ||||
| 	"runtime" | ||||
| 	"sync" | ||||
| 	"sync/atomic" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/google/uuid" | ||||
| 	"golang.org/x/net/icmp" | ||||
| 	"golang.org/x/net/ipv4" | ||||
| 	"golang.org/x/net/ipv6" | ||||
| 	"golang.org/x/sync/errgroup" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	timeSliceLength  = 8 | ||||
| 	trackerLength    = 8 | ||||
| 	trackerLength    = len(uuid.UUID{}) | ||||
| 	protocolICMP     = 1 | ||||
| 	protocolIPv6ICMP = 58 | ||||
| ) | ||||
| @ -84,22 +86,27 @@ var ( | ||||
|  | ||||
| // New returns a new Pinger struct pointer. | ||||
| func New(addr string) *Pinger { | ||||
| 	r := rand.New(rand.NewSource(time.Now().UnixNano())) | ||||
| 	r := rand.New(rand.NewSource(getSeed())) | ||||
| 	firstUUID := uuid.New() | ||||
| 	var firstSequence = map[uuid.UUID]map[int]struct{}{} | ||||
| 	firstSequence[firstUUID] = make(map[int]struct{}) | ||||
| 	return &Pinger{ | ||||
| 		Count:      -1, | ||||
| 		Interval:   time.Second, | ||||
| 		RecordRtts: true, | ||||
| 		Size:       timeSliceLength, | ||||
| 		Timeout:    time.Second * 100000, | ||||
| 		Tracker:    r.Int63n(math.MaxInt64), | ||||
| 		Size:       timeSliceLength + trackerLength, | ||||
| 		Timeout:    time.Duration(math.MaxInt64), | ||||
|  | ||||
| 		addr:     addr, | ||||
| 		done:     make(chan bool), | ||||
| 		id:       r.Intn(math.MaxInt16), | ||||
| 		ipaddr:   nil, | ||||
| 		ipv4:     false, | ||||
| 		network:  "ip", | ||||
| 		protocol: "udp", | ||||
| 		addr:              addr, | ||||
| 		done:              make(chan interface{}), | ||||
| 		id:                r.Intn(math.MaxUint16), | ||||
| 		trackerUUIDs:      []uuid.UUID{firstUUID}, | ||||
| 		ipaddr:            nil, | ||||
| 		ipv4:              false, | ||||
| 		network:           "ip", | ||||
| 		protocol:          "udp", | ||||
| 		awaitingSequences: firstSequence, | ||||
| 		logger:            StdLogger{Logger: log.New(log.Writer(), log.Prefix(), log.Flags())}, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -132,6 +139,17 @@ type Pinger struct { | ||||
| 	// Number of packets received | ||||
| 	PacketsRecv int | ||||
|  | ||||
| 	// Number of duplicate packets received | ||||
| 	PacketsRecvDuplicates int | ||||
|  | ||||
| 	// Round trip time statistics | ||||
| 	minRtt    time.Duration | ||||
| 	maxRtt    time.Duration | ||||
| 	avgRtt    time.Duration | ||||
| 	stdDevRtt time.Duration | ||||
| 	stddevm2  time.Duration | ||||
| 	statsMu   sync.RWMutex | ||||
|  | ||||
| 	// If true, keep a record of rtts of all received packets. | ||||
| 	// Set to false to avoid memory bloat for long running pings. | ||||
| 	RecordRtts bool | ||||
| @ -139,6 +157,9 @@ type Pinger struct { | ||||
| 	// rtts is all of the Rtts | ||||
| 	rtts []time.Duration | ||||
|  | ||||
| 	// OnSetup is called when Pinger has finished setting up the listening socket | ||||
| 	OnSetup func() | ||||
|  | ||||
| 	// OnSend is called when Pinger sends a packet | ||||
| 	OnSend func(*Packet) | ||||
|  | ||||
| @ -148,28 +169,39 @@ type Pinger struct { | ||||
| 	// OnFinish is called when Pinger exits | ||||
| 	OnFinish func(*Statistics) | ||||
|  | ||||
| 	// OnDuplicateRecv is called when a packet is received that has already been received. | ||||
| 	OnDuplicateRecv func(*Packet) | ||||
|  | ||||
| 	// Size of packet being sent | ||||
| 	Size int | ||||
|  | ||||
| 	// Tracker: Used to uniquely identify packet when non-priviledged | ||||
| 	Tracker int64 | ||||
| 	// Tracker: Used to uniquely identify packets - Deprecated | ||||
| 	Tracker uint64 | ||||
|  | ||||
| 	// Source is the source IP address | ||||
| 	Source string | ||||
|  | ||||
| 	// stop chan bool | ||||
| 	done chan bool | ||||
| 	// Channel and mutex used to communicate when the Pinger should stop between goroutines. | ||||
| 	done chan interface{} | ||||
| 	lock sync.Mutex | ||||
|  | ||||
| 	ipaddr *net.IPAddr | ||||
| 	addr   string | ||||
|  | ||||
| 	// trackerUUIDs is the list of UUIDs being used for sending packets. | ||||
| 	trackerUUIDs []uuid.UUID | ||||
|  | ||||
| 	ipv4     bool | ||||
| 	id       int | ||||
| 	sequence int | ||||
| 	// awaitingSequences are in-flight sequence numbers we keep track of to help remove duplicate receipts | ||||
| 	awaitingSequences map[uuid.UUID]map[int]struct{} | ||||
| 	// network is one of "ip", "ip4", or "ip6". | ||||
| 	network string | ||||
| 	// protocol is "icmp" or "udp". | ||||
| 	protocol string | ||||
|  | ||||
| 	logger Logger | ||||
| } | ||||
|  | ||||
| type packet struct { | ||||
| @ -208,6 +240,9 @@ type Statistics struct { | ||||
| 	// PacketsSent is the number of packets sent. | ||||
| 	PacketsSent int | ||||
|  | ||||
| 	// PacketsRecvDuplicates is the number of duplicate responses there were to a sent packet. | ||||
| 	PacketsRecvDuplicates int | ||||
|  | ||||
| 	// PacketLoss is the percentage of packets lost. | ||||
| 	PacketLoss float64 | ||||
|  | ||||
| @ -234,6 +269,34 @@ type Statistics struct { | ||||
| 	StdDevRtt time.Duration | ||||
| } | ||||
|  | ||||
| func (p *Pinger) updateStatistics(pkt *Packet) { | ||||
| 	p.statsMu.Lock() | ||||
| 	defer p.statsMu.Unlock() | ||||
|  | ||||
| 	p.PacketsRecv++ | ||||
| 	if p.RecordRtts { | ||||
| 		p.rtts = append(p.rtts, pkt.Rtt) | ||||
| 	} | ||||
|  | ||||
| 	if p.PacketsRecv == 1 || pkt.Rtt < p.minRtt { | ||||
| 		p.minRtt = pkt.Rtt | ||||
| 	} | ||||
|  | ||||
| 	if pkt.Rtt > p.maxRtt { | ||||
| 		p.maxRtt = pkt.Rtt | ||||
| 	} | ||||
|  | ||||
| 	pktCount := time.Duration(p.PacketsRecv) | ||||
| 	// welford's online method for stddev | ||||
| 	// https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm | ||||
| 	delta := pkt.Rtt - p.avgRtt | ||||
| 	p.avgRtt += delta / pktCount | ||||
| 	delta2 := pkt.Rtt - p.avgRtt | ||||
| 	p.stddevm2 += delta * delta2 | ||||
|  | ||||
| 	p.stdDevRtt = time.Duration(math.Sqrt(float64(p.stddevm2 / pktCount))) | ||||
| } | ||||
|  | ||||
| // SetIPAddr sets the ip address of the target host. | ||||
| func (p *Pinger) SetIPAddr(ipaddr *net.IPAddr) { | ||||
| 	p.ipv4 = isIPv4(ipaddr.IP) | ||||
| @ -314,88 +377,128 @@ func (p *Pinger) Privileged() bool { | ||||
| 	return p.protocol == "icmp" | ||||
| } | ||||
|  | ||||
| // SetLogger sets the logger to be used to log events from the pinger. | ||||
| func (p *Pinger) SetLogger(logger Logger) { | ||||
| 	p.logger = logger | ||||
| } | ||||
|  | ||||
| // Run runs the pinger. This is a blocking function that will exit when it's | ||||
| // done. If Count or Interval are not specified, it will run continuously until | ||||
| // it is interrupted. | ||||
| func (p *Pinger) Run() error { | ||||
| 	var conn *icmp.PacketConn | ||||
| 	var conn packetConn | ||||
| 	var err error | ||||
| 	if p.Size < timeSliceLength+trackerLength { | ||||
| 		return fmt.Errorf("size %d is less than minimum required size %d", p.Size, timeSliceLength+trackerLength) | ||||
| 	} | ||||
| 	if p.ipaddr == nil { | ||||
| 		err = p.Resolve() | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if p.ipv4 { | ||||
| 		if conn, err = p.listen(ipv4Proto[p.protocol]); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err = conn.IPv4PacketConn().SetControlMessage(ipv4.FlagTTL, true); runtime.GOOS != "windows" && err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} else { | ||||
| 		if conn, err = p.listen(ipv6Proto[p.protocol]); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err = conn.IPv6PacketConn().SetControlMessage(ipv6.FlagHopLimit, true); runtime.GOOS != "windows" && err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	if conn, err = p.listen(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	defer conn.Close() | ||||
|  | ||||
| 	return p.run(conn) | ||||
| } | ||||
|  | ||||
| func (p *Pinger) run(conn packetConn) error { | ||||
| 	if err := conn.SetFlagTTL(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	defer p.finish() | ||||
|  | ||||
| 	var wg sync.WaitGroup | ||||
| 	recv := make(chan *packet, 5) | ||||
| 	defer close(recv) | ||||
| 	wg.Add(1) | ||||
| 	//nolint:errcheck | ||||
| 	go p.recvICMP(conn, recv, &wg) | ||||
|  | ||||
| 	err = p.sendICMP(conn) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	if handler := p.OnSetup; handler != nil { | ||||
| 		handler() | ||||
| 	} | ||||
|  | ||||
| 	var g errgroup.Group | ||||
|  | ||||
| 	g.Go(func() error { | ||||
| 		defer p.Stop() | ||||
| 		return p.recvICMP(conn, recv) | ||||
| 	}) | ||||
|  | ||||
| 	g.Go(func() error { | ||||
| 		defer p.Stop() | ||||
| 		return p.runLoop(conn, recv) | ||||
| 	}) | ||||
|  | ||||
| 	return g.Wait() | ||||
| } | ||||
|  | ||||
| func (p *Pinger) runLoop( | ||||
| 	conn packetConn, | ||||
| 	recvCh <-chan *packet, | ||||
| ) error { | ||||
| 	logger := p.logger | ||||
| 	if logger == nil { | ||||
| 		logger = NoopLogger{} | ||||
| 	} | ||||
|  | ||||
| 	timeout := time.NewTicker(p.Timeout) | ||||
| 	defer timeout.Stop() | ||||
| 	interval := time.NewTicker(p.Interval) | ||||
| 	defer interval.Stop() | ||||
| 	defer func() { | ||||
| 		p.Stop() | ||||
| 		interval.Stop() | ||||
| 		timeout.Stop() | ||||
| 	}() | ||||
|  | ||||
| 	if err := p.sendICMP(conn); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	for { | ||||
| 		select { | ||||
| 		case <-p.done: | ||||
| 			wg.Wait() | ||||
| 			return nil | ||||
|  | ||||
| 		case <-timeout.C: | ||||
| 			close(p.done) | ||||
| 			wg.Wait() | ||||
| 			return nil | ||||
| 		case <-interval.C: | ||||
| 			if p.Count > 0 && p.PacketsSent >= p.Count { | ||||
| 				continue | ||||
| 			} | ||||
| 			err = p.sendICMP(conn) | ||||
| 			if err != nil { | ||||
| 				// FIXME: this logs as FATAL but continues | ||||
| 				fmt.Println("FATAL: ", err.Error()) | ||||
| 			} | ||||
| 		case r := <-recv: | ||||
|  | ||||
| 		case r := <-recvCh: | ||||
| 			err := p.processPacket(r) | ||||
| 			if err != nil { | ||||
| 				// FIXME: this logs as FATAL but continues | ||||
| 				fmt.Println("FATAL: ", err.Error()) | ||||
| 				logger.Fatalf("processing received packet: %s", err) | ||||
| 			} | ||||
|  | ||||
| 		case <-interval.C: | ||||
| 			if p.Count > 0 && p.PacketsSent >= p.Count { | ||||
| 				interval.Stop() | ||||
| 				continue | ||||
| 			} | ||||
| 			err := p.sendICMP(conn) | ||||
| 			if err != nil { | ||||
| 				// FIXME: this logs as FATAL but continues | ||||
| 				logger.Fatalf("sending packet: %s", err) | ||||
| 			} | ||||
| 		} | ||||
| 		if p.Count > 0 && p.PacketsRecv >= p.Count { | ||||
| 			close(p.done) | ||||
| 			wg.Wait() | ||||
| 			return nil | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (p *Pinger) Stop() { | ||||
| 	close(p.done) | ||||
| 	p.lock.Lock() | ||||
| 	defer p.lock.Unlock() | ||||
|  | ||||
| 	open := true | ||||
| 	select { | ||||
| 	case _, open = <-p.done: | ||||
| 	default: | ||||
| 	} | ||||
|  | ||||
| 	if open { | ||||
| 		close(p.done) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (p *Pinger) finish() { | ||||
| @ -410,83 +513,73 @@ func (p *Pinger) finish() { | ||||
| // pinger is running or after it is finished. OnFinish calls this function to | ||||
| // get it's finished statistics. | ||||
| func (p *Pinger) Statistics() *Statistics { | ||||
| 	loss := float64(p.PacketsSent-p.PacketsRecv) / float64(p.PacketsSent) * 100 | ||||
| 	var min, max, total time.Duration | ||||
| 	if len(p.rtts) > 0 { | ||||
| 		min = p.rtts[0] | ||||
| 		max = p.rtts[0] | ||||
| 	} | ||||
| 	for _, rtt := range p.rtts { | ||||
| 		if rtt < min { | ||||
| 			min = rtt | ||||
| 		} | ||||
| 		if rtt > max { | ||||
| 			max = rtt | ||||
| 		} | ||||
| 		total += rtt | ||||
| 	} | ||||
| 	p.statsMu.RLock() | ||||
| 	defer p.statsMu.RUnlock() | ||||
| 	sent := p.PacketsSent | ||||
| 	loss := float64(sent-p.PacketsRecv) / float64(sent) * 100 | ||||
| 	s := Statistics{ | ||||
| 		PacketsSent: p.PacketsSent, | ||||
| 		PacketsRecv: p.PacketsRecv, | ||||
| 		PacketLoss:  loss, | ||||
| 		Rtts:        p.rtts, | ||||
| 		Addr:        p.addr, | ||||
| 		IPAddr:      p.ipaddr, | ||||
| 		MaxRtt:      max, | ||||
| 		MinRtt:      min, | ||||
| 	} | ||||
| 	if len(p.rtts) > 0 { | ||||
| 		s.AvgRtt = total / time.Duration(len(p.rtts)) | ||||
| 		var sumsquares time.Duration | ||||
| 		for _, rtt := range p.rtts { | ||||
| 			sumsquares += (rtt - s.AvgRtt) * (rtt - s.AvgRtt) | ||||
| 		} | ||||
| 		s.StdDevRtt = time.Duration(math.Sqrt( | ||||
| 			float64(sumsquares / time.Duration(len(p.rtts))))) | ||||
| 		PacketsSent:           sent, | ||||
| 		PacketsRecv:           p.PacketsRecv, | ||||
| 		PacketsRecvDuplicates: p.PacketsRecvDuplicates, | ||||
| 		PacketLoss:            loss, | ||||
| 		Rtts:                  p.rtts, | ||||
| 		Addr:                  p.addr, | ||||
| 		IPAddr:                p.ipaddr, | ||||
| 		MaxRtt:                p.maxRtt, | ||||
| 		MinRtt:                p.minRtt, | ||||
| 		AvgRtt:                p.avgRtt, | ||||
| 		StdDevRtt:             p.stdDevRtt, | ||||
| 	} | ||||
| 	return &s | ||||
| } | ||||
|  | ||||
| type expBackoff struct { | ||||
| 	baseDelay time.Duration | ||||
| 	maxExp    int64 | ||||
| 	c         int64 | ||||
| } | ||||
|  | ||||
| func (b *expBackoff) Get() time.Duration { | ||||
| 	if b.c < b.maxExp { | ||||
| 		b.c++ | ||||
| 	} | ||||
|  | ||||
| 	return b.baseDelay * time.Duration(rand.Int63n(1<<b.c)) | ||||
| } | ||||
|  | ||||
| func newExpBackoff(baseDelay time.Duration, maxExp int64) expBackoff { | ||||
| 	return expBackoff{baseDelay: baseDelay, maxExp: maxExp} | ||||
| } | ||||
|  | ||||
| func (p *Pinger) recvICMP( | ||||
| 	conn *icmp.PacketConn, | ||||
| 	conn packetConn, | ||||
| 	recv chan<- *packet, | ||||
| 	wg *sync.WaitGroup, | ||||
| ) error { | ||||
| 	defer wg.Done() | ||||
| 	// Start by waiting for 50 µs and increase to a possible maximum of ~ 100 ms. | ||||
| 	expBackoff := newExpBackoff(50*time.Microsecond, 11) | ||||
| 	delay := expBackoff.Get() | ||||
|  | ||||
| 	for { | ||||
| 		select { | ||||
| 		case <-p.done: | ||||
| 			return nil | ||||
| 		default: | ||||
| 			bytes := make([]byte, 512) | ||||
| 			if err := conn.SetReadDeadline(time.Now().Add(time.Millisecond * 100)); err != nil { | ||||
| 			bytes := make([]byte, p.getMessageLength()) | ||||
| 			if err := conn.SetReadDeadline(time.Now().Add(delay)); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			var n, ttl int | ||||
| 			var err error | ||||
| 			if p.ipv4 { | ||||
| 				var cm *ipv4.ControlMessage | ||||
| 				n, cm, _, err = conn.IPv4PacketConn().ReadFrom(bytes) | ||||
| 				if cm != nil { | ||||
| 					ttl = cm.TTL | ||||
| 				} | ||||
| 			} else { | ||||
| 				var cm *ipv6.ControlMessage | ||||
| 				n, cm, _, err = conn.IPv6PacketConn().ReadFrom(bytes) | ||||
| 				if cm != nil { | ||||
| 					ttl = cm.HopLimit | ||||
| 				} | ||||
| 			} | ||||
| 			n, ttl, _, err = conn.ReadFrom(bytes) | ||||
| 			if err != nil { | ||||
| 				if neterr, ok := err.(*net.OpError); ok { | ||||
| 					if neterr.Timeout() { | ||||
| 						// Read timeout | ||||
| 						delay = expBackoff.Get() | ||||
| 						continue | ||||
| 					} else { | ||||
| 						close(p.done) | ||||
| 						return err | ||||
| 					} | ||||
| 				} | ||||
| 				return err | ||||
| 			} | ||||
|  | ||||
| 			select { | ||||
| @ -498,6 +591,27 @@ func (p *Pinger) recvICMP( | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // getPacketUUID scans the tracking slice for matches. | ||||
| func (p *Pinger) getPacketUUID(pkt []byte) (*uuid.UUID, error) { | ||||
| 	var packetUUID uuid.UUID | ||||
| 	err := packetUUID.UnmarshalBinary(pkt[timeSliceLength : timeSliceLength+trackerLength]) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("error decoding tracking UUID: %w", err) | ||||
| 	} | ||||
|  | ||||
| 	for _, item := range p.trackerUUIDs { | ||||
| 		if item == packetUUID { | ||||
| 			return &packetUUID, nil | ||||
| 		} | ||||
| 	} | ||||
| 	return nil, nil | ||||
| } | ||||
|  | ||||
| // getCurrentTrackerUUID grabs the latest tracker UUID. | ||||
| func (p *Pinger) getCurrentTrackerUUID() uuid.UUID { | ||||
| 	return p.trackerUUIDs[len(p.trackerUUIDs)-1] | ||||
| } | ||||
|  | ||||
| func (p *Pinger) processPacket(recv *packet) error { | ||||
| 	receivedAt := time.Now() | ||||
| 	var proto int | ||||
| @ -510,7 +624,7 @@ func (p *Pinger) processPacket(recv *packet) error { | ||||
| 	var m *icmp.Message | ||||
| 	var err error | ||||
| 	if m, err = icmp.ParseMessage(proto, recv.bytes); err != nil { | ||||
| 		return fmt.Errorf("error parsing icmp message: %s", err.Error()) | ||||
| 		return fmt.Errorf("error parsing icmp message: %w", err) | ||||
| 	} | ||||
|  | ||||
| 	if m.Type != ipv4.ICMPTypeEchoReply && m.Type != ipv6.ICMPTypeEchoReply { | ||||
| @ -518,7 +632,7 @@ func (p *Pinger) processPacket(recv *packet) error { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	outPkt := &Packet{ | ||||
| 	inPkt := &Packet{ | ||||
| 		Nbytes: recv.nbytes, | ||||
| 		IPAddr: p.ipaddr, | ||||
| 		Addr:   p.addr, | ||||
| @ -527,12 +641,8 @@ func (p *Pinger) processPacket(recv *packet) error { | ||||
|  | ||||
| 	switch pkt := m.Body.(type) { | ||||
| 	case *icmp.Echo: | ||||
| 		// If we are priviledged, we can match icmp.ID | ||||
| 		if p.protocol == "icmp" { | ||||
| 			// Check if reply from same ID | ||||
| 			if pkt.ID != p.id { | ||||
| 				return nil | ||||
| 			} | ||||
| 		if !p.matchID(pkt.ID) { | ||||
| 			return nil | ||||
| 		} | ||||
|  | ||||
| 		if len(pkt.Data) < timeSliceLength+trackerLength { | ||||
| @ -540,46 +650,50 @@ func (p *Pinger) processPacket(recv *packet) error { | ||||
| 				len(pkt.Data), pkt.Data) | ||||
| 		} | ||||
|  | ||||
| 		tracker := bytesToInt(pkt.Data[timeSliceLength:]) | ||||
| 		timestamp := bytesToTime(pkt.Data[:timeSliceLength]) | ||||
|  | ||||
| 		if tracker != p.Tracker { | ||||
| 			return nil | ||||
| 		pktUUID, err := p.getPacketUUID(pkt.Data) | ||||
| 		if err != nil || pktUUID == nil { | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		outPkt.Rtt = receivedAt.Sub(timestamp) | ||||
| 		outPkt.Seq = pkt.Seq | ||||
| 		p.PacketsRecv++ | ||||
| 		timestamp := bytesToTime(pkt.Data[:timeSliceLength]) | ||||
| 		inPkt.Rtt = receivedAt.Sub(timestamp) | ||||
| 		inPkt.Seq = pkt.Seq | ||||
| 		// If we've already received this sequence, ignore it. | ||||
| 		if _, inflight := p.awaitingSequences[*pktUUID][pkt.Seq]; !inflight { | ||||
| 			p.PacketsRecvDuplicates++ | ||||
| 			if p.OnDuplicateRecv != nil { | ||||
| 				p.OnDuplicateRecv(inPkt) | ||||
| 			} | ||||
| 			return nil | ||||
| 		} | ||||
| 		// remove it from the list of sequences we're waiting for so we don't get duplicates. | ||||
| 		delete(p.awaitingSequences[*pktUUID], pkt.Seq) | ||||
| 		p.updateStatistics(inPkt) | ||||
| 	default: | ||||
| 		// Very bad, not sure how this can happen | ||||
| 		return fmt.Errorf("invalid ICMP echo reply; type: '%T', '%v'", pkt, pkt) | ||||
| 	} | ||||
|  | ||||
| 	if p.RecordRtts { | ||||
| 		p.rtts = append(p.rtts, outPkt.Rtt) | ||||
| 	} | ||||
| 	handler := p.OnRecv | ||||
| 	if handler != nil { | ||||
| 		handler(outPkt) | ||||
| 		handler(inPkt) | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *Pinger) sendICMP(conn *icmp.PacketConn) error { | ||||
| 	var typ icmp.Type | ||||
| 	if p.ipv4 { | ||||
| 		typ = ipv4.ICMPTypeEcho | ||||
| 	} else { | ||||
| 		typ = ipv6.ICMPTypeEchoRequest | ||||
| 	} | ||||
|  | ||||
| func (p *Pinger) sendICMP(conn packetConn) error { | ||||
| 	var dst net.Addr = p.ipaddr | ||||
| 	if p.protocol == "udp" { | ||||
| 		dst = &net.UDPAddr{IP: p.ipaddr.IP, Zone: p.ipaddr.Zone} | ||||
| 	} | ||||
|  | ||||
| 	t := append(timeToBytes(time.Now()), intToBytes(p.Tracker)...) | ||||
| 	currentUUID := p.getCurrentTrackerUUID() | ||||
| 	uuidEncoded, err := currentUUID.MarshalBinary() | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("unable to marshal UUID binary: %w", err) | ||||
| 	} | ||||
| 	t := append(timeToBytes(time.Now()), uuidEncoded...) | ||||
| 	if remainSize := p.Size - timeSliceLength - trackerLength; remainSize > 0 { | ||||
| 		t = append(t, bytes.Repeat([]byte{1}, remainSize)...) | ||||
| 	} | ||||
| @ -591,7 +705,7 @@ func (p *Pinger) sendICMP(conn *icmp.PacketConn) error { | ||||
| 	} | ||||
|  | ||||
| 	msg := &icmp.Message{ | ||||
| 		Type: typ, | ||||
| 		Type: conn.ICMPRequestType(), | ||||
| 		Code: 0, | ||||
| 		Body: body, | ||||
| 	} | ||||
| @ -608,6 +722,7 @@ func (p *Pinger) sendICMP(conn *icmp.PacketConn) error { | ||||
| 					continue | ||||
| 				} | ||||
| 			} | ||||
| 			return err | ||||
| 		} | ||||
| 		handler := p.OnSend | ||||
| 		if handler != nil { | ||||
| @ -619,19 +734,40 @@ func (p *Pinger) sendICMP(conn *icmp.PacketConn) error { | ||||
| 			} | ||||
| 			handler(outPkt) | ||||
| 		} | ||||
|  | ||||
| 		// mark this sequence as in-flight | ||||
| 		p.awaitingSequences[currentUUID][p.sequence] = struct{}{} | ||||
| 		p.PacketsSent++ | ||||
| 		p.sequence++ | ||||
| 		if p.sequence > 65535 { | ||||
| 			newUUID := uuid.New() | ||||
| 			p.trackerUUIDs = append(p.trackerUUIDs, newUUID) | ||||
| 			p.awaitingSequences[newUUID] = make(map[int]struct{}) | ||||
| 			p.sequence = 0 | ||||
| 		} | ||||
| 		break | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *Pinger) listen(netProto string) (*icmp.PacketConn, error) { | ||||
| 	conn, err := icmp.ListenPacket(netProto, p.Source) | ||||
| func (p *Pinger) listen() (packetConn, error) { | ||||
| 	var ( | ||||
| 		conn packetConn | ||||
| 		err  error | ||||
| 	) | ||||
|  | ||||
| 	if p.ipv4 { | ||||
| 		var c icmpv4Conn | ||||
| 		c.c, err = icmp.ListenPacket(ipv4Proto[p.protocol], p.Source) | ||||
| 		conn = &c | ||||
| 	} else { | ||||
| 		var c icmpV6Conn | ||||
| 		c.c, err = icmp.ListenPacket(ipv6Proto[p.protocol], p.Source) | ||||
| 		conn = &c | ||||
| 	} | ||||
|  | ||||
| 	if err != nil { | ||||
| 		close(p.done) | ||||
| 		p.Stop() | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return conn, nil | ||||
| @ -658,12 +794,9 @@ func timeToBytes(t time.Time) []byte { | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func bytesToInt(b []byte) int64 { | ||||
| 	return int64(binary.BigEndian.Uint64(b)) | ||||
| } | ||||
| var seed int64 = time.Now().UnixNano() | ||||
|  | ||||
| func intToBytes(tracker int64) []byte { | ||||
| 	b := make([]byte, 8) | ||||
| 	binary.BigEndian.PutUint64(b, uint64(tracker)) | ||||
| 	return b | ||||
| // getSeed returns a goroutine-safe unique seed | ||||
| func getSeed() int64 { | ||||
| 	return atomic.AddInt64(&seed, 1) | ||||
| } | ||||
|  | ||||
							
								
								
									
										19
									
								
								vendor/github.com/go-ping/ping/utils_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/go-ping/ping/utils_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| // +build linux | ||||
|  | ||||
| package ping | ||||
|  | ||||
| // Returns the length of an ICMP message. | ||||
| func (p *Pinger) getMessageLength() int { | ||||
| 	return p.Size + 8 | ||||
| } | ||||
|  | ||||
| // Attempts to match the ID of an ICMP packet. | ||||
| func (p *Pinger) matchID(ID int) bool { | ||||
| 	// On Linux we can only match ID if we are privileged. | ||||
| 	if p.protocol == "icmp" { | ||||
| 		if ID != p.id { | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
							
								
								
									
										16
									
								
								vendor/github.com/go-ping/ping/utils_other.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								vendor/github.com/go-ping/ping/utils_other.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| // +build !linux,!windows | ||||
|  | ||||
| package ping | ||||
|  | ||||
| // Returns the length of an ICMP message. | ||||
| func (p *Pinger) getMessageLength() int { | ||||
| 	return p.Size + 8 | ||||
| } | ||||
|  | ||||
| // Attempts to match the ID of an ICMP packet. | ||||
| func (p *Pinger) matchID(ID int) bool { | ||||
| 	if ID != p.id { | ||||
| 		return false | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
							
								
								
									
										24
									
								
								vendor/github.com/go-ping/ping/utils_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/go-ping/ping/utils_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | ||||
| // +build windows | ||||
|  | ||||
| package ping | ||||
|  | ||||
| import ( | ||||
| 	"golang.org/x/net/ipv4" | ||||
| 	"golang.org/x/net/ipv6" | ||||
| ) | ||||
|  | ||||
| // Returns the length of an ICMP message, plus the IP packet header. | ||||
| func (p *Pinger) getMessageLength() int { | ||||
| 	if p.ipv4 { | ||||
| 		return p.Size + 8 + ipv4.HeaderLen | ||||
| 	} | ||||
| 	return p.Size + 8 + ipv6.HeaderLen | ||||
| } | ||||
|  | ||||
| // Attempts to match the ID of an ICMP packet. | ||||
| func (p *Pinger) matchID(ID int) bool { | ||||
| 	if ID != p.id { | ||||
| 		return false | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
							
								
								
									
										10
									
								
								vendor/github.com/golang/protobuf/proto/registry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/golang/protobuf/proto/registry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -13,6 +13,7 @@ import ( | ||||
| 	"strings" | ||||
| 	"sync" | ||||
|  | ||||
| 	"google.golang.org/protobuf/reflect/protodesc" | ||||
| 	"google.golang.org/protobuf/reflect/protoreflect" | ||||
| 	"google.golang.org/protobuf/reflect/protoregistry" | ||||
| 	"google.golang.org/protobuf/runtime/protoimpl" | ||||
| @ -62,14 +63,7 @@ func FileDescriptor(s filePath) fileDescGZIP { | ||||
| 	// Find the descriptor in the v2 registry. | ||||
| 	var b []byte | ||||
| 	if fd, _ := protoregistry.GlobalFiles.FindFileByPath(s); fd != nil { | ||||
| 		if fd, ok := fd.(interface{ ProtoLegacyRawDesc() []byte }); ok { | ||||
| 			b = fd.ProtoLegacyRawDesc() | ||||
| 		} else { | ||||
| 			// TODO: Use protodesc.ToFileDescriptorProto to construct | ||||
| 			// a descriptorpb.FileDescriptorProto and marshal it. | ||||
| 			// However, doing so causes the proto package to have a dependency | ||||
| 			// on descriptorpb, leading to cyclic dependency issues. | ||||
| 		} | ||||
| 		b, _ = Marshal(protodesc.ToFileDescriptorProto(fd)) | ||||
| 	} | ||||
|  | ||||
| 	// Locally cache the raw descriptor form for the file. | ||||
|  | ||||
							
								
								
									
										14
									
								
								vendor/github.com/golang/protobuf/ptypes/any.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/github.com/golang/protobuf/ptypes/any.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -19,6 +19,8 @@ const urlPrefix = "type.googleapis.com/" | ||||
|  | ||||
| // AnyMessageName returns the message name contained in an anypb.Any message. | ||||
| // Most type assertions should use the Is function instead. | ||||
| // | ||||
| // Deprecated: Call the any.MessageName method instead. | ||||
| func AnyMessageName(any *anypb.Any) (string, error) { | ||||
| 	name, err := anyMessageName(any) | ||||
| 	return string(name), err | ||||
| @ -38,6 +40,8 @@ func anyMessageName(any *anypb.Any) (protoreflect.FullName, error) { | ||||
| } | ||||
|  | ||||
| // MarshalAny marshals the given message m into an anypb.Any message. | ||||
| // | ||||
| // Deprecated: Call the anypb.New function instead. | ||||
| func MarshalAny(m proto.Message) (*anypb.Any, error) { | ||||
| 	switch dm := m.(type) { | ||||
| 	case DynamicAny: | ||||
| @ -58,6 +62,9 @@ func MarshalAny(m proto.Message) (*anypb.Any, error) { | ||||
| // Empty returns a new message of the type specified in an anypb.Any message. | ||||
| // It returns protoregistry.NotFound if the corresponding message type could not | ||||
| // be resolved in the global registry. | ||||
| // | ||||
| // Deprecated: Use protoregistry.GlobalTypes.FindMessageByName instead | ||||
| // to resolve the message name and create a new instance of it. | ||||
| func Empty(any *anypb.Any) (proto.Message, error) { | ||||
| 	name, err := anyMessageName(any) | ||||
| 	if err != nil { | ||||
| @ -76,6 +83,8 @@ func Empty(any *anypb.Any) (proto.Message, error) { | ||||
| // | ||||
| // The target message m may be a *DynamicAny message. If the underlying message | ||||
| // type could not be resolved, then this returns protoregistry.NotFound. | ||||
| // | ||||
| // Deprecated: Call the any.UnmarshalTo method instead. | ||||
| func UnmarshalAny(any *anypb.Any, m proto.Message) error { | ||||
| 	if dm, ok := m.(*DynamicAny); ok { | ||||
| 		if dm.Message == nil { | ||||
| @ -100,6 +109,8 @@ func UnmarshalAny(any *anypb.Any, m proto.Message) error { | ||||
| } | ||||
|  | ||||
| // Is reports whether the Any message contains a message of the specified type. | ||||
| // | ||||
| // Deprecated: Call the any.MessageIs method instead. | ||||
| func Is(any *anypb.Any, m proto.Message) bool { | ||||
| 	if any == nil || m == nil { | ||||
| 		return false | ||||
| @ -119,6 +130,9 @@ func Is(any *anypb.Any, m proto.Message) bool { | ||||
| //   var x ptypes.DynamicAny | ||||
| //   if err := ptypes.UnmarshalAny(a, &x); err != nil { ... } | ||||
| //   fmt.Printf("unmarshaled message: %v", x.Message) | ||||
| // | ||||
| // Deprecated: Use the any.UnmarshalNew method instead to unmarshal | ||||
| // the any message contents into a new instance of the underlying message. | ||||
| type DynamicAny struct{ proto.Message } | ||||
|  | ||||
| func (m DynamicAny) String() string { | ||||
|  | ||||
							
								
								
									
										4
									
								
								vendor/github.com/golang/protobuf/ptypes/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/golang/protobuf/ptypes/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -3,4 +3,8 @@ | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // Package ptypes provides functionality for interacting with well-known types. | ||||
| // | ||||
| // Deprecated: Well-known types have specialized functionality directly | ||||
| // injected into the generated packages for each message type. | ||||
| // See the deprecation notice for each function for the suggested alternative. | ||||
| package ptypes | ||||
|  | ||||
							
								
								
									
										4
									
								
								vendor/github.com/golang/protobuf/ptypes/duration.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/golang/protobuf/ptypes/duration.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -21,6 +21,8 @@ const ( | ||||
|  | ||||
| // Duration converts a durationpb.Duration to a time.Duration. | ||||
| // Duration returns an error if dur is invalid or overflows a time.Duration. | ||||
| // | ||||
| // Deprecated: Call the dur.AsDuration and dur.CheckValid methods instead. | ||||
| func Duration(dur *durationpb.Duration) (time.Duration, error) { | ||||
| 	if err := validateDuration(dur); err != nil { | ||||
| 		return 0, err | ||||
| @ -39,6 +41,8 @@ func Duration(dur *durationpb.Duration) (time.Duration, error) { | ||||
| } | ||||
|  | ||||
| // DurationProto converts a time.Duration to a durationpb.Duration. | ||||
| // | ||||
| // Deprecated: Call the durationpb.New function instead. | ||||
| func DurationProto(d time.Duration) *durationpb.Duration { | ||||
| 	nanos := d.Nanoseconds() | ||||
| 	secs := nanos / 1e9 | ||||
|  | ||||
							
								
								
									
										9
									
								
								vendor/github.com/golang/protobuf/ptypes/timestamp.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/golang/protobuf/ptypes/timestamp.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -33,6 +33,8 @@ const ( | ||||
| // | ||||
| // A nil Timestamp returns an error. The first return value in that case is | ||||
| // undefined. | ||||
| // | ||||
| // Deprecated: Call the ts.AsTime and ts.CheckValid methods instead. | ||||
| func Timestamp(ts *timestamppb.Timestamp) (time.Time, error) { | ||||
| 	// Don't return the zero value on error, because corresponds to a valid | ||||
| 	// timestamp. Instead return whatever time.Unix gives us. | ||||
| @ -46,6 +48,8 @@ func Timestamp(ts *timestamppb.Timestamp) (time.Time, error) { | ||||
| } | ||||
|  | ||||
| // TimestampNow returns a google.protobuf.Timestamp for the current time. | ||||
| // | ||||
| // Deprecated: Call the timestamppb.Now function instead. | ||||
| func TimestampNow() *timestamppb.Timestamp { | ||||
| 	ts, err := TimestampProto(time.Now()) | ||||
| 	if err != nil { | ||||
| @ -56,6 +60,8 @@ func TimestampNow() *timestamppb.Timestamp { | ||||
|  | ||||
| // TimestampProto converts the time.Time to a google.protobuf.Timestamp proto. | ||||
| // It returns an error if the resulting Timestamp is invalid. | ||||
| // | ||||
| // Deprecated: Call the timestamppb.New function instead. | ||||
| func TimestampProto(t time.Time) (*timestamppb.Timestamp, error) { | ||||
| 	ts := ×tamppb.Timestamp{ | ||||
| 		Seconds: t.Unix(), | ||||
| @ -69,6 +75,9 @@ func TimestampProto(t time.Time) (*timestamppb.Timestamp, error) { | ||||
|  | ||||
| // TimestampString returns the RFC 3339 string for valid Timestamps. | ||||
| // For invalid Timestamps, it returns an error message in parentheses. | ||||
| // | ||||
| // Deprecated: Call the ts.AsTime method instead, | ||||
| // followed by a call to the Format method on the time.Time value. | ||||
| func TimestampString(ts *timestamppb.Timestamp) string { | ||||
| 	t, err := Timestamp(ts) | ||||
| 	if err != nil { | ||||
|  | ||||
							
								
								
									
										9
									
								
								vendor/github.com/google/uuid/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/google/uuid/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| language: go | ||||
|  | ||||
| go: | ||||
|   - 1.4.3 | ||||
|   - 1.5.3 | ||||
|   - tip | ||||
|  | ||||
| script: | ||||
|   - go test -v ./... | ||||
							
								
								
									
										10
									
								
								vendor/github.com/google/uuid/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/google/uuid/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| # How to contribute | ||||
|  | ||||
| We definitely welcome patches and contribution to this project! | ||||
|  | ||||
| ### Legal requirements | ||||
|  | ||||
| In order to protect both you and ourselves, you will need to sign the | ||||
| [Contributor License Agreement](https://cla.developers.google.com/clas). | ||||
|  | ||||
| You may have already signed it for other Google projects. | ||||
							
								
								
									
										9
									
								
								vendor/github.com/google/uuid/CONTRIBUTORS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/google/uuid/CONTRIBUTORS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| Paul Borman <borman@google.com> | ||||
| bmatsuo | ||||
| shawnps | ||||
| theory | ||||
| jboverfelt | ||||
| dsymonds | ||||
| cd1 | ||||
| wallclockbuilder | ||||
| dansouza | ||||
							
								
								
									
										27
									
								
								vendor/github.com/google/uuid/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/github.com/google/uuid/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| Copyright (c) 2009,2014 Google Inc. All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are | ||||
| met: | ||||
|  | ||||
|    * Redistributions of source code must retain the above copyright | ||||
| notice, this list of conditions and the following disclaimer. | ||||
|    * Redistributions in binary form must reproduce the above | ||||
| copyright notice, this list of conditions and the following disclaimer | ||||
| in the documentation and/or other materials provided with the | ||||
| distribution. | ||||
|    * Neither the name of Google Inc. nor the names of its | ||||
| contributors may be used to endorse or promote products derived from | ||||
| this software without specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
							
								
								
									
										19
									
								
								vendor/github.com/google/uuid/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/google/uuid/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| # uuid  | ||||
| The uuid package generates and inspects UUIDs based on | ||||
| [RFC 4122](http://tools.ietf.org/html/rfc4122) | ||||
| and DCE 1.1: Authentication and Security Services.  | ||||
|  | ||||
| This package is based on the github.com/pborman/uuid package (previously named | ||||
| code.google.com/p/go-uuid).  It differs from these earlier packages in that | ||||
| a UUID is a 16 byte array rather than a byte slice.  One loss due to this | ||||
| change is the ability to represent an invalid UUID (vs a NIL UUID). | ||||
|  | ||||
| ###### Install | ||||
| `go get github.com/google/uuid` | ||||
|  | ||||
| ###### Documentation  | ||||
| [](http://godoc.org/github.com/google/uuid) | ||||
|  | ||||
| Full `go doc` style documentation for the package can be viewed online without | ||||
| installing this package by using the GoDoc site here:  | ||||
| http://pkg.go.dev/github.com/google/uuid | ||||
							
								
								
									
										80
									
								
								vendor/github.com/google/uuid/dce.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								vendor/github.com/google/uuid/dce.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,80 @@ | ||||
| // Copyright 2016 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| ) | ||||
|  | ||||
| // A Domain represents a Version 2 domain | ||||
| type Domain byte | ||||
|  | ||||
| // Domain constants for DCE Security (Version 2) UUIDs. | ||||
| const ( | ||||
| 	Person = Domain(0) | ||||
| 	Group  = Domain(1) | ||||
| 	Org    = Domain(2) | ||||
| ) | ||||
|  | ||||
| // NewDCESecurity returns a DCE Security (Version 2) UUID. | ||||
| // | ||||
| // The domain should be one of Person, Group or Org. | ||||
| // On a POSIX system the id should be the users UID for the Person | ||||
| // domain and the users GID for the Group.  The meaning of id for | ||||
| // the domain Org or on non-POSIX systems is site defined. | ||||
| // | ||||
| // For a given domain/id pair the same token may be returned for up to | ||||
| // 7 minutes and 10 seconds. | ||||
| func NewDCESecurity(domain Domain, id uint32) (UUID, error) { | ||||
| 	uuid, err := NewUUID() | ||||
| 	if err == nil { | ||||
| 		uuid[6] = (uuid[6] & 0x0f) | 0x20 // Version 2 | ||||
| 		uuid[9] = byte(domain) | ||||
| 		binary.BigEndian.PutUint32(uuid[0:], id) | ||||
| 	} | ||||
| 	return uuid, err | ||||
| } | ||||
|  | ||||
| // NewDCEPerson returns a DCE Security (Version 2) UUID in the person | ||||
| // domain with the id returned by os.Getuid. | ||||
| // | ||||
| //  NewDCESecurity(Person, uint32(os.Getuid())) | ||||
| func NewDCEPerson() (UUID, error) { | ||||
| 	return NewDCESecurity(Person, uint32(os.Getuid())) | ||||
| } | ||||
|  | ||||
| // NewDCEGroup returns a DCE Security (Version 2) UUID in the group | ||||
| // domain with the id returned by os.Getgid. | ||||
| // | ||||
| //  NewDCESecurity(Group, uint32(os.Getgid())) | ||||
| func NewDCEGroup() (UUID, error) { | ||||
| 	return NewDCESecurity(Group, uint32(os.Getgid())) | ||||
| } | ||||
|  | ||||
| // Domain returns the domain for a Version 2 UUID.  Domains are only defined | ||||
| // for Version 2 UUIDs. | ||||
| func (uuid UUID) Domain() Domain { | ||||
| 	return Domain(uuid[9]) | ||||
| } | ||||
|  | ||||
| // ID returns the id for a Version 2 UUID. IDs are only defined for Version 2 | ||||
| // UUIDs. | ||||
| func (uuid UUID) ID() uint32 { | ||||
| 	return binary.BigEndian.Uint32(uuid[0:4]) | ||||
| } | ||||
|  | ||||
| func (d Domain) String() string { | ||||
| 	switch d { | ||||
| 	case Person: | ||||
| 		return "Person" | ||||
| 	case Group: | ||||
| 		return "Group" | ||||
| 	case Org: | ||||
| 		return "Org" | ||||
| 	} | ||||
| 	return fmt.Sprintf("Domain%d", int(d)) | ||||
| } | ||||
							
								
								
									
										12
									
								
								vendor/github.com/google/uuid/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								vendor/github.com/google/uuid/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| // Copyright 2016 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // Package uuid generates and inspects UUIDs. | ||||
| // | ||||
| // UUIDs are based on RFC 4122 and DCE 1.1: Authentication and Security | ||||
| // Services. | ||||
| // | ||||
| // A UUID is a 16 byte (128 bit) array.  UUIDs may be used as keys to | ||||
| // maps or compared directly. | ||||
| package uuid | ||||
							
								
								
									
										53
									
								
								vendor/github.com/google/uuid/hash.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								vendor/github.com/google/uuid/hash.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| // Copyright 2016 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import ( | ||||
| 	"crypto/md5" | ||||
| 	"crypto/sha1" | ||||
| 	"hash" | ||||
| ) | ||||
|  | ||||
| // Well known namespace IDs and UUIDs | ||||
| var ( | ||||
| 	NameSpaceDNS  = Must(Parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")) | ||||
| 	NameSpaceURL  = Must(Parse("6ba7b811-9dad-11d1-80b4-00c04fd430c8")) | ||||
| 	NameSpaceOID  = Must(Parse("6ba7b812-9dad-11d1-80b4-00c04fd430c8")) | ||||
| 	NameSpaceX500 = Must(Parse("6ba7b814-9dad-11d1-80b4-00c04fd430c8")) | ||||
| 	Nil           UUID // empty UUID, all zeros | ||||
| ) | ||||
|  | ||||
| // NewHash returns a new UUID derived from the hash of space concatenated with | ||||
| // data generated by h.  The hash should be at least 16 byte in length.  The | ||||
| // first 16 bytes of the hash are used to form the UUID.  The version of the | ||||
| // UUID will be the lower 4 bits of version.  NewHash is used to implement | ||||
| // NewMD5 and NewSHA1. | ||||
| func NewHash(h hash.Hash, space UUID, data []byte, version int) UUID { | ||||
| 	h.Reset() | ||||
| 	h.Write(space[:]) //nolint:errcheck | ||||
| 	h.Write(data)     //nolint:errcheck | ||||
| 	s := h.Sum(nil) | ||||
| 	var uuid UUID | ||||
| 	copy(uuid[:], s) | ||||
| 	uuid[6] = (uuid[6] & 0x0f) | uint8((version&0xf)<<4) | ||||
| 	uuid[8] = (uuid[8] & 0x3f) | 0x80 // RFC 4122 variant | ||||
| 	return uuid | ||||
| } | ||||
|  | ||||
| // NewMD5 returns a new MD5 (Version 3) UUID based on the | ||||
| // supplied name space and data.  It is the same as calling: | ||||
| // | ||||
| //  NewHash(md5.New(), space, data, 3) | ||||
| func NewMD5(space UUID, data []byte) UUID { | ||||
| 	return NewHash(md5.New(), space, data, 3) | ||||
| } | ||||
|  | ||||
| // NewSHA1 returns a new SHA1 (Version 5) UUID based on the | ||||
| // supplied name space and data.  It is the same as calling: | ||||
| // | ||||
| //  NewHash(sha1.New(), space, data, 5) | ||||
| func NewSHA1(space UUID, data []byte) UUID { | ||||
| 	return NewHash(sha1.New(), space, data, 5) | ||||
| } | ||||
							
								
								
									
										38
									
								
								vendor/github.com/google/uuid/marshal.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								vendor/github.com/google/uuid/marshal.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | ||||
| // Copyright 2016 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import "fmt" | ||||
|  | ||||
| // MarshalText implements encoding.TextMarshaler. | ||||
| func (uuid UUID) MarshalText() ([]byte, error) { | ||||
| 	var js [36]byte | ||||
| 	encodeHex(js[:], uuid) | ||||
| 	return js[:], nil | ||||
| } | ||||
|  | ||||
| // UnmarshalText implements encoding.TextUnmarshaler. | ||||
| func (uuid *UUID) UnmarshalText(data []byte) error { | ||||
| 	id, err := ParseBytes(data) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*uuid = id | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // MarshalBinary implements encoding.BinaryMarshaler. | ||||
| func (uuid UUID) MarshalBinary() ([]byte, error) { | ||||
| 	return uuid[:], nil | ||||
| } | ||||
|  | ||||
| // UnmarshalBinary implements encoding.BinaryUnmarshaler. | ||||
| func (uuid *UUID) UnmarshalBinary(data []byte) error { | ||||
| 	if len(data) != 16 { | ||||
| 		return fmt.Errorf("invalid UUID (got %d bytes)", len(data)) | ||||
| 	} | ||||
| 	copy(uuid[:], data) | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										90
									
								
								vendor/github.com/google/uuid/node.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								vendor/github.com/google/uuid/node.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,90 @@ | ||||
| // Copyright 2016 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import ( | ||||
| 	"sync" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	nodeMu sync.Mutex | ||||
| 	ifname string  // name of interface being used | ||||
| 	nodeID [6]byte // hardware for version 1 UUIDs | ||||
| 	zeroID [6]byte // nodeID with only 0's | ||||
| ) | ||||
|  | ||||
| // NodeInterface returns the name of the interface from which the NodeID was | ||||
| // derived.  The interface "user" is returned if the NodeID was set by | ||||
| // SetNodeID. | ||||
| func NodeInterface() string { | ||||
| 	defer nodeMu.Unlock() | ||||
| 	nodeMu.Lock() | ||||
| 	return ifname | ||||
| } | ||||
|  | ||||
| // SetNodeInterface selects the hardware address to be used for Version 1 UUIDs. | ||||
| // If name is "" then the first usable interface found will be used or a random | ||||
| // Node ID will be generated.  If a named interface cannot be found then false | ||||
| // is returned. | ||||
| // | ||||
| // SetNodeInterface never fails when name is "". | ||||
| func SetNodeInterface(name string) bool { | ||||
| 	defer nodeMu.Unlock() | ||||
| 	nodeMu.Lock() | ||||
| 	return setNodeInterface(name) | ||||
| } | ||||
|  | ||||
| func setNodeInterface(name string) bool { | ||||
| 	iname, addr := getHardwareInterface(name) // null implementation for js | ||||
| 	if iname != "" && addr != nil { | ||||
| 		ifname = iname | ||||
| 		copy(nodeID[:], addr) | ||||
| 		return true | ||||
| 	} | ||||
|  | ||||
| 	// We found no interfaces with a valid hardware address.  If name | ||||
| 	// does not specify a specific interface generate a random Node ID | ||||
| 	// (section 4.1.6) | ||||
| 	if name == "" { | ||||
| 		ifname = "random" | ||||
| 		randomBits(nodeID[:]) | ||||
| 		return true | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // NodeID returns a slice of a copy of the current Node ID, setting the Node ID | ||||
| // if not already set. | ||||
| func NodeID() []byte { | ||||
| 	defer nodeMu.Unlock() | ||||
| 	nodeMu.Lock() | ||||
| 	if nodeID == zeroID { | ||||
| 		setNodeInterface("") | ||||
| 	} | ||||
| 	nid := nodeID | ||||
| 	return nid[:] | ||||
| } | ||||
|  | ||||
| // SetNodeID sets the Node ID to be used for Version 1 UUIDs.  The first 6 bytes | ||||
| // of id are used.  If id is less than 6 bytes then false is returned and the | ||||
| // Node ID is not set. | ||||
| func SetNodeID(id []byte) bool { | ||||
| 	if len(id) < 6 { | ||||
| 		return false | ||||
| 	} | ||||
| 	defer nodeMu.Unlock() | ||||
| 	nodeMu.Lock() | ||||
| 	copy(nodeID[:], id) | ||||
| 	ifname = "user" | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // NodeID returns the 6 byte node id encoded in uuid.  It returns nil if uuid is | ||||
| // not valid.  The NodeID is only well defined for version 1 and 2 UUIDs. | ||||
| func (uuid UUID) NodeID() []byte { | ||||
| 	var node [6]byte | ||||
| 	copy(node[:], uuid[10:]) | ||||
| 	return node[:] | ||||
| } | ||||
							
								
								
									
										12
									
								
								vendor/github.com/google/uuid/node_js.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								vendor/github.com/google/uuid/node_js.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| // Copyright 2017 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // +build js | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| // getHardwareInterface returns nil values for the JS version of the code. | ||||
| // This remvoves the "net" dependency, because it is not used in the browser. | ||||
| // Using the "net" library inflates the size of the transpiled JS code by 673k bytes. | ||||
| func getHardwareInterface(name string) (string, []byte) { return "", nil } | ||||
							
								
								
									
										33
									
								
								vendor/github.com/google/uuid/node_net.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								vendor/github.com/google/uuid/node_net.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| // Copyright 2017 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // +build !js | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import "net" | ||||
|  | ||||
| var interfaces []net.Interface // cached list of interfaces | ||||
|  | ||||
| // getHardwareInterface returns the name and hardware address of interface name. | ||||
| // If name is "" then the name and hardware address of one of the system's | ||||
| // interfaces is returned.  If no interfaces are found (name does not exist or | ||||
| // there are no interfaces) then "", nil is returned. | ||||
| // | ||||
| // Only addresses of at least 6 bytes are returned. | ||||
| func getHardwareInterface(name string) (string, []byte) { | ||||
| 	if interfaces == nil { | ||||
| 		var err error | ||||
| 		interfaces, err = net.Interfaces() | ||||
| 		if err != nil { | ||||
| 			return "", nil | ||||
| 		} | ||||
| 	} | ||||
| 	for _, ifs := range interfaces { | ||||
| 		if len(ifs.HardwareAddr) >= 6 && (name == "" || name == ifs.Name) { | ||||
| 			return ifs.Name, ifs.HardwareAddr | ||||
| 		} | ||||
| 	} | ||||
| 	return "", nil | ||||
| } | ||||
							
								
								
									
										118
									
								
								vendor/github.com/google/uuid/null.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								vendor/github.com/google/uuid/null.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,118 @@ | ||||
| // Copyright 2021 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"database/sql/driver" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| ) | ||||
|  | ||||
| var jsonNull = []byte("null") | ||||
|  | ||||
| // NullUUID represents a UUID that may be null. | ||||
| // NullUUID implements the SQL driver.Scanner interface so | ||||
| // it can be used as a scan destination: | ||||
| // | ||||
| //  var u uuid.NullUUID | ||||
| //  err := db.QueryRow("SELECT name FROM foo WHERE id=?", id).Scan(&u) | ||||
| //  ... | ||||
| //  if u.Valid { | ||||
| //     // use u.UUID | ||||
| //  } else { | ||||
| //     // NULL value | ||||
| //  } | ||||
| // | ||||
| type NullUUID struct { | ||||
| 	UUID  UUID | ||||
| 	Valid bool // Valid is true if UUID is not NULL | ||||
| } | ||||
|  | ||||
| // Scan implements the SQL driver.Scanner interface. | ||||
| func (nu *NullUUID) Scan(value interface{}) error { | ||||
| 	if value == nil { | ||||
| 		nu.UUID, nu.Valid = Nil, false | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	err := nu.UUID.Scan(value) | ||||
| 	if err != nil { | ||||
| 		nu.Valid = false | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	nu.Valid = true | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Value implements the driver Valuer interface. | ||||
| func (nu NullUUID) Value() (driver.Value, error) { | ||||
| 	if !nu.Valid { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 	// Delegate to UUID Value function | ||||
| 	return nu.UUID.Value() | ||||
| } | ||||
|  | ||||
| // MarshalBinary implements encoding.BinaryMarshaler. | ||||
| func (nu NullUUID) MarshalBinary() ([]byte, error) { | ||||
| 	if nu.Valid { | ||||
| 		return nu.UUID[:], nil | ||||
| 	} | ||||
|  | ||||
| 	return []byte(nil), nil | ||||
| } | ||||
|  | ||||
| // UnmarshalBinary implements encoding.BinaryUnmarshaler. | ||||
| func (nu *NullUUID) UnmarshalBinary(data []byte) error { | ||||
| 	if len(data) != 16 { | ||||
| 		return fmt.Errorf("invalid UUID (got %d bytes)", len(data)) | ||||
| 	} | ||||
| 	copy(nu.UUID[:], data) | ||||
| 	nu.Valid = true | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // MarshalText implements encoding.TextMarshaler. | ||||
| func (nu NullUUID) MarshalText() ([]byte, error) { | ||||
| 	if nu.Valid { | ||||
| 		return nu.UUID.MarshalText() | ||||
| 	} | ||||
|  | ||||
| 	return jsonNull, nil | ||||
| } | ||||
|  | ||||
| // UnmarshalText implements encoding.TextUnmarshaler. | ||||
| func (nu *NullUUID) UnmarshalText(data []byte) error { | ||||
| 	id, err := ParseBytes(data) | ||||
| 	if err != nil { | ||||
| 		nu.Valid = false | ||||
| 		return err | ||||
| 	} | ||||
| 	nu.UUID = id | ||||
| 	nu.Valid = true | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // MarshalJSON implements json.Marshaler. | ||||
| func (nu NullUUID) MarshalJSON() ([]byte, error) { | ||||
| 	if nu.Valid { | ||||
| 		return json.Marshal(nu.UUID) | ||||
| 	} | ||||
|  | ||||
| 	return jsonNull, nil | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON implements json.Unmarshaler. | ||||
| func (nu *NullUUID) UnmarshalJSON(data []byte) error { | ||||
| 	if bytes.Equal(data, jsonNull) { | ||||
| 		*nu = NullUUID{} | ||||
| 		return nil // valid null UUID | ||||
| 	} | ||||
| 	err := json.Unmarshal(data, &nu.UUID) | ||||
| 	nu.Valid = err == nil | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										59
									
								
								vendor/github.com/google/uuid/sql.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								vendor/github.com/google/uuid/sql.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | ||||
| // Copyright 2016 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import ( | ||||
| 	"database/sql/driver" | ||||
| 	"fmt" | ||||
| ) | ||||
|  | ||||
| // Scan implements sql.Scanner so UUIDs can be read from databases transparently. | ||||
| // Currently, database types that map to string and []byte are supported. Please | ||||
| // consult database-specific driver documentation for matching types. | ||||
| func (uuid *UUID) Scan(src interface{}) error { | ||||
| 	switch src := src.(type) { | ||||
| 	case nil: | ||||
| 		return nil | ||||
|  | ||||
| 	case string: | ||||
| 		// if an empty UUID comes from a table, we return a null UUID | ||||
| 		if src == "" { | ||||
| 			return nil | ||||
| 		} | ||||
|  | ||||
| 		// see Parse for required string format | ||||
| 		u, err := Parse(src) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("Scan: %v", err) | ||||
| 		} | ||||
|  | ||||
| 		*uuid = u | ||||
|  | ||||
| 	case []byte: | ||||
| 		// if an empty UUID comes from a table, we return a null UUID | ||||
| 		if len(src) == 0 { | ||||
| 			return nil | ||||
| 		} | ||||
|  | ||||
| 		// assumes a simple slice of bytes if 16 bytes | ||||
| 		// otherwise attempts to parse | ||||
| 		if len(src) != 16 { | ||||
| 			return uuid.Scan(string(src)) | ||||
| 		} | ||||
| 		copy((*uuid)[:], src) | ||||
|  | ||||
| 	default: | ||||
| 		return fmt.Errorf("Scan: unable to scan type %T into UUID", src) | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Value implements sql.Valuer so that UUIDs can be written to databases | ||||
| // transparently. Currently, UUIDs map to strings. Please consult | ||||
| // database-specific driver documentation for matching types. | ||||
| func (uuid UUID) Value() (driver.Value, error) { | ||||
| 	return uuid.String(), nil | ||||
| } | ||||
							
								
								
									
										123
									
								
								vendor/github.com/google/uuid/time.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								vendor/github.com/google/uuid/time.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,123 @@ | ||||
| // Copyright 2016 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // A Time represents a time as the number of 100's of nanoseconds since 15 Oct | ||||
| // 1582. | ||||
| type Time int64 | ||||
|  | ||||
| const ( | ||||
| 	lillian    = 2299160          // Julian day of 15 Oct 1582 | ||||
| 	unix       = 2440587          // Julian day of 1 Jan 1970 | ||||
| 	epoch      = unix - lillian   // Days between epochs | ||||
| 	g1582      = epoch * 86400    // seconds between epochs | ||||
| 	g1582ns100 = g1582 * 10000000 // 100s of a nanoseconds between epochs | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	timeMu   sync.Mutex | ||||
| 	lasttime uint64 // last time we returned | ||||
| 	clockSeq uint16 // clock sequence for this run | ||||
|  | ||||
| 	timeNow = time.Now // for testing | ||||
| ) | ||||
|  | ||||
| // UnixTime converts t the number of seconds and nanoseconds using the Unix | ||||
| // epoch of 1 Jan 1970. | ||||
| func (t Time) UnixTime() (sec, nsec int64) { | ||||
| 	sec = int64(t - g1582ns100) | ||||
| 	nsec = (sec % 10000000) * 100 | ||||
| 	sec /= 10000000 | ||||
| 	return sec, nsec | ||||
| } | ||||
|  | ||||
| // GetTime returns the current Time (100s of nanoseconds since 15 Oct 1582) and | ||||
| // clock sequence as well as adjusting the clock sequence as needed.  An error | ||||
| // is returned if the current time cannot be determined. | ||||
| func GetTime() (Time, uint16, error) { | ||||
| 	defer timeMu.Unlock() | ||||
| 	timeMu.Lock() | ||||
| 	return getTime() | ||||
| } | ||||
|  | ||||
| func getTime() (Time, uint16, error) { | ||||
| 	t := timeNow() | ||||
|  | ||||
| 	// If we don't have a clock sequence already, set one. | ||||
| 	if clockSeq == 0 { | ||||
| 		setClockSequence(-1) | ||||
| 	} | ||||
| 	now := uint64(t.UnixNano()/100) + g1582ns100 | ||||
|  | ||||
| 	// If time has gone backwards with this clock sequence then we | ||||
| 	// increment the clock sequence | ||||
| 	if now <= lasttime { | ||||
| 		clockSeq = ((clockSeq + 1) & 0x3fff) | 0x8000 | ||||
| 	} | ||||
| 	lasttime = now | ||||
| 	return Time(now), clockSeq, nil | ||||
| } | ||||
|  | ||||
| // ClockSequence returns the current clock sequence, generating one if not | ||||
| // already set.  The clock sequence is only used for Version 1 UUIDs. | ||||
| // | ||||
| // The uuid package does not use global static storage for the clock sequence or | ||||
| // the last time a UUID was generated.  Unless SetClockSequence is used, a new | ||||
| // random clock sequence is generated the first time a clock sequence is | ||||
| // requested by ClockSequence, GetTime, or NewUUID.  (section 4.2.1.1) | ||||
| func ClockSequence() int { | ||||
| 	defer timeMu.Unlock() | ||||
| 	timeMu.Lock() | ||||
| 	return clockSequence() | ||||
| } | ||||
|  | ||||
| func clockSequence() int { | ||||
| 	if clockSeq == 0 { | ||||
| 		setClockSequence(-1) | ||||
| 	} | ||||
| 	return int(clockSeq & 0x3fff) | ||||
| } | ||||
|  | ||||
| // SetClockSequence sets the clock sequence to the lower 14 bits of seq.  Setting to | ||||
| // -1 causes a new sequence to be generated. | ||||
| func SetClockSequence(seq int) { | ||||
| 	defer timeMu.Unlock() | ||||
| 	timeMu.Lock() | ||||
| 	setClockSequence(seq) | ||||
| } | ||||
|  | ||||
| func setClockSequence(seq int) { | ||||
| 	if seq == -1 { | ||||
| 		var b [2]byte | ||||
| 		randomBits(b[:]) // clock sequence | ||||
| 		seq = int(b[0])<<8 | int(b[1]) | ||||
| 	} | ||||
| 	oldSeq := clockSeq | ||||
| 	clockSeq = uint16(seq&0x3fff) | 0x8000 // Set our variant | ||||
| 	if oldSeq != clockSeq { | ||||
| 		lasttime = 0 | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Time returns the time in 100s of nanoseconds since 15 Oct 1582 encoded in | ||||
| // uuid.  The time is only defined for version 1 and 2 UUIDs. | ||||
| func (uuid UUID) Time() Time { | ||||
| 	time := int64(binary.BigEndian.Uint32(uuid[0:4])) | ||||
| 	time |= int64(binary.BigEndian.Uint16(uuid[4:6])) << 32 | ||||
| 	time |= int64(binary.BigEndian.Uint16(uuid[6:8])&0xfff) << 48 | ||||
| 	return Time(time) | ||||
| } | ||||
|  | ||||
| // ClockSequence returns the clock sequence encoded in uuid. | ||||
| // The clock sequence is only well defined for version 1 and 2 UUIDs. | ||||
| func (uuid UUID) ClockSequence() int { | ||||
| 	return int(binary.BigEndian.Uint16(uuid[8:10])) & 0x3fff | ||||
| } | ||||
							
								
								
									
										43
									
								
								vendor/github.com/google/uuid/util.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								vendor/github.com/google/uuid/util.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| // Copyright 2016 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
| ) | ||||
|  | ||||
| // randomBits completely fills slice b with random data. | ||||
| func randomBits(b []byte) { | ||||
| 	if _, err := io.ReadFull(rander, b); err != nil { | ||||
| 		panic(err.Error()) // rand should never fail | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // xvalues returns the value of a byte as a hexadecimal digit or 255. | ||||
| var xvalues = [256]byte{ | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| 	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, | ||||
| } | ||||
|  | ||||
| // xtob converts hex characters x1 and x2 into a byte. | ||||
| func xtob(x1, x2 byte) (byte, bool) { | ||||
| 	b1 := xvalues[x1] | ||||
| 	b2 := xvalues[x2] | ||||
| 	return (b1 << 4) | b2, b1 != 255 && b2 != 255 | ||||
| } | ||||
							
								
								
									
										294
									
								
								vendor/github.com/google/uuid/uuid.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										294
									
								
								vendor/github.com/google/uuid/uuid.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,294 @@ | ||||
| // Copyright 2018 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"crypto/rand" | ||||
| 	"encoding/hex" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| ) | ||||
|  | ||||
| // A UUID is a 128 bit (16 byte) Universal Unique IDentifier as defined in RFC | ||||
| // 4122. | ||||
| type UUID [16]byte | ||||
|  | ||||
| // A Version represents a UUID's version. | ||||
| type Version byte | ||||
|  | ||||
| // A Variant represents a UUID's variant. | ||||
| type Variant byte | ||||
|  | ||||
| // Constants returned by Variant. | ||||
| const ( | ||||
| 	Invalid   = Variant(iota) // Invalid UUID | ||||
| 	RFC4122                   // The variant specified in RFC4122 | ||||
| 	Reserved                  // Reserved, NCS backward compatibility. | ||||
| 	Microsoft                 // Reserved, Microsoft Corporation backward compatibility. | ||||
| 	Future                    // Reserved for future definition. | ||||
| ) | ||||
|  | ||||
| const randPoolSize = 16 * 16 | ||||
|  | ||||
| var ( | ||||
| 	rander      = rand.Reader // random function | ||||
| 	poolEnabled = false | ||||
| 	poolMu      sync.Mutex | ||||
| 	poolPos     = randPoolSize     // protected with poolMu | ||||
| 	pool        [randPoolSize]byte // protected with poolMu | ||||
| ) | ||||
|  | ||||
| type invalidLengthError struct{ len int } | ||||
|  | ||||
| func (err invalidLengthError) Error() string { | ||||
| 	return fmt.Sprintf("invalid UUID length: %d", err.len) | ||||
| } | ||||
|  | ||||
| // IsInvalidLengthError is matcher function for custom error invalidLengthError | ||||
| func IsInvalidLengthError(err error) bool { | ||||
| 	_, ok := err.(invalidLengthError) | ||||
| 	return ok | ||||
| } | ||||
|  | ||||
| // Parse decodes s into a UUID or returns an error.  Both the standard UUID | ||||
| // forms of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and | ||||
| // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx are decoded as well as the | ||||
| // Microsoft encoding {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} and the raw hex | ||||
| // encoding: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. | ||||
| func Parse(s string) (UUID, error) { | ||||
| 	var uuid UUID | ||||
| 	switch len(s) { | ||||
| 	// xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | ||||
| 	case 36: | ||||
|  | ||||
| 	// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | ||||
| 	case 36 + 9: | ||||
| 		if strings.ToLower(s[:9]) != "urn:uuid:" { | ||||
| 			return uuid, fmt.Errorf("invalid urn prefix: %q", s[:9]) | ||||
| 		} | ||||
| 		s = s[9:] | ||||
|  | ||||
| 	// {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} | ||||
| 	case 36 + 2: | ||||
| 		s = s[1:] | ||||
|  | ||||
| 	// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | ||||
| 	case 32: | ||||
| 		var ok bool | ||||
| 		for i := range uuid { | ||||
| 			uuid[i], ok = xtob(s[i*2], s[i*2+1]) | ||||
| 			if !ok { | ||||
| 				return uuid, errors.New("invalid UUID format") | ||||
| 			} | ||||
| 		} | ||||
| 		return uuid, nil | ||||
| 	default: | ||||
| 		return uuid, invalidLengthError{len(s)} | ||||
| 	} | ||||
| 	// s is now at least 36 bytes long | ||||
| 	// it must be of the form  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | ||||
| 	if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' { | ||||
| 		return uuid, errors.New("invalid UUID format") | ||||
| 	} | ||||
| 	for i, x := range [16]int{ | ||||
| 		0, 2, 4, 6, | ||||
| 		9, 11, | ||||
| 		14, 16, | ||||
| 		19, 21, | ||||
| 		24, 26, 28, 30, 32, 34} { | ||||
| 		v, ok := xtob(s[x], s[x+1]) | ||||
| 		if !ok { | ||||
| 			return uuid, errors.New("invalid UUID format") | ||||
| 		} | ||||
| 		uuid[i] = v | ||||
| 	} | ||||
| 	return uuid, nil | ||||
| } | ||||
|  | ||||
| // ParseBytes is like Parse, except it parses a byte slice instead of a string. | ||||
| func ParseBytes(b []byte) (UUID, error) { | ||||
| 	var uuid UUID | ||||
| 	switch len(b) { | ||||
| 	case 36: // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | ||||
| 	case 36 + 9: // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | ||||
| 		if !bytes.Equal(bytes.ToLower(b[:9]), []byte("urn:uuid:")) { | ||||
| 			return uuid, fmt.Errorf("invalid urn prefix: %q", b[:9]) | ||||
| 		} | ||||
| 		b = b[9:] | ||||
| 	case 36 + 2: // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} | ||||
| 		b = b[1:] | ||||
| 	case 32: // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | ||||
| 		var ok bool | ||||
| 		for i := 0; i < 32; i += 2 { | ||||
| 			uuid[i/2], ok = xtob(b[i], b[i+1]) | ||||
| 			if !ok { | ||||
| 				return uuid, errors.New("invalid UUID format") | ||||
| 			} | ||||
| 		} | ||||
| 		return uuid, nil | ||||
| 	default: | ||||
| 		return uuid, invalidLengthError{len(b)} | ||||
| 	} | ||||
| 	// s is now at least 36 bytes long | ||||
| 	// it must be of the form  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | ||||
| 	if b[8] != '-' || b[13] != '-' || b[18] != '-' || b[23] != '-' { | ||||
| 		return uuid, errors.New("invalid UUID format") | ||||
| 	} | ||||
| 	for i, x := range [16]int{ | ||||
| 		0, 2, 4, 6, | ||||
| 		9, 11, | ||||
| 		14, 16, | ||||
| 		19, 21, | ||||
| 		24, 26, 28, 30, 32, 34} { | ||||
| 		v, ok := xtob(b[x], b[x+1]) | ||||
| 		if !ok { | ||||
| 			return uuid, errors.New("invalid UUID format") | ||||
| 		} | ||||
| 		uuid[i] = v | ||||
| 	} | ||||
| 	return uuid, nil | ||||
| } | ||||
|  | ||||
| // MustParse is like Parse but panics if the string cannot be parsed. | ||||
| // It simplifies safe initialization of global variables holding compiled UUIDs. | ||||
| func MustParse(s string) UUID { | ||||
| 	uuid, err := Parse(s) | ||||
| 	if err != nil { | ||||
| 		panic(`uuid: Parse(` + s + `): ` + err.Error()) | ||||
| 	} | ||||
| 	return uuid | ||||
| } | ||||
|  | ||||
| // FromBytes creates a new UUID from a byte slice. Returns an error if the slice | ||||
| // does not have a length of 16. The bytes are copied from the slice. | ||||
| func FromBytes(b []byte) (uuid UUID, err error) { | ||||
| 	err = uuid.UnmarshalBinary(b) | ||||
| 	return uuid, err | ||||
| } | ||||
|  | ||||
| // Must returns uuid if err is nil and panics otherwise. | ||||
| func Must(uuid UUID, err error) UUID { | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return uuid | ||||
| } | ||||
|  | ||||
| // String returns the string form of uuid, xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | ||||
| // , or "" if uuid is invalid. | ||||
| func (uuid UUID) String() string { | ||||
| 	var buf [36]byte | ||||
| 	encodeHex(buf[:], uuid) | ||||
| 	return string(buf[:]) | ||||
| } | ||||
|  | ||||
| // URN returns the RFC 2141 URN form of uuid, | ||||
| // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,  or "" if uuid is invalid. | ||||
| func (uuid UUID) URN() string { | ||||
| 	var buf [36 + 9]byte | ||||
| 	copy(buf[:], "urn:uuid:") | ||||
| 	encodeHex(buf[9:], uuid) | ||||
| 	return string(buf[:]) | ||||
| } | ||||
|  | ||||
| func encodeHex(dst []byte, uuid UUID) { | ||||
| 	hex.Encode(dst, uuid[:4]) | ||||
| 	dst[8] = '-' | ||||
| 	hex.Encode(dst[9:13], uuid[4:6]) | ||||
| 	dst[13] = '-' | ||||
| 	hex.Encode(dst[14:18], uuid[6:8]) | ||||
| 	dst[18] = '-' | ||||
| 	hex.Encode(dst[19:23], uuid[8:10]) | ||||
| 	dst[23] = '-' | ||||
| 	hex.Encode(dst[24:], uuid[10:]) | ||||
| } | ||||
|  | ||||
| // Variant returns the variant encoded in uuid. | ||||
| func (uuid UUID) Variant() Variant { | ||||
| 	switch { | ||||
| 	case (uuid[8] & 0xc0) == 0x80: | ||||
| 		return RFC4122 | ||||
| 	case (uuid[8] & 0xe0) == 0xc0: | ||||
| 		return Microsoft | ||||
| 	case (uuid[8] & 0xe0) == 0xe0: | ||||
| 		return Future | ||||
| 	default: | ||||
| 		return Reserved | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Version returns the version of uuid. | ||||
| func (uuid UUID) Version() Version { | ||||
| 	return Version(uuid[6] >> 4) | ||||
| } | ||||
|  | ||||
| func (v Version) String() string { | ||||
| 	if v > 15 { | ||||
| 		return fmt.Sprintf("BAD_VERSION_%d", v) | ||||
| 	} | ||||
| 	return fmt.Sprintf("VERSION_%d", v) | ||||
| } | ||||
|  | ||||
| func (v Variant) String() string { | ||||
| 	switch v { | ||||
| 	case RFC4122: | ||||
| 		return "RFC4122" | ||||
| 	case Reserved: | ||||
| 		return "Reserved" | ||||
| 	case Microsoft: | ||||
| 		return "Microsoft" | ||||
| 	case Future: | ||||
| 		return "Future" | ||||
| 	case Invalid: | ||||
| 		return "Invalid" | ||||
| 	} | ||||
| 	return fmt.Sprintf("BadVariant%d", int(v)) | ||||
| } | ||||
|  | ||||
| // SetRand sets the random number generator to r, which implements io.Reader. | ||||
| // If r.Read returns an error when the package requests random data then | ||||
| // a panic will be issued. | ||||
| // | ||||
| // Calling SetRand with nil sets the random number generator to the default | ||||
| // generator. | ||||
| func SetRand(r io.Reader) { | ||||
| 	if r == nil { | ||||
| 		rander = rand.Reader | ||||
| 		return | ||||
| 	} | ||||
| 	rander = r | ||||
| } | ||||
|  | ||||
| // EnableRandPool enables internal randomness pool used for Random | ||||
| // (Version 4) UUID generation. The pool contains random bytes read from | ||||
| // the random number generator on demand in batches. Enabling the pool | ||||
| // may improve the UUID generation throughput significantly. | ||||
| // | ||||
| // Since the pool is stored on the Go heap, this feature may be a bad fit | ||||
| // for security sensitive applications. | ||||
| // | ||||
| // Both EnableRandPool and DisableRandPool are not thread-safe and should | ||||
| // only be called when there is no possibility that New or any other | ||||
| // UUID Version 4 generation function will be called concurrently. | ||||
| func EnableRandPool() { | ||||
| 	poolEnabled = true | ||||
| } | ||||
|  | ||||
| // DisableRandPool disables the randomness pool if it was previously | ||||
| // enabled with EnableRandPool. | ||||
| // | ||||
| // Both EnableRandPool and DisableRandPool are not thread-safe and should | ||||
| // only be called when there is no possibility that New or any other | ||||
| // UUID Version 4 generation function will be called concurrently. | ||||
| func DisableRandPool() { | ||||
| 	poolEnabled = false | ||||
| 	defer poolMu.Unlock() | ||||
| 	poolMu.Lock() | ||||
| 	poolPos = randPoolSize | ||||
| } | ||||
							
								
								
									
										44
									
								
								vendor/github.com/google/uuid/version1.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								vendor/github.com/google/uuid/version1.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| // Copyright 2016 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| ) | ||||
|  | ||||
| // NewUUID returns a Version 1 UUID based on the current NodeID and clock | ||||
| // sequence, and the current time.  If the NodeID has not been set by SetNodeID | ||||
| // or SetNodeInterface then it will be set automatically.  If the NodeID cannot | ||||
| // be set NewUUID returns nil.  If clock sequence has not been set by | ||||
| // SetClockSequence then it will be set automatically.  If GetTime fails to | ||||
| // return the current NewUUID returns nil and an error. | ||||
| // | ||||
| // In most cases, New should be used. | ||||
| func NewUUID() (UUID, error) { | ||||
| 	var uuid UUID | ||||
| 	now, seq, err := GetTime() | ||||
| 	if err != nil { | ||||
| 		return uuid, err | ||||
| 	} | ||||
|  | ||||
| 	timeLow := uint32(now & 0xffffffff) | ||||
| 	timeMid := uint16((now >> 32) & 0xffff) | ||||
| 	timeHi := uint16((now >> 48) & 0x0fff) | ||||
| 	timeHi |= 0x1000 // Version 1 | ||||
|  | ||||
| 	binary.BigEndian.PutUint32(uuid[0:], timeLow) | ||||
| 	binary.BigEndian.PutUint16(uuid[4:], timeMid) | ||||
| 	binary.BigEndian.PutUint16(uuid[6:], timeHi) | ||||
| 	binary.BigEndian.PutUint16(uuid[8:], seq) | ||||
|  | ||||
| 	nodeMu.Lock() | ||||
| 	if nodeID == zeroID { | ||||
| 		setNodeInterface("") | ||||
| 	} | ||||
| 	copy(uuid[10:], nodeID[:]) | ||||
| 	nodeMu.Unlock() | ||||
|  | ||||
| 	return uuid, nil | ||||
| } | ||||
							
								
								
									
										76
									
								
								vendor/github.com/google/uuid/version4.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								vendor/github.com/google/uuid/version4.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | ||||
| // Copyright 2016 Google Inc.  All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package uuid | ||||
|  | ||||
| import "io" | ||||
|  | ||||
| // New creates a new random UUID or panics.  New is equivalent to | ||||
| // the expression | ||||
| // | ||||
| //    uuid.Must(uuid.NewRandom()) | ||||
| func New() UUID { | ||||
| 	return Must(NewRandom()) | ||||
| } | ||||
|  | ||||
| // NewString creates a new random UUID and returns it as a string or panics. | ||||
| // NewString is equivalent to the expression | ||||
| // | ||||
| //    uuid.New().String() | ||||
| func NewString() string { | ||||
| 	return Must(NewRandom()).String() | ||||
| } | ||||
|  | ||||
| // NewRandom returns a Random (Version 4) UUID. | ||||
| // | ||||
| // The strength of the UUIDs is based on the strength of the crypto/rand | ||||
| // package. | ||||
| // | ||||
| // Uses the randomness pool if it was enabled with EnableRandPool. | ||||
| // | ||||
| // A note about uniqueness derived from the UUID Wikipedia entry: | ||||
| // | ||||
| //  Randomly generated UUIDs have 122 random bits.  One's annual risk of being | ||||
| //  hit by a meteorite is estimated to be one chance in 17 billion, that | ||||
| //  means the probability is about 0.00000000006 (6 × 10−11), | ||||
| //  equivalent to the odds of creating a few tens of trillions of UUIDs in a | ||||
| //  year and having one duplicate. | ||||
| func NewRandom() (UUID, error) { | ||||
| 	if !poolEnabled { | ||||
| 		return NewRandomFromReader(rander) | ||||
| 	} | ||||
| 	return newRandomFromPool() | ||||
| } | ||||
|  | ||||
| // NewRandomFromReader returns a UUID based on bytes read from a given io.Reader. | ||||
| func NewRandomFromReader(r io.Reader) (UUID, error) { | ||||
| 	var uuid UUID | ||||
| 	_, err := io.ReadFull(r, uuid[:]) | ||||
| 	if err != nil { | ||||
| 		return Nil, err | ||||
| 	} | ||||
| 	uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4 | ||||
| 	uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 | ||||
| 	return uuid, nil | ||||
| } | ||||
|  | ||||
| func newRandomFromPool() (UUID, error) { | ||||
| 	var uuid UUID | ||||
| 	poolMu.Lock() | ||||
| 	if poolPos == randPoolSize { | ||||
| 		_, err := io.ReadFull(rander, pool[:]) | ||||
| 		if err != nil { | ||||
| 			poolMu.Unlock() | ||||
| 			return Nil, err | ||||
| 		} | ||||
| 		poolPos = 0 | ||||
| 	} | ||||
| 	copy(uuid[:], pool[poolPos:(poolPos+16)]) | ||||
| 	poolPos += 16 | ||||
| 	poolMu.Unlock() | ||||
|  | ||||
| 	uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4 | ||||
| 	uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 | ||||
| 	return uuid, nil | ||||
| } | ||||
							
								
								
									
										14
									
								
								vendor/github.com/mattn/go-isatty/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/github.com/mattn/go-isatty/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,14 +0,0 @@ | ||||
| language: go | ||||
| sudo: false | ||||
| go: | ||||
|   - 1.13.x | ||||
|   - tip | ||||
|  | ||||
| before_install: | ||||
|   - go get -t -v ./... | ||||
|  | ||||
| script: | ||||
|   - ./go.test.sh | ||||
|  | ||||
| after_success: | ||||
|   - bash <(curl -s https://codecov.io/bash) | ||||
							
								
								
									
										1
									
								
								vendor/github.com/mattn/go-isatty/isatty_bsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/mattn/go-isatty/isatty_bsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,3 +1,4 @@ | ||||
| //go:build (darwin || freebsd || openbsd || netbsd || dragonfly) && !appengine | ||||
| // +build darwin freebsd openbsd netbsd dragonfly | ||||
| // +build !appengine | ||||
|  | ||||
|  | ||||
							
								
								
									
										3
									
								
								vendor/github.com/mattn/go-isatty/isatty_others.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/mattn/go-isatty/isatty_others.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,4 +1,5 @@ | ||||
| // +build appengine js nacl | ||||
| //go:build appengine || js || nacl || wasm | ||||
| // +build appengine js nacl wasm | ||||
|  | ||||
| package isatty | ||||
|  | ||||
|  | ||||
							
								
								
									
										1
									
								
								vendor/github.com/mattn/go-isatty/isatty_plan9.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/mattn/go-isatty/isatty_plan9.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,3 +1,4 @@ | ||||
| //go:build plan9 | ||||
| // +build plan9 | ||||
|  | ||||
| package isatty | ||||
|  | ||||
							
								
								
									
										9
									
								
								vendor/github.com/mattn/go-isatty/isatty_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/mattn/go-isatty/isatty_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,5 +1,5 @@ | ||||
| // +build solaris | ||||
| // +build !appengine | ||||
| //go:build solaris && !appengine | ||||
| // +build solaris,!appengine | ||||
|  | ||||
| package isatty | ||||
|  | ||||
| @ -8,10 +8,9 @@ import ( | ||||
| ) | ||||
|  | ||||
| // IsTerminal returns true if the given file descriptor is a terminal. | ||||
| // see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c | ||||
| // see: https://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/isatty.c | ||||
| func IsTerminal(fd uintptr) bool { | ||||
| 	var termio unix.Termio | ||||
| 	err := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio) | ||||
| 	_, err := unix.IoctlGetTermio(int(fd), unix.TCGETA) | ||||
| 	return err == nil | ||||
| } | ||||
|  | ||||
|  | ||||
							
								
								
									
										3
									
								
								vendor/github.com/mattn/go-isatty/isatty_tcgets.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/mattn/go-isatty/isatty_tcgets.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,4 +1,5 @@ | ||||
| // +build linux aix | ||||
| //go:build (linux || aix || zos) && !appengine | ||||
| // +build linux aix zos | ||||
| // +build !appengine | ||||
|  | ||||
| package isatty | ||||
|  | ||||
							
								
								
									
										6
									
								
								vendor/github.com/mattn/go-isatty/isatty_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/mattn/go-isatty/isatty_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,5 +1,5 @@ | ||||
| // +build windows | ||||
| // +build !appengine | ||||
| //go:build windows && !appengine | ||||
| // +build windows,!appengine | ||||
|  | ||||
| package isatty | ||||
|  | ||||
| @ -76,7 +76,7 @@ func isCygwinPipeName(name string) bool { | ||||
| } | ||||
|  | ||||
| // getFileNameByHandle use the undocomented ntdll NtQueryObject to get file full name from file handler | ||||
| // since GetFileInformationByHandleEx is not avilable under windows Vista and still some old fashion | ||||
| // since GetFileInformationByHandleEx is not available under windows Vista and still some old fashion | ||||
| // guys are using Windows XP, this is a workaround for those guys, it will also work on system from | ||||
| // Windows vista to 10 | ||||
| // see https://stackoverflow.com/a/18792477 for details | ||||
|  | ||||
							
								
								
									
										8
									
								
								vendor/github.com/mattn/go-isatty/renovate.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/mattn/go-isatty/renovate.json
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,8 +0,0 @@ | ||||
| { | ||||
|   "extends": [ | ||||
|     "config:base" | ||||
|   ], | ||||
|   "postUpdateOptions": [ | ||||
|     "gomodTidy" | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										17
									
								
								vendor/github.com/miekg/dns/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								vendor/github.com/miekg/dns/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,17 +0,0 @@ | ||||
| language: go | ||||
| sudo: false | ||||
|  | ||||
| go: | ||||
|   - 1.14.x | ||||
|   - 1.15.x | ||||
|   - tip | ||||
|  | ||||
| env: | ||||
|   - GO111MODULE=on | ||||
|  | ||||
| script: | ||||
|   - go generate ./... && test `git ls-files --modified | wc -l` = 0 | ||||
|   - go test -race -v -bench=. -coverprofile=coverage.txt -covermode=atomic ./... | ||||
|  | ||||
| after_success: | ||||
|   - bash <(curl -s https://codecov.io/bash) | ||||
							
								
								
									
										2
									
								
								vendor/github.com/miekg/dns/Makefile.release
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/miekg/dns/Makefile.release
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,7 +1,7 @@ | ||||
| # Makefile for releasing. | ||||
| # | ||||
| # The release is controlled from version.go. The version found there is | ||||
| # used to tag the git repo, we're not building any artifects so there is nothing | ||||
| # used to tag the git repo, we're not building any artifacts so there is nothing | ||||
| # to upload to github. | ||||
| # | ||||
| # * Up the version in version.go | ||||
|  | ||||
							
								
								
									
										8
									
								
								vendor/github.com/miekg/dns/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/miekg/dns/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -69,6 +69,11 @@ A not-so-up-to-date-list-that-may-be-actually-current: | ||||
| * https://zonedb.org/ | ||||
| * https://router7.org/ | ||||
| * https://github.com/fortio/dnsping | ||||
| * https://github.com/Luzilla/dnsbl_exporter | ||||
| * https://github.com/bodgit/tsig | ||||
| * https://github.com/v2fly/v2ray-core (test only) | ||||
| * https://kuma.io/ | ||||
|  | ||||
|  | ||||
| Send pull request if you want to be listed here. | ||||
|  | ||||
| @ -165,6 +170,9 @@ Example programs can be found in the `github.com/miekg/exdns` repository. | ||||
| * 7873 - Domain Name System (DNS) Cookies | ||||
| * 8080 - EdDSA for DNSSEC | ||||
| * 8499 - DNS Terminology | ||||
| * 8659 - DNS Certification Authority Authorization (CAA) Resource Record | ||||
| * 8914 - Extended DNS Errors | ||||
| * 8976 - Message Digest for DNS Zones (ZONEMD RR) | ||||
|  | ||||
| ## Loosely Based Upon | ||||
|  | ||||
|  | ||||
							
								
								
									
										1
									
								
								vendor/github.com/miekg/dns/acceptfunc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/miekg/dns/acceptfunc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -25,6 +25,7 @@ var DefaultMsgAcceptFunc MsgAcceptFunc = defaultMsgAcceptFunc | ||||
| // MsgAcceptAction represents the action to be taken. | ||||
| type MsgAcceptAction int | ||||
|  | ||||
| // Allowed returned values from a MsgAcceptFunc. | ||||
| const ( | ||||
| 	MsgAccept               MsgAcceptAction = iota // Accept the message | ||||
| 	MsgReject                                      // Reject the message with a RcodeFormatError | ||||
|  | ||||
							
								
								
									
										38
									
								
								vendor/github.com/miekg/dns/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										38
									
								
								vendor/github.com/miekg/dns/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -23,6 +23,7 @@ type Conn struct { | ||||
| 	net.Conn                         // a net.Conn holding the connection | ||||
| 	UDPSize        uint16            // minimum receive buffer for UDP messages | ||||
| 	TsigSecret     map[string]string // secret(s) for Tsig map[<zonename>]<base64 secret>, zonename must be in canonical form (lowercase, fqdn, see RFC 4034 Section 6.2) | ||||
| 	TsigProvider   TsigProvider      // An implementation of the TsigProvider interface. If defined it replaces TsigSecret and is used for all TSIG operations. | ||||
| 	tsigRequestMAC string | ||||
| } | ||||
|  | ||||
| @ -40,6 +41,7 @@ type Client struct { | ||||
| 	ReadTimeout    time.Duration     // net.Conn.SetReadTimeout value for connections, defaults to 2 seconds - overridden by Timeout when that value is non-zero | ||||
| 	WriteTimeout   time.Duration     // net.Conn.SetWriteTimeout value for connections, defaults to 2 seconds - overridden by Timeout when that value is non-zero | ||||
| 	TsigSecret     map[string]string // secret(s) for Tsig map[<zonename>]<base64 secret>, zonename must be in canonical form (lowercase, fqdn, see RFC 4034 Section 6.2) | ||||
| 	TsigProvider   TsigProvider      // An implementation of the TsigProvider interface. If defined it replaces TsigSecret and is used for all TSIG operations. | ||||
| 	SingleInflight bool              // if true suppress multiple outstanding queries for the same Qname, Qtype and Qclass | ||||
| 	group          singleflight | ||||
| } | ||||
| @ -124,7 +126,6 @@ func (c *Client) Dial(address string) (conn *Conn, err error) { | ||||
| // of 512 bytes | ||||
| // To specify a local address or a timeout, the caller has to set the `Client.Dialer` | ||||
| // attribute appropriately | ||||
|  | ||||
| func (c *Client) Exchange(m *Msg, address string) (r *Msg, rtt time.Duration, err error) { | ||||
| 	co, err := c.Dial(address) | ||||
|  | ||||
| @ -176,7 +177,7 @@ func (c *Client) exchange(m *Msg, co *Conn) (r *Msg, rtt time.Duration, err erro | ||||
| 		co.UDPSize = c.UDPSize | ||||
| 	} | ||||
|  | ||||
| 	co.TsigSecret = c.TsigSecret | ||||
| 	co.TsigSecret, co.TsigProvider = c.TsigSecret, c.TsigProvider | ||||
| 	t := time.Now() | ||||
| 	// write with the appropriate write timeout | ||||
| 	co.SetWriteDeadline(t.Add(c.getTimeoutForRequest(c.writeTimeout()))) | ||||
| @ -223,11 +224,15 @@ func (co *Conn) ReadMsg() (*Msg, error) { | ||||
| 		return m, err | ||||
| 	} | ||||
| 	if t := m.IsTsig(); t != nil { | ||||
| 		if _, ok := co.TsigSecret[t.Hdr.Name]; !ok { | ||||
| 			return m, ErrSecret | ||||
| 		if co.TsigProvider != nil { | ||||
| 			err = tsigVerifyProvider(p, co.TsigProvider, co.tsigRequestMAC, false) | ||||
| 		} else { | ||||
| 			if _, ok := co.TsigSecret[t.Hdr.Name]; !ok { | ||||
| 				return m, ErrSecret | ||||
| 			} | ||||
| 			// Need to work on the original message p, as that was used to calculate the tsig. | ||||
| 			err = TsigVerify(p, co.TsigSecret[t.Hdr.Name], co.tsigRequestMAC, false) | ||||
| 		} | ||||
| 		// Need to work on the original message p, as that was used to calculate the tsig. | ||||
| 		err = TsigVerify(p, co.TsigSecret[t.Hdr.Name], co.tsigRequestMAC, false) | ||||
| 	} | ||||
| 	return m, err | ||||
| } | ||||
| @ -305,10 +310,14 @@ func (co *Conn) WriteMsg(m *Msg) (err error) { | ||||
| 	var out []byte | ||||
| 	if t := m.IsTsig(); t != nil { | ||||
| 		mac := "" | ||||
| 		if _, ok := co.TsigSecret[t.Hdr.Name]; !ok { | ||||
| 			return ErrSecret | ||||
| 		if co.TsigProvider != nil { | ||||
| 			out, mac, err = tsigGenerateProvider(m, co.TsigProvider, co.tsigRequestMAC, false) | ||||
| 		} else { | ||||
| 			if _, ok := co.TsigSecret[t.Hdr.Name]; !ok { | ||||
| 				return ErrSecret | ||||
| 			} | ||||
| 			out, mac, err = TsigGenerate(m, co.TsigSecret[t.Hdr.Name], co.tsigRequestMAC, false) | ||||
| 		} | ||||
| 		out, mac, err = TsigGenerate(m, co.TsigSecret[t.Hdr.Name], co.tsigRequestMAC, false) | ||||
| 		// Set for the next read, although only used in zone transfers | ||||
| 		co.tsigRequestMAC = mac | ||||
| 	} else { | ||||
| @ -331,11 +340,10 @@ func (co *Conn) Write(p []byte) (int, error) { | ||||
| 		return co.Conn.Write(p) | ||||
| 	} | ||||
|  | ||||
| 	l := make([]byte, 2) | ||||
| 	binary.BigEndian.PutUint16(l, uint16(len(p))) | ||||
|  | ||||
| 	n, err := (&net.Buffers{l, p}).WriteTo(co.Conn) | ||||
| 	return int(n), err | ||||
| 	msg := make([]byte, 2+len(p)) | ||||
| 	binary.BigEndian.PutUint16(msg, uint16(len(p))) | ||||
| 	copy(msg[2:], p) | ||||
| 	return co.Conn.Write(msg) | ||||
| } | ||||
|  | ||||
| // Return the appropriate timeout for a specific request | ||||
| @ -371,7 +379,7 @@ func Dial(network, address string) (conn *Conn, err error) { | ||||
| func ExchangeContext(ctx context.Context, m *Msg, a string) (r *Msg, err error) { | ||||
| 	client := Client{Net: "udp"} | ||||
| 	r, _, err = client.ExchangeContext(ctx, m, a) | ||||
| 	// ignorint rtt to leave the original ExchangeContext API unchanged, but | ||||
| 	// ignoring rtt to leave the original ExchangeContext API unchanged, but | ||||
| 	// this function will go away | ||||
| 	return r, err | ||||
| } | ||||
|  | ||||
							
								
								
									
										5
									
								
								vendor/github.com/miekg/dns/defaults.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/miekg/dns/defaults.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -349,10 +349,7 @@ func ReverseAddr(addr string) (arpa string, err error) { | ||||
| 	// Add it, in reverse, to the buffer | ||||
| 	for i := len(ip) - 1; i >= 0; i-- { | ||||
| 		v := ip[i] | ||||
| 		buf = append(buf, hexDigit[v&0xF]) | ||||
| 		buf = append(buf, '.') | ||||
| 		buf = append(buf, hexDigit[v>>4]) | ||||
| 		buf = append(buf, '.') | ||||
| 		buf = append(buf, hexDigit[v&0xF], '.', hexDigit[v>>4], '.') | ||||
| 	} | ||||
| 	// Append "ip6.arpa." and return (buf already has the final .) | ||||
| 	buf = append(buf, "ip6.arpa."...) | ||||
|  | ||||
							
								
								
									
										30
									
								
								vendor/github.com/miekg/dns/dns.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								vendor/github.com/miekg/dns/dns.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,6 +1,9 @@ | ||||
| package dns | ||||
|  | ||||
| import "strconv" | ||||
| import ( | ||||
| 	"encoding/hex" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	year68     = 1 << 31 // For RFC1982 (Serial Arithmetic) calculations in 32 bits. | ||||
| @ -111,7 +114,7 @@ func (h *RR_Header) parse(c *zlexer, origin string) *ParseError { | ||||
|  | ||||
| // ToRFC3597 converts a known RR to the unknown RR representation from RFC 3597. | ||||
| func (rr *RFC3597) ToRFC3597(r RR) error { | ||||
| 	buf := make([]byte, Len(r)*2) | ||||
| 	buf := make([]byte, Len(r)) | ||||
| 	headerEnd, off, err := packRR(r, buf, 0, compressionMap{}, false) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| @ -126,9 +129,30 @@ func (rr *RFC3597) ToRFC3597(r RR) error { | ||||
| 	} | ||||
|  | ||||
| 	_, err = rr.unpack(buf, headerEnd) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // fromRFC3597 converts an unknown RR representation from RFC 3597 to the known RR type. | ||||
| func (rr *RFC3597) fromRFC3597(r RR) error { | ||||
| 	hdr := r.Header() | ||||
| 	*hdr = rr.Hdr | ||||
|  | ||||
| 	// Can't overflow uint16 as the length of Rdata is validated in (*RFC3597).parse. | ||||
| 	// We can only get here when rr was constructed with that method. | ||||
| 	hdr.Rdlength = uint16(hex.DecodedLen(len(rr.Rdata))) | ||||
|  | ||||
| 	if noRdata(*hdr) { | ||||
| 		// Dynamic update. | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	// rr.pack requires an extra allocation and a copy so we just decode Rdata | ||||
| 	// manually, it's simpler anyway. | ||||
| 	msg, err := hex.DecodeString(rr.Rdata) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| 	_, err = r.unpack(msg, 0) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
							
								
								
									
										19
									
								
								vendor/github.com/miekg/dns/dnssec.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/miekg/dns/dnssec.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -4,12 +4,13 @@ import ( | ||||
| 	"bytes" | ||||
| 	"crypto" | ||||
| 	"crypto/ecdsa" | ||||
| 	"crypto/ed25519" | ||||
| 	"crypto/elliptic" | ||||
| 	"crypto/rand" | ||||
| 	"crypto/rsa" | ||||
| 	_ "crypto/sha1" | ||||
| 	_ "crypto/sha256" | ||||
| 	_ "crypto/sha512" | ||||
| 	_ "crypto/sha1"   // need its init function | ||||
| 	_ "crypto/sha256" // need its init function | ||||
| 	_ "crypto/sha512" // need its init function | ||||
| 	"encoding/asn1" | ||||
| 	"encoding/binary" | ||||
| 	"encoding/hex" | ||||
| @ -17,8 +18,6 @@ import ( | ||||
| 	"sort" | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	"golang.org/x/crypto/ed25519" | ||||
| ) | ||||
|  | ||||
| // DNSSEC encryption algorithm codes. | ||||
| @ -373,6 +372,8 @@ func sign(k crypto.Signer, hashed []byte, hash crypto.Hash, alg uint8) ([]byte, | ||||
| // Verify validates an RRSet with the signature and key. This is only the | ||||
| // cryptographic test, the signature validity period must be checked separately. | ||||
| // This function copies the rdata of some RRs (to lowercase domain names) for the validation to work. | ||||
| // It also checks that the Zone Key bit (RFC 4034 2.1.1) is set on the DNSKEY | ||||
| // and that the Protocol field is set to 3 (RFC 4034 2.1.2). | ||||
| func (rr *RRSIG) Verify(k *DNSKEY, rrset []RR) error { | ||||
| 	// First the easy checks | ||||
| 	if !IsRRset(rrset) { | ||||
| @ -393,6 +394,12 @@ func (rr *RRSIG) Verify(k *DNSKEY, rrset []RR) error { | ||||
| 	if k.Protocol != 3 { | ||||
| 		return ErrKey | ||||
| 	} | ||||
| 	// RFC 4034 2.1.1 If bit 7 has value 0, then the DNSKEY record holds some | ||||
| 	// other type of DNS public key and MUST NOT be used to verify RRSIGs that | ||||
| 	// cover RRsets. | ||||
| 	if k.Flags&ZONE == 0 { | ||||
| 		return ErrKey | ||||
| 	} | ||||
|  | ||||
| 	// IsRRset checked that we have at least one RR and that the RRs in | ||||
| 	// the set have consistent type, class, and name. Also check that type and | ||||
| @ -500,7 +507,7 @@ func (rr *RRSIG) ValidityPeriod(t time.Time) bool { | ||||
| 	return ti <= utc && utc <= te | ||||
| } | ||||
|  | ||||
| // Return the signatures base64 encodedig sigdata as a byte slice. | ||||
| // Return the signatures base64 encoding sigdata as a byte slice. | ||||
| func (rr *RRSIG) sigBuf() []byte { | ||||
| 	sigbuf, err := fromBase64([]byte(rr.Signature)) | ||||
| 	if err != nil { | ||||
|  | ||||
							
								
								
									
										3
									
								
								vendor/github.com/miekg/dns/dnssec_keygen.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/miekg/dns/dnssec_keygen.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -3,12 +3,11 @@ package dns | ||||
| import ( | ||||
| 	"crypto" | ||||
| 	"crypto/ecdsa" | ||||
| 	"crypto/ed25519" | ||||
| 	"crypto/elliptic" | ||||
| 	"crypto/rand" | ||||
| 	"crypto/rsa" | ||||
| 	"math/big" | ||||
|  | ||||
| 	"golang.org/x/crypto/ed25519" | ||||
| ) | ||||
|  | ||||
| // Generate generates a DNSKEY of the given bit size. | ||||
|  | ||||
							
								
								
									
										3
									
								
								vendor/github.com/miekg/dns/dnssec_keyscan.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/miekg/dns/dnssec_keyscan.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -4,13 +4,12 @@ import ( | ||||
| 	"bufio" | ||||
| 	"crypto" | ||||
| 	"crypto/ecdsa" | ||||
| 	"crypto/ed25519" | ||||
| 	"crypto/rsa" | ||||
| 	"io" | ||||
| 	"math/big" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
|  | ||||
| 	"golang.org/x/crypto/ed25519" | ||||
| ) | ||||
|  | ||||
| // NewPrivateKey returns a PrivateKey by parsing the string s. | ||||
|  | ||||
							
								
								
									
										3
									
								
								vendor/github.com/miekg/dns/dnssec_privkey.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/miekg/dns/dnssec_privkey.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -3,11 +3,10 @@ package dns | ||||
| import ( | ||||
| 	"crypto" | ||||
| 	"crypto/ecdsa" | ||||
| 	"crypto/ed25519" | ||||
| 	"crypto/rsa" | ||||
| 	"math/big" | ||||
| 	"strconv" | ||||
|  | ||||
| 	"golang.org/x/crypto/ed25519" | ||||
| ) | ||||
|  | ||||
| const format = "Private-key-format: v1.3\n" | ||||
|  | ||||
							
								
								
									
										32
									
								
								vendor/github.com/miekg/dns/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								vendor/github.com/miekg/dns/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -159,7 +159,7 @@ shows the options you have and what functions to call. | ||||
| TRANSACTION SIGNATURE | ||||
|  | ||||
| An TSIG or transaction signature adds a HMAC TSIG record to each message sent. | ||||
| The supported algorithms include: HmacMD5, HmacSHA1, HmacSHA256 and HmacSHA512. | ||||
| The supported algorithms include: HmacSHA1, HmacSHA256 and HmacSHA512. | ||||
|  | ||||
| Basic use pattern when querying with a TSIG name "axfr." (note that these key names | ||||
| must be fully qualified - as they are domain names) and the base64 secret | ||||
| @ -174,7 +174,7 @@ changes to the RRset after calling SetTsig() the signature will be incorrect. | ||||
| 	c.TsigSecret = map[string]string{"axfr.": "so6ZGir4GPAqINNh9U5c3A=="} | ||||
| 	m := new(dns.Msg) | ||||
| 	m.SetQuestion("miek.nl.", dns.TypeMX) | ||||
| 	m.SetTsig("axfr.", dns.HmacMD5, 300, time.Now().Unix()) | ||||
| 	m.SetTsig("axfr.", dns.HmacSHA256, 300, time.Now().Unix()) | ||||
| 	... | ||||
| 	// When sending the TSIG RR is calculated and filled in before sending | ||||
|  | ||||
| @ -187,13 +187,37 @@ request an AXFR for miek.nl. with TSIG key named "axfr." and secret | ||||
| 	m := new(dns.Msg) | ||||
| 	t.TsigSecret = map[string]string{"axfr.": "so6ZGir4GPAqINNh9U5c3A=="} | ||||
| 	m.SetAxfr("miek.nl.") | ||||
| 	m.SetTsig("axfr.", dns.HmacMD5, 300, time.Now().Unix()) | ||||
| 	m.SetTsig("axfr.", dns.HmacSHA256, 300, time.Now().Unix()) | ||||
| 	c, err := t.In(m, "176.58.119.54:53") | ||||
| 	for r := range c { ... } | ||||
|  | ||||
| You can now read the records from the transfer as they come in. Each envelope | ||||
| is checked with TSIG. If something is not correct an error is returned. | ||||
|  | ||||
| A custom TSIG implementation can be used. This requires additional code to | ||||
| perform any session establishment and signature generation/verification. The | ||||
| client must be configured with an implementation of the TsigProvider interface: | ||||
|  | ||||
| 	type Provider struct{} | ||||
|  | ||||
| 	func (*Provider) Generate(msg []byte, tsig *dns.TSIG) ([]byte, error) { | ||||
| 		// Use tsig.Hdr.Name and tsig.Algorithm in your code to | ||||
| 		// generate the MAC using msg as the payload. | ||||
| 	} | ||||
|  | ||||
| 	func (*Provider) Verify(msg []byte, tsig *dns.TSIG) error { | ||||
| 		// Use tsig.Hdr.Name and tsig.Algorithm in your code to verify | ||||
| 		// that msg matches the value in tsig.MAC. | ||||
| 	} | ||||
|  | ||||
| 	c := new(dns.Client) | ||||
| 	c.TsigProvider = new(Provider) | ||||
| 	m := new(dns.Msg) | ||||
| 	m.SetQuestion("miek.nl.", dns.TypeMX) | ||||
| 	m.SetTsig(keyname, dns.HmacSHA256, 300, time.Now().Unix()) | ||||
| 	... | ||||
| 	// TSIG RR is calculated by calling your Generate method | ||||
|  | ||||
| Basic use pattern validating and replying to a message that has TSIG set. | ||||
|  | ||||
| 	server := &dns.Server{Addr: ":53", Net: "udp"} | ||||
| @ -207,7 +231,7 @@ Basic use pattern validating and replying to a message that has TSIG set. | ||||
| 		if r.IsTsig() != nil { | ||||
| 			if w.TsigStatus() == nil { | ||||
| 				// *Msg r has an TSIG record and it was validated | ||||
| 				m.SetTsig("axfr.", dns.HmacMD5, 300, time.Now().Unix()) | ||||
| 				m.SetTsig("axfr.", dns.HmacSHA256, 300, time.Now().Unix()) | ||||
| 			} else { | ||||
| 				// *Msg r has an TSIG records and it was not validated | ||||
| 			} | ||||
|  | ||||
							
								
								
									
										156
									
								
								vendor/github.com/miekg/dns/edns.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										156
									
								
								vendor/github.com/miekg/dns/edns.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -22,11 +22,47 @@ const ( | ||||
| 	EDNS0COOKIE       = 0xa     // EDNS0 Cookie | ||||
| 	EDNS0TCPKEEPALIVE = 0xb     // EDNS0 tcp keep alive (See RFC 7828) | ||||
| 	EDNS0PADDING      = 0xc     // EDNS0 padding (See RFC 7830) | ||||
| 	EDNS0EDE          = 0xf     // EDNS0 extended DNS errors (See RFC 8914) | ||||
| 	EDNS0LOCALSTART   = 0xFDE9  // Beginning of range reserved for local/experimental use (See RFC 6891) | ||||
| 	EDNS0LOCALEND     = 0xFFFE  // End of range reserved for local/experimental use (See RFC 6891) | ||||
| 	_DO               = 1 << 15 // DNSSEC OK | ||||
| ) | ||||
|  | ||||
| // makeDataOpt is used to unpack the EDNS0 option(s) from a message. | ||||
| func makeDataOpt(code uint16) EDNS0 { | ||||
| 	// All the EDNS0.* constants above need to be in this switch. | ||||
| 	switch code { | ||||
| 	case EDNS0LLQ: | ||||
| 		return new(EDNS0_LLQ) | ||||
| 	case EDNS0UL: | ||||
| 		return new(EDNS0_UL) | ||||
| 	case EDNS0NSID: | ||||
| 		return new(EDNS0_NSID) | ||||
| 	case EDNS0DAU: | ||||
| 		return new(EDNS0_DAU) | ||||
| 	case EDNS0DHU: | ||||
| 		return new(EDNS0_DHU) | ||||
| 	case EDNS0N3U: | ||||
| 		return new(EDNS0_N3U) | ||||
| 	case EDNS0SUBNET: | ||||
| 		return new(EDNS0_SUBNET) | ||||
| 	case EDNS0EXPIRE: | ||||
| 		return new(EDNS0_EXPIRE) | ||||
| 	case EDNS0COOKIE: | ||||
| 		return new(EDNS0_COOKIE) | ||||
| 	case EDNS0TCPKEEPALIVE: | ||||
| 		return new(EDNS0_TCP_KEEPALIVE) | ||||
| 	case EDNS0PADDING: | ||||
| 		return new(EDNS0_PADDING) | ||||
| 	case EDNS0EDE: | ||||
| 		return new(EDNS0_EDE) | ||||
| 	default: | ||||
| 		e := new(EDNS0_LOCAL) | ||||
| 		e.Code = code | ||||
| 		return e | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // OPT is the EDNS0 RR appended to messages to convey extra (meta) information. | ||||
| // See RFC 6891. | ||||
| type OPT struct { | ||||
| @ -73,6 +109,8 @@ func (rr *OPT) String() string { | ||||
| 			s += "\n; LOCAL OPT: " + o.String() | ||||
| 		case *EDNS0_PADDING: | ||||
| 			s += "\n; PADDING: " + o.String() | ||||
| 		case *EDNS0_EDE: | ||||
| 			s += "\n; EDE: " + o.String() | ||||
| 		} | ||||
| 	} | ||||
| 	return s | ||||
| @ -88,11 +126,11 @@ func (rr *OPT) len(off int, compression map[string]struct{}) int { | ||||
| 	return l | ||||
| } | ||||
|  | ||||
| func (rr *OPT) parse(c *zlexer, origin string) *ParseError { | ||||
| 	panic("dns: internal error: parse should never be called on OPT") | ||||
| func (*OPT) parse(c *zlexer, origin string) *ParseError { | ||||
| 	return &ParseError{err: "OPT records do not have a presentation format"} | ||||
| } | ||||
|  | ||||
| func (r1 *OPT) isDuplicate(r2 RR) bool { return false } | ||||
| func (rr *OPT) isDuplicate(r2 RR) bool { return false } | ||||
|  | ||||
| // return the old value -> delete SetVersion? | ||||
|  | ||||
| @ -148,6 +186,16 @@ func (rr *OPT) SetDo(do ...bool) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Z returns the Z part of the OPT RR as a uint16 with only the 15 least significant bits used. | ||||
| func (rr *OPT) Z() uint16 { | ||||
| 	return uint16(rr.Hdr.Ttl & 0x7FFF) | ||||
| } | ||||
|  | ||||
| // SetZ sets the Z part of the OPT RR, note only the 15 least significant bits of z are used. | ||||
| func (rr *OPT) SetZ(z uint16) { | ||||
| 	rr.Hdr.Ttl = rr.Hdr.Ttl&^0x7FFF | uint32(z&0x7FFF) | ||||
| } | ||||
|  | ||||
| // EDNS0 defines an EDNS0 Option. An OPT RR can have multiple options appended to it. | ||||
| type EDNS0 interface { | ||||
| 	// Option returns the option code for the option. | ||||
| @ -452,7 +500,7 @@ func (e *EDNS0_LLQ) copy() EDNS0 { | ||||
| 	return &EDNS0_LLQ{e.Code, e.Version, e.Opcode, e.Error, e.Id, e.LeaseLife} | ||||
| } | ||||
|  | ||||
| // EDNS0_DUA implements the EDNS0 "DNSSEC Algorithm Understood" option. See RFC 6975. | ||||
| // EDNS0_DAU implements the EDNS0 "DNSSEC Algorithm Understood" option. See RFC 6975. | ||||
| type EDNS0_DAU struct { | ||||
| 	Code    uint16 // Always EDNS0DAU | ||||
| 	AlgCode []uint8 | ||||
| @ -525,7 +573,7 @@ func (e *EDNS0_N3U) String() string { | ||||
| } | ||||
| func (e *EDNS0_N3U) copy() EDNS0 { return &EDNS0_N3U{e.Code, e.AlgCode} } | ||||
|  | ||||
| // EDNS0_EXPIRE implementes the EDNS0 option as described in RFC 7314. | ||||
| // EDNS0_EXPIRE implements the EDNS0 option as described in RFC 7314. | ||||
| type EDNS0_EXPIRE struct { | ||||
| 	Code   uint16 // Always EDNS0EXPIRE | ||||
| 	Expire uint32 | ||||
| @ -673,3 +721,101 @@ func (e *EDNS0_PADDING) copy() EDNS0 { | ||||
| 	copy(b, e.Padding) | ||||
| 	return &EDNS0_PADDING{b} | ||||
| } | ||||
|  | ||||
| // Extended DNS Error Codes (RFC 8914). | ||||
| const ( | ||||
| 	ExtendedErrorCodeOther uint16 = iota | ||||
| 	ExtendedErrorCodeUnsupportedDNSKEYAlgorithm | ||||
| 	ExtendedErrorCodeUnsupportedDSDigestType | ||||
| 	ExtendedErrorCodeStaleAnswer | ||||
| 	ExtendedErrorCodeForgedAnswer | ||||
| 	ExtendedErrorCodeDNSSECIndeterminate | ||||
| 	ExtendedErrorCodeDNSBogus | ||||
| 	ExtendedErrorCodeSignatureExpired | ||||
| 	ExtendedErrorCodeSignatureNotYetValid | ||||
| 	ExtendedErrorCodeDNSKEYMissing | ||||
| 	ExtendedErrorCodeRRSIGsMissing | ||||
| 	ExtendedErrorCodeNoZoneKeyBitSet | ||||
| 	ExtendedErrorCodeNSECMissing | ||||
| 	ExtendedErrorCodeCachedError | ||||
| 	ExtendedErrorCodeNotReady | ||||
| 	ExtendedErrorCodeBlocked | ||||
| 	ExtendedErrorCodeCensored | ||||
| 	ExtendedErrorCodeFiltered | ||||
| 	ExtendedErrorCodeProhibited | ||||
| 	ExtendedErrorCodeStaleNXDOMAINAnswer | ||||
| 	ExtendedErrorCodeNotAuthoritative | ||||
| 	ExtendedErrorCodeNotSupported | ||||
| 	ExtendedErrorCodeNoReachableAuthority | ||||
| 	ExtendedErrorCodeNetworkError | ||||
| 	ExtendedErrorCodeInvalidData | ||||
| ) | ||||
|  | ||||
| // ExtendedErrorCodeToString maps extended error info codes to a human readable | ||||
| // description. | ||||
| var ExtendedErrorCodeToString = map[uint16]string{ | ||||
| 	ExtendedErrorCodeOther:                      "Other", | ||||
| 	ExtendedErrorCodeUnsupportedDNSKEYAlgorithm: "Unsupported DNSKEY Algorithm", | ||||
| 	ExtendedErrorCodeUnsupportedDSDigestType:    "Unsupported DS Digest Type", | ||||
| 	ExtendedErrorCodeStaleAnswer:                "Stale Answer", | ||||
| 	ExtendedErrorCodeForgedAnswer:               "Forged Answer", | ||||
| 	ExtendedErrorCodeDNSSECIndeterminate:        "DNSSEC Indeterminate", | ||||
| 	ExtendedErrorCodeDNSBogus:                   "DNSSEC Bogus", | ||||
| 	ExtendedErrorCodeSignatureExpired:           "Signature Expired", | ||||
| 	ExtendedErrorCodeSignatureNotYetValid:       "Signature Not Yet Valid", | ||||
| 	ExtendedErrorCodeDNSKEYMissing:              "DNSKEY Missing", | ||||
| 	ExtendedErrorCodeRRSIGsMissing:              "RRSIGs Missing", | ||||
| 	ExtendedErrorCodeNoZoneKeyBitSet:            "No Zone Key Bit Set", | ||||
| 	ExtendedErrorCodeNSECMissing:                "NSEC Missing", | ||||
| 	ExtendedErrorCodeCachedError:                "Cached Error", | ||||
| 	ExtendedErrorCodeNotReady:                   "Not Ready", | ||||
| 	ExtendedErrorCodeBlocked:                    "Blocked", | ||||
| 	ExtendedErrorCodeCensored:                   "Censored", | ||||
| 	ExtendedErrorCodeFiltered:                   "Filtered", | ||||
| 	ExtendedErrorCodeProhibited:                 "Prohibited", | ||||
| 	ExtendedErrorCodeStaleNXDOMAINAnswer:        "Stale NXDOMAIN Answer", | ||||
| 	ExtendedErrorCodeNotAuthoritative:           "Not Authoritative", | ||||
| 	ExtendedErrorCodeNotSupported:               "Not Supported", | ||||
| 	ExtendedErrorCodeNoReachableAuthority:       "No Reachable Authority", | ||||
| 	ExtendedErrorCodeNetworkError:               "Network Error", | ||||
| 	ExtendedErrorCodeInvalidData:                "Invalid Data", | ||||
| } | ||||
|  | ||||
| // StringToExtendedErrorCode is a map from human readable descriptions to | ||||
| // extended error info codes. | ||||
| var StringToExtendedErrorCode = reverseInt16(ExtendedErrorCodeToString) | ||||
|  | ||||
| // EDNS0_EDE option is used to return additional information about the cause of | ||||
| // DNS errors. | ||||
| type EDNS0_EDE struct { | ||||
| 	InfoCode  uint16 | ||||
| 	ExtraText string | ||||
| } | ||||
|  | ||||
| // Option implements the EDNS0 interface. | ||||
| func (e *EDNS0_EDE) Option() uint16 { return EDNS0EDE } | ||||
| func (e *EDNS0_EDE) copy() EDNS0    { return &EDNS0_EDE{e.InfoCode, e.ExtraText} } | ||||
|  | ||||
| func (e *EDNS0_EDE) String() string { | ||||
| 	info := strconv.FormatUint(uint64(e.InfoCode), 10) | ||||
| 	if s, ok := ExtendedErrorCodeToString[e.InfoCode]; ok { | ||||
| 		info += fmt.Sprintf(" (%s)", s) | ||||
| 	} | ||||
| 	return fmt.Sprintf("%s: (%s)", info, e.ExtraText) | ||||
| } | ||||
|  | ||||
| func (e *EDNS0_EDE) pack() ([]byte, error) { | ||||
| 	b := make([]byte, 2+len(e.ExtraText)) | ||||
| 	binary.BigEndian.PutUint16(b[0:], e.InfoCode) | ||||
| 	copy(b[2:], []byte(e.ExtraText)) | ||||
| 	return b, nil | ||||
| } | ||||
|  | ||||
| func (e *EDNS0_EDE) unpack(b []byte) error { | ||||
| 	if len(b) < 2 { | ||||
| 		return ErrBuf | ||||
| 	} | ||||
| 	e.InfoCode = binary.BigEndian.Uint16(b[0:]) | ||||
| 	e.ExtraText = string(b[2:]) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
							
								
								
									
										26
									
								
								vendor/github.com/miekg/dns/generate.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/github.com/miekg/dns/generate.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -75,10 +75,10 @@ func (zp *ZoneParser) generate(l lex) (RR, bool) { | ||||
| 	r := &generateReader{ | ||||
| 		s: s, | ||||
|  | ||||
| 		cur:   int(start), | ||||
| 		start: int(start), | ||||
| 		end:   int(end), | ||||
| 		step:  int(step), | ||||
| 		cur:   start, | ||||
| 		start: start, | ||||
| 		end:   end, | ||||
| 		step:  step, | ||||
|  | ||||
| 		file: zp.file, | ||||
| 		lex:  &l, | ||||
| @ -94,10 +94,10 @@ type generateReader struct { | ||||
| 	s  string | ||||
| 	si int | ||||
|  | ||||
| 	cur   int | ||||
| 	start int | ||||
| 	end   int | ||||
| 	step  int | ||||
| 	cur   int64 | ||||
| 	start int64 | ||||
| 	end   int64 | ||||
| 	step  int64 | ||||
|  | ||||
| 	mod bytes.Buffer | ||||
|  | ||||
| @ -173,7 +173,7 @@ func (r *generateReader) ReadByte() (byte, error) { | ||||
| 			return '$', nil | ||||
| 		} | ||||
|  | ||||
| 		var offset int | ||||
| 		var offset int64 | ||||
|  | ||||
| 		// Search for { and } | ||||
| 		if r.s[si+1] == '{' { | ||||
| @ -188,7 +188,7 @@ func (r *generateReader) ReadByte() (byte, error) { | ||||
| 			if errMsg != "" { | ||||
| 				return 0, r.parseError(errMsg, si+3+sep) | ||||
| 			} | ||||
| 			if r.start+offset < 0 || int64(r.end) + int64(offset) > 1<<31-1 { | ||||
| 			if r.start+offset < 0 || r.end+offset > 1<<31-1 { | ||||
| 				return 0, r.parseError("bad offset in $GENERATE", si+3+sep) | ||||
| 			} | ||||
|  | ||||
| @ -208,7 +208,7 @@ func (r *generateReader) ReadByte() (byte, error) { | ||||
| } | ||||
|  | ||||
| // Convert a $GENERATE modifier 0,0,d to something Printf can deal with. | ||||
| func modToPrintf(s string) (string, int, string) { | ||||
| func modToPrintf(s string) (string, int64, string) { | ||||
| 	// Modifier is { offset [ ,width [ ,base ] ] } - provide default | ||||
| 	// values for optional width and type, if necessary. | ||||
| 	var offStr, widthStr, base string | ||||
| @ -240,8 +240,8 @@ func modToPrintf(s string) (string, int, string) { | ||||
| 	} | ||||
|  | ||||
| 	if width == 0 { | ||||
| 		return "%" + base, int(offset), "" | ||||
| 		return "%" + base, offset, "" | ||||
| 	} | ||||
|  | ||||
| 	return "%0" + widthStr + base, int(offset), "" | ||||
| 	return "%0" + widthStr + base, offset, "" | ||||
| } | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/github.com/miekg/dns/labels.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/miekg/dns/labels.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -10,7 +10,7 @@ package dns | ||||
| // escaped dots (\.) for instance. | ||||
| // s must be a syntactically valid domain name, see IsDomainName. | ||||
| func SplitDomainName(s string) (labels []string) { | ||||
| 	if len(s) == 0 { | ||||
| 	if s == "" { | ||||
| 		return nil | ||||
| 	} | ||||
| 	fqdnEnd := 0 // offset of the final '.' or the length of the name | ||||
|  | ||||
							
								
								
									
										13
									
								
								vendor/github.com/miekg/dns/msg.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/github.com/miekg/dns/msg.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -624,11 +624,18 @@ func UnpackRRWithHeader(h RR_Header, msg []byte, off int) (rr RR, off1 int, err | ||||
| 		rr = &RFC3597{Hdr: h} | ||||
| 	} | ||||
|  | ||||
| 	if noRdata(h) { | ||||
| 		return rr, off, nil | ||||
| 	if off < 0 || off > len(msg) { | ||||
| 		return &h, off, &Error{err: "bad off"} | ||||
| 	} | ||||
|  | ||||
| 	end := off + int(h.Rdlength) | ||||
| 	if end < off || end > len(msg) { | ||||
| 		return &h, end, &Error{err: "bad rdlength"} | ||||
| 	} | ||||
|  | ||||
| 	if noRdata(h) { | ||||
| 		return rr, off, nil | ||||
| 	} | ||||
|  | ||||
| 	off, err = rr.unpack(msg, off) | ||||
| 	if err != nil { | ||||
| @ -735,7 +742,7 @@ func (dns *Msg) packBufferWithCompressionMap(buf []byte, compression compression | ||||
| 	} | ||||
|  | ||||
| 	// Set extended rcode unconditionally if we have an opt, this will allow | ||||
| 	// reseting the extended rcode bits if they need to. | ||||
| 	// resetting the extended rcode bits if they need to. | ||||
| 	if opt := dns.IsEdns0(); opt != nil { | ||||
| 		opt.SetExtendedRcode(uint16(dns.Rcode)) | ||||
| 	} else if dns.Rcode > 0xF { | ||||
|  | ||||
							
								
								
									
										29
									
								
								vendor/github.com/miekg/dns/msg_helpers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								vendor/github.com/miekg/dns/msg_helpers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -438,35 +438,6 @@ Option: | ||||
| 	return edns, off, nil | ||||
| } | ||||
|  | ||||
| func makeDataOpt(code uint16) EDNS0 { | ||||
| 	switch code { | ||||
| 	case EDNS0NSID: | ||||
| 		return new(EDNS0_NSID) | ||||
| 	case EDNS0SUBNET: | ||||
| 		return new(EDNS0_SUBNET) | ||||
| 	case EDNS0COOKIE: | ||||
| 		return new(EDNS0_COOKIE) | ||||
| 	case EDNS0EXPIRE: | ||||
| 		return new(EDNS0_EXPIRE) | ||||
| 	case EDNS0UL: | ||||
| 		return new(EDNS0_UL) | ||||
| 	case EDNS0LLQ: | ||||
| 		return new(EDNS0_LLQ) | ||||
| 	case EDNS0DAU: | ||||
| 		return new(EDNS0_DAU) | ||||
| 	case EDNS0DHU: | ||||
| 		return new(EDNS0_DHU) | ||||
| 	case EDNS0N3U: | ||||
| 		return new(EDNS0_N3U) | ||||
| 	case EDNS0PADDING: | ||||
| 		return new(EDNS0_PADDING) | ||||
| 	default: | ||||
| 		e := new(EDNS0_LOCAL) | ||||
| 		e.Code = code | ||||
| 		return e | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func packDataOpt(options []EDNS0, msg []byte, off int) (int, error) { | ||||
| 	for _, el := range options { | ||||
| 		b, err := el.pack() | ||||
|  | ||||
							
								
								
									
										5
									
								
								vendor/github.com/miekg/dns/msg_truncate.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/miekg/dns/msg_truncate.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -8,6 +8,11 @@ package dns | ||||
| // record adding as many records as possible without exceeding the | ||||
| // requested buffer size. | ||||
| // | ||||
| // If the message fits within the requested size without compression, | ||||
| // Truncate will set the message's Compress attribute to false. It is | ||||
| // the caller's responsibility to set it back to true if they wish to | ||||
| // compress the payload regardless of size. | ||||
| // | ||||
| // The TC bit will be set if any records were excluded from the message. | ||||
| // If the TC bit is already set on the message it will be retained. | ||||
| // TC indicates that the client should retry over TCP. | ||||
|  | ||||
							
								
								
									
										4
									
								
								vendor/github.com/miekg/dns/privaterr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/miekg/dns/privaterr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -6,7 +6,7 @@ import "strings" | ||||
| // RFC 6895. This allows one to experiment with new RR types, without requesting an | ||||
| // official type code. Also see dns.PrivateHandle and dns.PrivateHandleRemove. | ||||
| type PrivateRdata interface { | ||||
| 	// String returns the text presentaton of the Rdata of the Private RR. | ||||
| 	// String returns the text presentation of the Rdata of the Private RR. | ||||
| 	String() string | ||||
| 	// Parse parses the Rdata of the private RR. | ||||
| 	Parse([]string) error | ||||
| @ -90,7 +90,7 @@ Fetch: | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (r1 *PrivateRR) isDuplicate(r2 RR) bool { return false } | ||||
| func (r *PrivateRR) isDuplicate(r2 RR) bool { return false } | ||||
|  | ||||
| // PrivateHandle registers a private resource record type. It requires | ||||
| // string and numeric representation of private RR type and generator function as argument. | ||||
|  | ||||
							
								
								
									
										58
									
								
								vendor/github.com/miekg/dns/scan.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										58
									
								
								vendor/github.com/miekg/dns/scan.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -150,6 +150,9 @@ func ReadRR(r io.Reader, file string) (RR, error) { | ||||
| // The text "; this is comment" is returned from Comment. Comments inside | ||||
| // the RR are returned concatenated along with the RR. Comments on a line | ||||
| // by themselves are discarded. | ||||
| // | ||||
| // Callers should not assume all returned data in an Resource Record is | ||||
| // syntactically correct, e.g. illegal base64 in RRSIGs will be returned as-is. | ||||
| type ZoneParser struct { | ||||
| 	c *zlexer | ||||
|  | ||||
| @ -577,10 +580,23 @@ func (zp *ZoneParser) Next() (RR, bool) { | ||||
|  | ||||
| 			st = zExpectRdata | ||||
| 		case zExpectRdata: | ||||
| 			var rr RR | ||||
| 			if newFn, ok := TypeToRR[h.Rrtype]; ok && canParseAsRR(h.Rrtype) { | ||||
| 			var ( | ||||
| 				rr             RR | ||||
| 				parseAsRFC3597 bool | ||||
| 			) | ||||
| 			if newFn, ok := TypeToRR[h.Rrtype]; ok { | ||||
| 				rr = newFn() | ||||
| 				*rr.Header() = *h | ||||
|  | ||||
| 				// We may be parsing a known RR type using the RFC3597 format. | ||||
| 				// If so, we handle that here in a generic way. | ||||
| 				// | ||||
| 				// This is also true for PrivateRR types which will have the | ||||
| 				// RFC3597 parsing done for them and the Unpack method called | ||||
| 				// to populate the RR instead of simply deferring to Parse. | ||||
| 				if zp.c.Peek().token == "\\#" { | ||||
| 					parseAsRFC3597 = true | ||||
| 				} | ||||
| 			} else { | ||||
| 				rr = &RFC3597{Hdr: *h} | ||||
| 			} | ||||
| @ -600,13 +616,18 @@ func (zp *ZoneParser) Next() (RR, bool) { | ||||
| 				return zp.setParseError("unexpected newline", l) | ||||
| 			} | ||||
|  | ||||
| 			if err := rr.parse(zp.c, zp.origin); err != nil { | ||||
| 			parseAsRR := rr | ||||
| 			if parseAsRFC3597 { | ||||
| 				parseAsRR = &RFC3597{Hdr: *h} | ||||
| 			} | ||||
|  | ||||
| 			if err := parseAsRR.parse(zp.c, zp.origin); err != nil { | ||||
| 				// err is a concrete *ParseError without the file field set. | ||||
| 				// The setParseError call below will construct a new | ||||
| 				// *ParseError with file set to zp.file. | ||||
|  | ||||
| 				// If err.lex is nil than we have encounter an unknown RR type | ||||
| 				// in that case we substitute our current lex token. | ||||
| 				// err.lex may be nil in which case we substitute our current | ||||
| 				// lex token. | ||||
| 				if err.lex == (lex{}) { | ||||
| 					return zp.setParseError(err.err, l) | ||||
| 				} | ||||
| @ -614,6 +635,13 @@ func (zp *ZoneParser) Next() (RR, bool) { | ||||
| 				return zp.setParseError(err.err, err.lex) | ||||
| 			} | ||||
|  | ||||
| 			if parseAsRFC3597 { | ||||
| 				err := parseAsRR.(*RFC3597).fromRFC3597(rr) | ||||
| 				if err != nil { | ||||
| 					return zp.setParseError(err.Error(), l) | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			return rr, true | ||||
| 		} | ||||
| 	} | ||||
| @ -623,18 +651,6 @@ func (zp *ZoneParser) Next() (RR, bool) { | ||||
| 	return nil, false | ||||
| } | ||||
|  | ||||
| // canParseAsRR returns true if the record type can be parsed as a | ||||
| // concrete RR. It blacklists certain record types that must be parsed | ||||
| // according to RFC 3597 because they lack a presentation format. | ||||
| func canParseAsRR(rrtype uint16) bool { | ||||
| 	switch rrtype { | ||||
| 	case TypeANY, TypeNULL, TypeOPT, TypeTSIG: | ||||
| 		return false | ||||
| 	default: | ||||
| 		return true | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type zlexer struct { | ||||
| 	br io.ByteReader | ||||
|  | ||||
| @ -1220,7 +1236,7 @@ func stringToCm(token string) (e, m uint8, ok bool) { | ||||
| 			// 'nn.1' must be treated as 'nn-meters and 10cm, not 1cm. | ||||
| 			cmeters *= 10 | ||||
| 		} | ||||
| 		if len(s[0]) == 0 { | ||||
| 		if s[0] == "" { | ||||
| 			// This will allow omitting the 'meter' part, like .01 (meaning 0.01m = 1cm). | ||||
| 			break | ||||
| 		} | ||||
| @ -1290,7 +1306,7 @@ func appendOrigin(name, origin string) string { | ||||
|  | ||||
| // LOC record helper function | ||||
| func locCheckNorth(token string, latitude uint32) (uint32, bool) { | ||||
| 	if latitude > 90 * 1000 * 60 * 60 { | ||||
| 	if latitude > 90*1000*60*60 { | ||||
| 		return latitude, false | ||||
| 	} | ||||
| 	switch token { | ||||
| @ -1304,7 +1320,7 @@ func locCheckNorth(token string, latitude uint32) (uint32, bool) { | ||||
|  | ||||
| // LOC record helper function | ||||
| func locCheckEast(token string, longitude uint32) (uint32, bool) { | ||||
| 	if longitude > 180 * 1000 * 60 * 60 { | ||||
| 	if longitude > 180*1000*60*60 { | ||||
| 		return longitude, false | ||||
| 	} | ||||
| 	switch token { | ||||
| @ -1339,7 +1355,7 @@ func stringToNodeID(l lex) (uint64, *ParseError) { | ||||
| 	if len(l.token) < 19 { | ||||
| 		return 0, &ParseError{l.token, "bad NID/L64 NodeID/Locator64", l} | ||||
| 	} | ||||
| 	// There must be three colons at fixes postitions, if not its a parse error | ||||
| 	// There must be three colons at fixes positions, if not its a parse error | ||||
| 	if l.token[4] != ':' && l.token[9] != ':' && l.token[14] != ':' { | ||||
| 		return 0, &ParseError{l.token, "bad NID/L64 NodeID/Locator64", l} | ||||
| 	} | ||||
|  | ||||
							
								
								
									
										56
									
								
								vendor/github.com/miekg/dns/scan_rr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								vendor/github.com/miekg/dns/scan_rr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -609,7 +609,7 @@ func (rr *LOC) parse(c *zlexer, o string) *ParseError { | ||||
|  | ||||
| 	c.Next() // zBlank | ||||
| 	l, _ = c.Next() | ||||
| 	if i, err := strconv.ParseFloat(l.token, 32); err != nil || l.err || i < 0 || i >= 60 { | ||||
| 	if i, err := strconv.ParseFloat(l.token, 64); err != nil || l.err || i < 0 || i >= 60 { | ||||
| 		return &ParseError{"", "bad LOC Latitude seconds", l} | ||||
| 	} else { | ||||
| 		rr.Latitude += uint32(1000 * i) | ||||
| @ -645,7 +645,7 @@ East: | ||||
| 	} | ||||
| 	c.Next() // zBlank | ||||
| 	l, _ = c.Next() | ||||
| 	if i, err := strconv.ParseFloat(l.token, 32); err != nil || l.err || i < 0 || i >= 60 { | ||||
| 	if i, err := strconv.ParseFloat(l.token, 64); err != nil || l.err || i < 0 || i >= 60 { | ||||
| 		return &ParseError{"", "bad LOC Longitude seconds", l} | ||||
| 	} else { | ||||
| 		rr.Longitude += uint32(1000 * i) | ||||
| @ -662,7 +662,7 @@ East: | ||||
| Altitude: | ||||
| 	c.Next() // zBlank | ||||
| 	l, _ = c.Next() | ||||
| 	if len(l.token) == 0 || l.err { | ||||
| 	if l.token == "" || l.err { | ||||
| 		return &ParseError{"", "bad LOC Altitude", l} | ||||
| 	} | ||||
| 	if l.token[len(l.token)-1] == 'M' || l.token[len(l.token)-1] == 'm' { | ||||
| @ -722,7 +722,7 @@ func (rr *HIP) parse(c *zlexer, o string) *ParseError { | ||||
|  | ||||
| 	c.Next()        // zBlank | ||||
| 	l, _ = c.Next() // zString | ||||
| 	if len(l.token) == 0 || l.err { | ||||
| 	if l.token == "" || l.err { | ||||
| 		return &ParseError{"", "bad HIP Hit", l} | ||||
| 	} | ||||
| 	rr.Hit = l.token // This can not contain spaces, see RFC 5205 Section 6. | ||||
| @ -730,11 +730,15 @@ func (rr *HIP) parse(c *zlexer, o string) *ParseError { | ||||
|  | ||||
| 	c.Next()        // zBlank | ||||
| 	l, _ = c.Next() // zString | ||||
| 	if len(l.token) == 0 || l.err { | ||||
| 	if l.token == "" || l.err { | ||||
| 		return &ParseError{"", "bad HIP PublicKey", l} | ||||
| 	} | ||||
| 	rr.PublicKey = l.token // This cannot contain spaces | ||||
| 	rr.PublicKeyLength = uint16(base64.StdEncoding.DecodedLen(len(rr.PublicKey))) | ||||
| 	decodedPK, decodedPKerr := base64.StdEncoding.DecodeString(rr.PublicKey) | ||||
| 	if decodedPKerr != nil { | ||||
| 		return &ParseError{"", "bad HIP PublicKey", l} | ||||
| 	} | ||||
| 	rr.PublicKeyLength = uint16(len(decodedPK)) | ||||
|  | ||||
| 	// RendezvousServers (if any) | ||||
| 	l, _ = c.Next() | ||||
| @ -846,6 +850,38 @@ func (rr *CSYNC) parse(c *zlexer, o string) *ParseError { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (rr *ZONEMD) parse(c *zlexer, o string) *ParseError { | ||||
| 	l, _ := c.Next() | ||||
| 	i, e := strconv.ParseUint(l.token, 10, 32) | ||||
| 	if e != nil || l.err { | ||||
| 		return &ParseError{"", "bad ZONEMD Serial", l} | ||||
| 	} | ||||
| 	rr.Serial = uint32(i) | ||||
|  | ||||
| 	c.Next() // zBlank | ||||
| 	l, _ = c.Next() | ||||
| 	i, e1 := strconv.ParseUint(l.token, 10, 8) | ||||
| 	if e1 != nil || l.err { | ||||
| 		return &ParseError{"", "bad ZONEMD Scheme", l} | ||||
| 	} | ||||
| 	rr.Scheme = uint8(i) | ||||
|  | ||||
| 	c.Next() // zBlank | ||||
| 	l, _ = c.Next() | ||||
| 	i, err := strconv.ParseUint(l.token, 10, 8) | ||||
| 	if err != nil || l.err { | ||||
| 		return &ParseError{"", "bad ZONEMD Hash Algorithm", l} | ||||
| 	} | ||||
| 	rr.Hash = uint8(i) | ||||
|  | ||||
| 	s, e2 := endingToString(c, "bad ZONEMD Digest") | ||||
| 	if e2 != nil { | ||||
| 		return e2 | ||||
| 	} | ||||
| 	rr.Digest = s | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (rr *SIG) parse(c *zlexer, o string) *ParseError { return rr.RRSIG.parse(c, o) } | ||||
|  | ||||
| func (rr *RRSIG) parse(c *zlexer, o string) *ParseError { | ||||
| @ -997,7 +1033,7 @@ func (rr *NSEC3) parse(c *zlexer, o string) *ParseError { | ||||
| 	rr.Iterations = uint16(i) | ||||
| 	c.Next() | ||||
| 	l, _ = c.Next() | ||||
| 	if len(l.token) == 0 || l.err { | ||||
| 	if l.token == "" || l.err { | ||||
| 		return &ParseError{"", "bad NSEC3 Salt", l} | ||||
| 	} | ||||
| 	if l.token != "-" { | ||||
| @ -1007,7 +1043,7 @@ func (rr *NSEC3) parse(c *zlexer, o string) *ParseError { | ||||
|  | ||||
| 	c.Next() | ||||
| 	l, _ = c.Next() | ||||
| 	if len(l.token) == 0 || l.err { | ||||
| 	if l.token == "" || l.err { | ||||
| 		return &ParseError{"", "bad NSEC3 NextDomain", l} | ||||
| 	} | ||||
| 	rr.HashLength = 20 // Fix for NSEC3 (sha1 160 bits) | ||||
| @ -1387,7 +1423,7 @@ func (rr *RFC3597) parse(c *zlexer, o string) *ParseError { | ||||
|  | ||||
| 	c.Next() // zBlank | ||||
| 	l, _ = c.Next() | ||||
| 	rdlength, e := strconv.Atoi(l.token) | ||||
| 	rdlength, e := strconv.ParseUint(l.token, 10, 16) | ||||
| 	if e != nil || l.err { | ||||
| 		return &ParseError{"", "bad RFC3597 Rdata ", l} | ||||
| 	} | ||||
| @ -1396,7 +1432,7 @@ func (rr *RFC3597) parse(c *zlexer, o string) *ParseError { | ||||
| 	if e1 != nil { | ||||
| 		return e1 | ||||
| 	} | ||||
| 	if rdlength*2 != len(s) { | ||||
| 	if int(rdlength)*2 != len(s) { | ||||
| 		return &ParseError{"", "bad RFC3597 Rdata", l} | ||||
| 	} | ||||
| 	rr.Rdata = s | ||||
|  | ||||
							
								
								
									
										10
									
								
								vendor/github.com/miekg/dns/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/miekg/dns/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -321,6 +321,7 @@ func (srv *Server) ListenAndServe() error { | ||||
| 		} | ||||
| 		u := l.(*net.UDPConn) | ||||
| 		if e := setUDPSocketOptions(u); e != nil { | ||||
| 			u.Close() | ||||
| 			return e | ||||
| 		} | ||||
| 		srv.PacketConn = l | ||||
| @ -752,11 +753,10 @@ func (w *response) Write(m []byte) (int, error) { | ||||
| 			return 0, &Error{err: "message too large"} | ||||
| 		} | ||||
|  | ||||
| 		l := make([]byte, 2) | ||||
| 		binary.BigEndian.PutUint16(l, uint16(len(m))) | ||||
|  | ||||
| 		n, err := (&net.Buffers{l, m}).WriteTo(w.tcp) | ||||
| 		return int(n), err | ||||
| 		msg := make([]byte, 2+len(m)) | ||||
| 		binary.BigEndian.PutUint16(msg, uint16(len(m))) | ||||
| 		copy(msg[2:], m) | ||||
| 		return w.tcp.Write(msg) | ||||
| 	default: | ||||
| 		panic("dns: internal error: udp and tcp both nil") | ||||
| 	} | ||||
|  | ||||
							
								
								
									
										4
									
								
								vendor/github.com/miekg/dns/sig0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/miekg/dns/sig0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -17,7 +17,7 @@ func (rr *SIG) Sign(k crypto.Signer, m *Msg) ([]byte, error) { | ||||
| 	if k == nil { | ||||
| 		return nil, ErrPrivKey | ||||
| 	} | ||||
| 	if rr.KeyTag == 0 || len(rr.SignerName) == 0 || rr.Algorithm == 0 { | ||||
| 	if rr.KeyTag == 0 || rr.SignerName == "" || rr.Algorithm == 0 { | ||||
| 		return nil, ErrKey | ||||
| 	} | ||||
|  | ||||
| @ -78,7 +78,7 @@ func (rr *SIG) Verify(k *KEY, buf []byte) error { | ||||
| 	if k == nil { | ||||
| 		return ErrKey | ||||
| 	} | ||||
| 	if rr.KeyTag == 0 || len(rr.SignerName) == 0 || rr.Algorithm == 0 { | ||||
| 	if rr.KeyTag == 0 || rr.SignerName == "" || rr.Algorithm == 0 { | ||||
| 		return ErrKey | ||||
| 	} | ||||
|  | ||||
|  | ||||
							
								
								
									
										21
									
								
								vendor/github.com/miekg/dns/svcb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/miekg/dns/svcb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -10,6 +10,7 @@ import ( | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // SVCBKey is the type of the keys used in the SVCB RR. | ||||
| type SVCBKey uint16 | ||||
|  | ||||
| // Keys defined in draft-ietf-dnsop-svcb-https-01 Section 12.3.2. | ||||
| @ -204,7 +205,7 @@ type SVCB struct { | ||||
| 	Hdr      RR_Header | ||||
| 	Priority uint16 | ||||
| 	Target   string         `dns:"domain-name"` | ||||
| 	Value    []SVCBKeyValue `dns:"pairs"` // Value must be empty if Priority is non-zero. | ||||
| 	Value    []SVCBKeyValue `dns:"pairs"` // Value must be empty if Priority is zero. | ||||
| } | ||||
|  | ||||
| // HTTPS RR. Everything valid for SVCB applies to HTTPS as well. | ||||
| @ -321,7 +322,7 @@ func (s *SVCBAlpn) pack() ([]byte, error) { | ||||
| 	// Liberally estimate the size of an alpn as 10 octets | ||||
| 	b := make([]byte, 0, 10*len(s.Alpn)) | ||||
| 	for _, e := range s.Alpn { | ||||
| 		if len(e) == 0 { | ||||
| 		if e == "" { | ||||
| 			return nil, errors.New("dns: svcbalpn: empty alpn-id") | ||||
| 		} | ||||
| 		if len(e) > 255 { | ||||
| @ -390,7 +391,7 @@ func (*SVCBNoDefaultAlpn) unpack(b []byte) error { | ||||
| } | ||||
|  | ||||
| func (*SVCBNoDefaultAlpn) parse(b string) error { | ||||
| 	if len(b) != 0 { | ||||
| 	if b != "" { | ||||
| 		return errors.New("dns: svcbnodefaultalpn: no_default_alpn must have no value") | ||||
| 	} | ||||
| 	return nil | ||||
| @ -511,8 +512,13 @@ func (s *SVCBIPv4Hint) parse(b string) error { | ||||
| } | ||||
|  | ||||
| func (s *SVCBIPv4Hint) copy() SVCBKeyValue { | ||||
| 	hint := make([]net.IP, len(s.Hint)) | ||||
| 	for i, ip := range s.Hint { | ||||
| 		hint[i] = copyIP(ip) | ||||
| 	} | ||||
|  | ||||
| 	return &SVCBIPv4Hint{ | ||||
| 		append([]net.IP(nil), s.Hint...), | ||||
| 		Hint: hint, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -629,8 +635,13 @@ func (s *SVCBIPv6Hint) parse(b string) error { | ||||
| } | ||||
|  | ||||
| func (s *SVCBIPv6Hint) copy() SVCBKeyValue { | ||||
| 	hint := make([]net.IP, len(s.Hint)) | ||||
| 	for i, ip := range s.Hint { | ||||
| 		hint[i] = copyIP(ip) | ||||
| 	} | ||||
|  | ||||
| 	return &SVCBIPv6Hint{ | ||||
| 		append([]net.IP(nil), s.Hint...), | ||||
| 		Hint: hint, | ||||
| 	} | ||||
| } | ||||
|  | ||||
|  | ||||
							
								
								
									
										122
									
								
								vendor/github.com/miekg/dns/tsig.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										122
									
								
								vendor/github.com/miekg/dns/tsig.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -24,6 +24,56 @@ const ( | ||||
| 	HmacMD5 = "hmac-md5.sig-alg.reg.int." // Deprecated: HmacMD5 is no longer supported. | ||||
| ) | ||||
|  | ||||
| // TsigProvider provides the API to plug-in a custom TSIG implementation. | ||||
| type TsigProvider interface { | ||||
| 	// Generate is passed the DNS message to be signed and the partial TSIG RR. It returns the signature and nil, otherwise an error. | ||||
| 	Generate(msg []byte, t *TSIG) ([]byte, error) | ||||
| 	// Verify is passed the DNS message to be verified and the TSIG RR. If the signature is valid it will return nil, otherwise an error. | ||||
| 	Verify(msg []byte, t *TSIG) error | ||||
| } | ||||
|  | ||||
| type tsigHMACProvider string | ||||
|  | ||||
| func (key tsigHMACProvider) Generate(msg []byte, t *TSIG) ([]byte, error) { | ||||
| 	// If we barf here, the caller is to blame | ||||
| 	rawsecret, err := fromBase64([]byte(key)) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	var h hash.Hash | ||||
| 	switch CanonicalName(t.Algorithm) { | ||||
| 	case HmacSHA1: | ||||
| 		h = hmac.New(sha1.New, rawsecret) | ||||
| 	case HmacSHA224: | ||||
| 		h = hmac.New(sha256.New224, rawsecret) | ||||
| 	case HmacSHA256: | ||||
| 		h = hmac.New(sha256.New, rawsecret) | ||||
| 	case HmacSHA384: | ||||
| 		h = hmac.New(sha512.New384, rawsecret) | ||||
| 	case HmacSHA512: | ||||
| 		h = hmac.New(sha512.New, rawsecret) | ||||
| 	default: | ||||
| 		return nil, ErrKeyAlg | ||||
| 	} | ||||
| 	h.Write(msg) | ||||
| 	return h.Sum(nil), nil | ||||
| } | ||||
|  | ||||
| func (key tsigHMACProvider) Verify(msg []byte, t *TSIG) error { | ||||
| 	b, err := key.Generate(msg, t) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	mac, err := hex.DecodeString(t.MAC) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if !hmac.Equal(b, mac) { | ||||
| 		return ErrSig | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // TSIG is the RR the holds the transaction signature of a message. | ||||
| // See RFC 2845 and RFC 4635. | ||||
| type TSIG struct { | ||||
| @ -56,8 +106,8 @@ func (rr *TSIG) String() string { | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| func (rr *TSIG) parse(c *zlexer, origin string) *ParseError { | ||||
| 	panic("dns: internal error: parse should never be called on TSIG") | ||||
| func (*TSIG) parse(c *zlexer, origin string) *ParseError { | ||||
| 	return &ParseError{err: "TSIG records do not have a presentation format"} | ||||
| } | ||||
|  | ||||
| // The following values must be put in wireformat, so that the MAC can be calculated. | ||||
| @ -98,14 +148,13 @@ type timerWireFmt struct { | ||||
| // timersOnly is false. | ||||
| // If something goes wrong an error is returned, otherwise it is nil. | ||||
| func TsigGenerate(m *Msg, secret, requestMAC string, timersOnly bool) ([]byte, string, error) { | ||||
| 	return tsigGenerateProvider(m, tsigHMACProvider(secret), requestMAC, timersOnly) | ||||
| } | ||||
|  | ||||
| func tsigGenerateProvider(m *Msg, provider TsigProvider, requestMAC string, timersOnly bool) ([]byte, string, error) { | ||||
| 	if m.IsTsig() == nil { | ||||
| 		panic("dns: TSIG not last RR in additional") | ||||
| 	} | ||||
| 	// If we barf here, the caller is to blame | ||||
| 	rawsecret, err := fromBase64([]byte(secret)) | ||||
| 	if err != nil { | ||||
| 		return nil, "", err | ||||
| 	} | ||||
|  | ||||
| 	rr := m.Extra[len(m.Extra)-1].(*TSIG) | ||||
| 	m.Extra = m.Extra[0 : len(m.Extra)-1] // kill the TSIG from the msg | ||||
| @ -119,25 +168,13 @@ func TsigGenerate(m *Msg, secret, requestMAC string, timersOnly bool) ([]byte, s | ||||
| 	} | ||||
|  | ||||
| 	t := new(TSIG) | ||||
| 	var h hash.Hash | ||||
| 	switch CanonicalName(rr.Algorithm) { | ||||
| 	case HmacSHA1: | ||||
| 		h = hmac.New(sha1.New, rawsecret) | ||||
| 	case HmacSHA224: | ||||
| 		h = hmac.New(sha256.New224, rawsecret) | ||||
| 	case HmacSHA256: | ||||
| 		h = hmac.New(sha256.New, rawsecret) | ||||
| 	case HmacSHA384: | ||||
| 		h = hmac.New(sha512.New384, rawsecret) | ||||
| 	case HmacSHA512: | ||||
| 		h = hmac.New(sha512.New, rawsecret) | ||||
| 	default: | ||||
| 		return nil, "", ErrKeyAlg | ||||
| 	} | ||||
| 	h.Write(buf) | ||||
| 	// Copy all TSIG fields except MAC and its size, which are filled using the computed digest. | ||||
| 	*t = *rr | ||||
| 	t.MAC = hex.EncodeToString(h.Sum(nil)) | ||||
| 	mac, err := provider.Generate(buf, rr) | ||||
| 	if err != nil { | ||||
| 		return nil, "", err | ||||
| 	} | ||||
| 	t.MAC = hex.EncodeToString(mac) | ||||
| 	t.MACSize = uint16(len(t.MAC) / 2) // Size is half! | ||||
|  | ||||
| 	tbuf := make([]byte, Len(t)) | ||||
| @ -156,49 +193,28 @@ func TsigGenerate(m *Msg, secret, requestMAC string, timersOnly bool) ([]byte, s | ||||
| // If the signature does not validate err contains the | ||||
| // error, otherwise it is nil. | ||||
| func TsigVerify(msg []byte, secret, requestMAC string, timersOnly bool) error { | ||||
| 	return tsigVerify(msg, secret, requestMAC, timersOnly, uint64(time.Now().Unix())) | ||||
| 	return tsigVerify(msg, tsigHMACProvider(secret), requestMAC, timersOnly, uint64(time.Now().Unix())) | ||||
| } | ||||
|  | ||||
| func tsigVerifyProvider(msg []byte, provider TsigProvider, requestMAC string, timersOnly bool) error { | ||||
| 	return tsigVerify(msg, provider, requestMAC, timersOnly, uint64(time.Now().Unix())) | ||||
| } | ||||
|  | ||||
| // actual implementation of TsigVerify, taking the current time ('now') as a parameter for the convenience of tests. | ||||
| func tsigVerify(msg []byte, secret, requestMAC string, timersOnly bool, now uint64) error { | ||||
| 	rawsecret, err := fromBase64([]byte(secret)) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| func tsigVerify(msg []byte, provider TsigProvider, requestMAC string, timersOnly bool, now uint64) error { | ||||
| 	// Strip the TSIG from the incoming msg | ||||
| 	stripped, tsig, err := stripTsig(msg) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	msgMAC, err := hex.DecodeString(tsig.MAC) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	buf, err := tsigBuffer(stripped, tsig, requestMAC, timersOnly) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	var h hash.Hash | ||||
| 	switch CanonicalName(tsig.Algorithm) { | ||||
| 	case HmacSHA1: | ||||
| 		h = hmac.New(sha1.New, rawsecret) | ||||
| 	case HmacSHA224: | ||||
| 		h = hmac.New(sha256.New224, rawsecret) | ||||
| 	case HmacSHA256: | ||||
| 		h = hmac.New(sha256.New, rawsecret) | ||||
| 	case HmacSHA384: | ||||
| 		h = hmac.New(sha512.New384, rawsecret) | ||||
| 	case HmacSHA512: | ||||
| 		h = hmac.New(sha512.New, rawsecret) | ||||
| 	default: | ||||
| 		return ErrKeyAlg | ||||
| 	} | ||||
| 	h.Write(buf) | ||||
| 	if !hmac.Equal(h.Sum(nil), msgMAC) { | ||||
| 		return ErrSig | ||||
| 	if err := provider.Verify(buf, tsig); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	// Fudge factor works both ways. A message can arrive before it was signed because | ||||
|  | ||||
							
								
								
									
										62
									
								
								vendor/github.com/miekg/dns/types.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								vendor/github.com/miekg/dns/types.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -81,6 +81,7 @@ const ( | ||||
| 	TypeCDNSKEY    uint16 = 60 | ||||
| 	TypeOPENPGPKEY uint16 = 61 | ||||
| 	TypeCSYNC      uint16 = 62 | ||||
| 	TypeZONEMD     uint16 = 63 | ||||
| 	TypeSVCB       uint16 = 64 | ||||
| 	TypeHTTPS      uint16 = 65 | ||||
| 	TypeSPF        uint16 = 99 | ||||
| @ -150,6 +151,14 @@ const ( | ||||
| 	OpcodeUpdate = 5 | ||||
| ) | ||||
|  | ||||
| // Used in ZONEMD https://tools.ietf.org/html/rfc8976 | ||||
| const ( | ||||
| 	ZoneMDSchemeSimple = 1 | ||||
|  | ||||
| 	ZoneMDHashAlgSHA384 = 1 | ||||
| 	ZoneMDHashAlgSHA512 = 2 | ||||
| ) | ||||
|  | ||||
| // Header is the wire format for the DNS packet header. | ||||
| type Header struct { | ||||
| 	Id                                 uint16 | ||||
| @ -245,8 +254,8 @@ type ANY struct { | ||||
|  | ||||
| func (rr *ANY) String() string { return rr.Hdr.String() } | ||||
|  | ||||
| func (rr *ANY) parse(c *zlexer, origin string) *ParseError { | ||||
| 	panic("dns: internal error: parse should never be called on ANY") | ||||
| func (*ANY) parse(c *zlexer, origin string) *ParseError { | ||||
| 	return &ParseError{err: "ANY records do not have a presentation format"} | ||||
| } | ||||
|  | ||||
| // NULL RR. See RFC 1035. | ||||
| @ -260,8 +269,8 @@ func (rr *NULL) String() string { | ||||
| 	return ";" + rr.Hdr.String() + rr.Data | ||||
| } | ||||
|  | ||||
| func (rr *NULL) parse(c *zlexer, origin string) *ParseError { | ||||
| 	panic("dns: internal error: parse should never be called on NULL") | ||||
| func (*NULL) parse(c *zlexer, origin string) *ParseError { | ||||
| 	return &ParseError{err: "NULL records do not have a presentation format"} | ||||
| } | ||||
|  | ||||
| // CNAME RR. See RFC 1034. | ||||
| @ -1361,6 +1370,23 @@ func (rr *CSYNC) len(off int, compression map[string]struct{}) int { | ||||
| 	return l | ||||
| } | ||||
|  | ||||
| // ZONEMD RR, from draft-ietf-dnsop-dns-zone-digest | ||||
| type ZONEMD struct { | ||||
| 	Hdr    RR_Header | ||||
| 	Serial uint32 | ||||
| 	Scheme uint8 | ||||
| 	Hash   uint8 | ||||
| 	Digest string `dns:"hex"` | ||||
| } | ||||
|  | ||||
| func (rr *ZONEMD) String() string { | ||||
| 	return rr.Hdr.String() + | ||||
| 		strconv.Itoa(int(rr.Serial)) + | ||||
| 		" " + strconv.Itoa(int(rr.Scheme)) + | ||||
| 		" " + strconv.Itoa(int(rr.Hash)) + | ||||
| 		" " + rr.Digest | ||||
| } | ||||
|  | ||||
| // APL RR. See RFC 3123. | ||||
| type APL struct { | ||||
| 	Hdr      RR_Header | ||||
| @ -1387,13 +1413,13 @@ func (rr *APL) String() string { | ||||
| } | ||||
|  | ||||
| // str returns presentation form of the APL prefix. | ||||
| func (p *APLPrefix) str() string { | ||||
| func (a *APLPrefix) str() string { | ||||
| 	var sb strings.Builder | ||||
| 	if p.Negation { | ||||
| 	if a.Negation { | ||||
| 		sb.WriteByte('!') | ||||
| 	} | ||||
|  | ||||
| 	switch len(p.Network.IP) { | ||||
| 	switch len(a.Network.IP) { | ||||
| 	case net.IPv4len: | ||||
| 		sb.WriteByte('1') | ||||
| 	case net.IPv6len: | ||||
| @ -1402,20 +1428,20 @@ func (p *APLPrefix) str() string { | ||||
|  | ||||
| 	sb.WriteByte(':') | ||||
|  | ||||
| 	switch len(p.Network.IP) { | ||||
| 	switch len(a.Network.IP) { | ||||
| 	case net.IPv4len: | ||||
| 		sb.WriteString(p.Network.IP.String()) | ||||
| 		sb.WriteString(a.Network.IP.String()) | ||||
| 	case net.IPv6len: | ||||
| 		// add prefix for IPv4-mapped IPv6 | ||||
| 		if v4 := p.Network.IP.To4(); v4 != nil { | ||||
| 		if v4 := a.Network.IP.To4(); v4 != nil { | ||||
| 			sb.WriteString("::ffff:") | ||||
| 		} | ||||
| 		sb.WriteString(p.Network.IP.String()) | ||||
| 		sb.WriteString(a.Network.IP.String()) | ||||
| 	} | ||||
|  | ||||
| 	sb.WriteByte('/') | ||||
|  | ||||
| 	prefix, _ := p.Network.Mask.Size() | ||||
| 	prefix, _ := a.Network.Mask.Size() | ||||
| 	sb.WriteString(strconv.Itoa(prefix)) | ||||
|  | ||||
| 	return sb.String() | ||||
| @ -1429,17 +1455,17 @@ func (a *APLPrefix) equals(b *APLPrefix) bool { | ||||
| } | ||||
|  | ||||
| // copy returns a copy of the APL prefix. | ||||
| func (p *APLPrefix) copy() APLPrefix { | ||||
| func (a *APLPrefix) copy() APLPrefix { | ||||
| 	return APLPrefix{ | ||||
| 		Negation: p.Negation, | ||||
| 		Network:  copyNet(p.Network), | ||||
| 		Negation: a.Negation, | ||||
| 		Network:  copyNet(a.Network), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // len returns size of the prefix in wire format. | ||||
| func (p *APLPrefix) len() int { | ||||
| func (a *APLPrefix) len() int { | ||||
| 	// 4-byte header and the network address prefix (see Section 4 of RFC 3123) | ||||
| 	prefix, _ := p.Network.Mask.Size() | ||||
| 	prefix, _ := a.Network.Mask.Size() | ||||
| 	return 4 + (prefix+7)/8 | ||||
| } | ||||
|  | ||||
| @ -1472,7 +1498,7 @@ func StringToTime(s string) (uint32, error) { | ||||
|  | ||||
| // saltToString converts a NSECX salt to uppercase and returns "-" when it is empty. | ||||
| func saltToString(s string) string { | ||||
| 	if len(s) == 0 { | ||||
| 	if s == "" { | ||||
| 		return "-" | ||||
| 	} | ||||
| 	return strings.ToUpper(s) | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/github.com/miekg/dns/version.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/miekg/dns/version.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -3,7 +3,7 @@ package dns | ||||
| import "fmt" | ||||
|  | ||||
| // Version is current version of this library. | ||||
| var Version = v{1, 1, 35} | ||||
| var Version = v{1, 1, 43} | ||||
|  | ||||
| // v holds the version of this library. | ||||
| type v struct { | ||||
|  | ||||
							
								
								
									
										21
									
								
								vendor/github.com/miekg/dns/zduplicate.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/miekg/dns/zduplicate.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1317,3 +1317,24 @@ func (r1 *X25) isDuplicate(_r2 RR) bool { | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| func (r1 *ZONEMD) isDuplicate(_r2 RR) bool { | ||||
| 	r2, ok := _r2.(*ZONEMD) | ||||
| 	if !ok { | ||||
| 		return false | ||||
| 	} | ||||
| 	_ = r2 | ||||
| 	if r1.Serial != r2.Serial { | ||||
| 		return false | ||||
| 	} | ||||
| 	if r1.Scheme != r2.Scheme { | ||||
| 		return false | ||||
| 	} | ||||
| 	if r1.Hash != r2.Hash { | ||||
| 		return false | ||||
| 	} | ||||
| 	if r1.Digest != r2.Digest { | ||||
| 		return false | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
|  | ||||
							
								
								
									
										52
									
								
								vendor/github.com/miekg/dns/zmsg.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								vendor/github.com/miekg/dns/zmsg.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1118,6 +1118,26 @@ func (rr *X25) pack(msg []byte, off int, compression compressionMap, compress bo | ||||
| 	return off, nil | ||||
| } | ||||
|  | ||||
| func (rr *ZONEMD) pack(msg []byte, off int, compression compressionMap, compress bool) (off1 int, err error) { | ||||
| 	off, err = packUint32(rr.Serial, msg, off) | ||||
| 	if err != nil { | ||||
| 		return off, err | ||||
| 	} | ||||
| 	off, err = packUint8(rr.Scheme, msg, off) | ||||
| 	if err != nil { | ||||
| 		return off, err | ||||
| 	} | ||||
| 	off, err = packUint8(rr.Hash, msg, off) | ||||
| 	if err != nil { | ||||
| 		return off, err | ||||
| 	} | ||||
| 	off, err = packStringHex(rr.Digest, msg, off) | ||||
| 	if err != nil { | ||||
| 		return off, err | ||||
| 	} | ||||
| 	return off, nil | ||||
| } | ||||
|  | ||||
| // unpack*() functions | ||||
|  | ||||
| func (rr *A) unpack(msg []byte, off int) (off1 int, err error) { | ||||
| @ -2821,3 +2841,35 @@ func (rr *X25) unpack(msg []byte, off int) (off1 int, err error) { | ||||
| 	} | ||||
| 	return off, nil | ||||
| } | ||||
|  | ||||
| func (rr *ZONEMD) unpack(msg []byte, off int) (off1 int, err error) { | ||||
| 	rdStart := off | ||||
| 	_ = rdStart | ||||
|  | ||||
| 	rr.Serial, off, err = unpackUint32(msg, off) | ||||
| 	if err != nil { | ||||
| 		return off, err | ||||
| 	} | ||||
| 	if off == len(msg) { | ||||
| 		return off, nil | ||||
| 	} | ||||
| 	rr.Scheme, off, err = unpackUint8(msg, off) | ||||
| 	if err != nil { | ||||
| 		return off, err | ||||
| 	} | ||||
| 	if off == len(msg) { | ||||
| 		return off, nil | ||||
| 	} | ||||
| 	rr.Hash, off, err = unpackUint8(msg, off) | ||||
| 	if err != nil { | ||||
| 		return off, err | ||||
| 	} | ||||
| 	if off == len(msg) { | ||||
| 		return off, nil | ||||
| 	} | ||||
| 	rr.Digest, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength)) | ||||
| 	if err != nil { | ||||
| 		return off, err | ||||
| 	} | ||||
| 	return off, nil | ||||
| } | ||||
|  | ||||
							
								
								
									
										14
									
								
								vendor/github.com/miekg/dns/ztypes.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/github.com/miekg/dns/ztypes.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -82,6 +82,7 @@ var TypeToRR = map[uint16]func() RR{ | ||||
| 	TypeUINFO:      func() RR { return new(UINFO) }, | ||||
| 	TypeURI:        func() RR { return new(URI) }, | ||||
| 	TypeX25:        func() RR { return new(X25) }, | ||||
| 	TypeZONEMD:     func() RR { return new(ZONEMD) }, | ||||
| } | ||||
|  | ||||
| // TypeToString is a map of strings for each RR type. | ||||
| @ -168,6 +169,7 @@ var TypeToString = map[uint16]string{ | ||||
| 	TypeUNSPEC:     "UNSPEC", | ||||
| 	TypeURI:        "URI", | ||||
| 	TypeX25:        "X25", | ||||
| 	TypeZONEMD:     "ZONEMD", | ||||
| 	TypeNSAPPTR:    "NSAP-PTR", | ||||
| } | ||||
|  | ||||
| @ -245,6 +247,7 @@ func (rr *UID) Header() *RR_Header        { return &rr.Hdr } | ||||
| func (rr *UINFO) Header() *RR_Header      { return &rr.Hdr } | ||||
| func (rr *URI) Header() *RR_Header        { return &rr.Hdr } | ||||
| func (rr *X25) Header() *RR_Header        { return &rr.Hdr } | ||||
| func (rr *ZONEMD) Header() *RR_Header     { return &rr.Hdr } | ||||
|  | ||||
| // len() functions | ||||
| func (rr *A) len(off int, compression map[string]struct{}) int { | ||||
| @ -684,6 +687,14 @@ func (rr *X25) len(off int, compression map[string]struct{}) int { | ||||
| 	l += len(rr.PSDNAddress) + 1 | ||||
| 	return l | ||||
| } | ||||
| func (rr *ZONEMD) len(off int, compression map[string]struct{}) int { | ||||
| 	l := rr.Hdr.len(off, compression) | ||||
| 	l += 4 // Serial | ||||
| 	l++    // Scheme | ||||
| 	l++    // Hash | ||||
| 	l += len(rr.Digest) / 2 | ||||
| 	return l | ||||
| } | ||||
|  | ||||
| // copy() functions | ||||
| func (rr *A) copy() RR { | ||||
| @ -936,3 +947,6 @@ func (rr *URI) copy() RR { | ||||
| func (rr *X25) copy() RR { | ||||
| 	return &X25{rr.Hdr, rr.PSDNAddress} | ||||
| } | ||||
| func (rr *ZONEMD) copy() RR { | ||||
| 	return &ZONEMD{rr.Hdr, rr.Serial, rr.Scheme, rr.Hash, rr.Digest} | ||||
| } | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/github.com/prometheus/client_golang/prometheus/desc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/prometheus/client_golang/prometheus/desc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -20,7 +20,7 @@ import ( | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/cespare/xxhash/v2" | ||||
| 	//lint:ignore SA1019 Need to keep deprecated package for compatibility. | ||||
| 	//nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"github.com/prometheus/common/model" | ||||
|  | ||||
|  | ||||
							
								
								
									
										39
									
								
								vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -22,43 +22,10 @@ type expvarCollector struct { | ||||
| 	exports map[string]*Desc | ||||
| } | ||||
|  | ||||
| // NewExpvarCollector returns a newly allocated expvar Collector that still has | ||||
| // to be registered with a Prometheus registry. | ||||
| // NewExpvarCollector is the obsolete version of collectors.NewExpvarCollector. | ||||
| // See there for documentation. | ||||
| // | ||||
| // An expvar Collector collects metrics from the expvar interface. It provides a | ||||
| // quick way to expose numeric values that are already exported via expvar as | ||||
| // Prometheus metrics. Note that the data models of expvar and Prometheus are | ||||
| // fundamentally different, and that the expvar Collector is inherently slower | ||||
| // than native Prometheus metrics. Thus, the expvar Collector is probably great | ||||
| // for experiments and prototying, but you should seriously consider a more | ||||
| // direct implementation of Prometheus metrics for monitoring production | ||||
| // systems. | ||||
| // | ||||
| // The exports map has the following meaning: | ||||
| // | ||||
| // The keys in the map correspond to expvar keys, i.e. for every expvar key you | ||||
| // want to export as Prometheus metric, you need an entry in the exports | ||||
| // map. The descriptor mapped to each key describes how to export the expvar | ||||
| // value. It defines the name and the help string of the Prometheus metric | ||||
| // proxying the expvar value. The type will always be Untyped. | ||||
| // | ||||
| // For descriptors without variable labels, the expvar value must be a number or | ||||
| // a bool. The number is then directly exported as the Prometheus sample | ||||
| // value. (For a bool, 'false' translates to 0 and 'true' to 1). Expvar values | ||||
| // that are not numbers or bools are silently ignored. | ||||
| // | ||||
| // If the descriptor has one variable label, the expvar value must be an expvar | ||||
| // map. The keys in the expvar map become the various values of the one | ||||
| // Prometheus label. The values in the expvar map must be numbers or bools again | ||||
| // as above. | ||||
| // | ||||
| // For descriptors with more than one variable label, the expvar must be a | ||||
| // nested expvar map, i.e. where the values of the topmost map are maps again | ||||
| // etc. until a depth is reached that corresponds to the number of labels. The | ||||
| // leaves of that structure must be numbers or bools as above to serve as the | ||||
| // sample values. | ||||
| // | ||||
| // Anything that does not fit into the scheme above is silently ignored. | ||||
| // Deprecated: Use collectors.NewExpvarCollector instead. | ||||
| func NewExpvarCollector(exports map[string]*Desc) Collector { | ||||
| 	return &expvarCollector{ | ||||
| 		exports: exports, | ||||
|  | ||||
							
								
								
									
										54
									
								
								vendor/github.com/prometheus/client_golang/prometheus/go_collector.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										54
									
								
								vendor/github.com/prometheus/client_golang/prometheus/go_collector.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -36,32 +36,10 @@ type goCollector struct { | ||||
| 	msMaxAge        time.Duration           // Maximum allowed age of old memstats. | ||||
| } | ||||
|  | ||||
| // NewGoCollector returns a collector that exports metrics about the current Go | ||||
| // process. This includes memory stats. To collect those, runtime.ReadMemStats | ||||
| // is called. This requires to “stop the world”, which usually only happens for | ||||
| // garbage collection (GC). Take the following implications into account when | ||||
| // deciding whether to use the Go collector: | ||||
| // NewGoCollector is the obsolete version of collectors.NewGoCollector. | ||||
| // See there for documentation. | ||||
| // | ||||
| // 1. The performance impact of stopping the world is the more relevant the more | ||||
| // frequently metrics are collected. However, with Go1.9 or later the | ||||
| // stop-the-world time per metrics collection is very short (~25µs) so that the | ||||
| // performance impact will only matter in rare cases. However, with older Go | ||||
| // versions, the stop-the-world duration depends on the heap size and can be | ||||
| // quite significant (~1.7 ms/GiB as per | ||||
| // https://go-review.googlesource.com/c/go/+/34937). | ||||
| // | ||||
| // 2. During an ongoing GC, nothing else can stop the world. Therefore, if the | ||||
| // metrics collection happens to coincide with GC, it will only complete after | ||||
| // GC has finished. Usually, GC is fast enough to not cause problems. However, | ||||
| // with a very large heap, GC might take multiple seconds, which is enough to | ||||
| // cause scrape timeouts in common setups. To avoid this problem, the Go | ||||
| // collector will use the memstats from a previous collection if | ||||
| // runtime.ReadMemStats takes more than 1s. However, if there are no previously | ||||
| // collected memstats, or their collection is more than 5m ago, the collection | ||||
| // will block until runtime.ReadMemStats succeeds. | ||||
| // | ||||
| // NOTE: The problem is solved in Go 1.15, see | ||||
| // https://github.com/golang/go/issues/19812 for the related Go issue. | ||||
| // Deprecated: Use collectors.NewGoCollector instead. | ||||
| func NewGoCollector() Collector { | ||||
| 	return &goCollector{ | ||||
| 		goroutinesDesc: NewDesc( | ||||
| @ -366,25 +344,17 @@ type memStatsMetrics []struct { | ||||
| 	valType ValueType | ||||
| } | ||||
|  | ||||
| // NewBuildInfoCollector returns a collector collecting a single metric | ||||
| // "go_build_info" with the constant value 1 and three labels "path", "version", | ||||
| // and "checksum". Their label values contain the main module path, version, and | ||||
| // checksum, respectively. The labels will only have meaningful values if the | ||||
| // binary is built with Go module support and from source code retrieved from | ||||
| // the source repository (rather than the local file system). This is usually | ||||
| // accomplished by building from outside of GOPATH, specifying the full address | ||||
| // of the main package, e.g. "GO111MODULE=on go run | ||||
| // github.com/prometheus/client_golang/examples/random". If built without Go | ||||
| // module support, all label values will be "unknown". If built with Go module | ||||
| // support but using the source code from the local file system, the "path" will | ||||
| // be set appropriately, but "checksum" will be empty and "version" will be | ||||
| // "(devel)". | ||||
| // NewBuildInfoCollector is the obsolete version of collectors.NewBuildInfoCollector. | ||||
| // See there for documentation. | ||||
| // | ||||
| // This collector uses only the build information for the main module. See | ||||
| // https://github.com/povilasv/prommod for an example of a collector for the | ||||
| // module dependencies. | ||||
| // Deprecated: Use collectors.NewBuildInfoCollector instead. | ||||
| func NewBuildInfoCollector() Collector { | ||||
| 	path, version, sum := readBuildInfo() | ||||
| 	path, version, sum := "unknown", "unknown", "unknown" | ||||
| 	if bi, ok := debug.ReadBuildInfo(); ok { | ||||
| 		path = bi.Main.Path | ||||
| 		version = bi.Main.Version | ||||
| 		sum = bi.Main.Sum | ||||
| 	} | ||||
| 	c := &selfCollector{MustNewConstMetric( | ||||
| 		NewDesc( | ||||
| 			"go_build_info", | ||||
|  | ||||
							
								
								
									
										9
									
								
								vendor/github.com/prometheus/client_golang/prometheus/histogram.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/prometheus/client_golang/prometheus/histogram.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -22,7 +22,7 @@ import ( | ||||
| 	"sync/atomic" | ||||
| 	"time" | ||||
|  | ||||
| 	//lint:ignore SA1019 Need to keep deprecated package for compatibility. | ||||
| 	//nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. | ||||
| 	"github.com/golang/protobuf/proto" | ||||
|  | ||||
| 	dto "github.com/prometheus/client_model/go" | ||||
| @ -47,7 +47,12 @@ type Histogram interface { | ||||
| 	Metric | ||||
| 	Collector | ||||
|  | ||||
| 	// Observe adds a single observation to the histogram. | ||||
| 	// Observe adds a single observation to the histogram. Observations are | ||||
| 	// usually positive or zero. Negative observations are accepted but | ||||
| 	// prevent current versions of Prometheus from properly detecting | ||||
| 	// counter resets in the sum of observations. See | ||||
| 	// https://prometheus.io/docs/practices/histograms/#count-and-sum-of-observations | ||||
| 	// for details. | ||||
| 	Observe(float64) | ||||
| } | ||||
|  | ||||
|  | ||||
							
								
								
									
										4
									
								
								vendor/github.com/prometheus/client_golang/prometheus/metric.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/prometheus/client_golang/prometheus/metric.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -17,7 +17,7 @@ import ( | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	//lint:ignore SA1019 Need to keep deprecated package for compatibility. | ||||
| 	//nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"github.com/prometheus/common/model" | ||||
|  | ||||
| @ -58,7 +58,7 @@ type Metric interface { | ||||
| } | ||||
|  | ||||
| // Opts bundles the options for creating most Metric types. Each metric | ||||
| // implementation XXX has its own XXXOpts type, but in most cases, it is just be | ||||
| // implementation XXX has its own XXXOpts type, but in most cases, it is just | ||||
| // an alias of this type (which might change when the requirement arises.) | ||||
| // | ||||
| // It is mandatory to set Name to a non-empty string. All other fields are | ||||
|  | ||||
							
								
								
									
										12
									
								
								vendor/github.com/prometheus/client_golang/prometheus/process_collector.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/github.com/prometheus/client_golang/prometheus/process_collector.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -54,16 +54,10 @@ type ProcessCollectorOpts struct { | ||||
| 	ReportErrors bool | ||||
| } | ||||
|  | ||||
| // NewProcessCollector returns a collector which exports the current state of | ||||
| // process metrics including CPU, memory and file descriptor usage as well as | ||||
| // the process start time. The detailed behavior is defined by the provided | ||||
| // ProcessCollectorOpts. The zero value of ProcessCollectorOpts creates a | ||||
| // collector for the current process with an empty namespace string and no error | ||||
| // reporting. | ||||
| // NewProcessCollector is the obsolete version of collectors.NewProcessCollector. | ||||
| // See there for documentation. | ||||
| // | ||||
| // The collector only works on operating systems with a Linux-style proc | ||||
| // filesystem and on Microsoft Windows. On other operating systems, it will not | ||||
| // collect any metrics. | ||||
| // Deprecated: Use collectors.NewProcessCollector instead. | ||||
| func NewProcessCollector(opts ProcessCollectorOpts) Collector { | ||||
| 	ns := "" | ||||
| 	if len(opts.Namespace) > 0 { | ||||
|  | ||||
							
								
								
									
										6
									
								
								vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -83,8 +83,7 @@ type readerFromDelegator struct{ *responseWriterDelegator } | ||||
| type pusherDelegator struct{ *responseWriterDelegator } | ||||
|  | ||||
| func (d closeNotifierDelegator) CloseNotify() <-chan bool { | ||||
| 	//lint:ignore SA1019 http.CloseNotifier is deprecated but we don't want to | ||||
| 	//remove support from client_golang yet. | ||||
| 	//nolint:staticcheck // Ignore SA1019. http.CloseNotifier is deprecated but we keep it here to not break existing users. | ||||
| 	return d.ResponseWriter.(http.CloseNotifier).CloseNotify() | ||||
| } | ||||
| func (d flusherDelegator) Flush() { | ||||
| @ -348,8 +347,7 @@ func newDelegator(w http.ResponseWriter, observeWriteHeaderFunc func(int)) deleg | ||||
| 	} | ||||
|  | ||||
| 	id := 0 | ||||
| 	//lint:ignore SA1019 http.CloseNotifier is deprecated but we don't want to | ||||
| 	//remove support from client_golang yet. | ||||
| 	//nolint:staticcheck // Ignore SA1019. http.CloseNotifier is deprecated but we keep it here to not break existing users. | ||||
| 	if _, ok := w.(http.CloseNotifier); ok { | ||||
| 		id += closeNotifier | ||||
| 	} | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/github.com/prometheus/client_golang/prometheus/registry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/prometheus/client_golang/prometheus/registry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -26,7 +26,7 @@ import ( | ||||
| 	"unicode/utf8" | ||||
|  | ||||
| 	"github.com/cespare/xxhash/v2" | ||||
| 	//lint:ignore SA1019 Need to keep deprecated package for compatibility. | ||||
| 	//nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"github.com/prometheus/common/expfmt" | ||||
|  | ||||
|  | ||||
							
								
								
									
										13
									
								
								vendor/github.com/prometheus/client_golang/prometheus/summary.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/github.com/prometheus/client_golang/prometheus/summary.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -23,7 +23,7 @@ import ( | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/beorn7/perks/quantile" | ||||
| 	//lint:ignore SA1019 Need to keep deprecated package for compatibility. | ||||
| 	//nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. | ||||
| 	"github.com/golang/protobuf/proto" | ||||
|  | ||||
| 	dto "github.com/prometheus/client_model/go" | ||||
| @ -55,7 +55,12 @@ type Summary interface { | ||||
| 	Metric | ||||
| 	Collector | ||||
|  | ||||
| 	// Observe adds a single observation to the summary. | ||||
| 	// Observe adds a single observation to the summary. Observations are | ||||
| 	// usually positive or zero. Negative observations are accepted but | ||||
| 	// prevent current versions of Prometheus from properly detecting | ||||
| 	// counter resets in the sum of observations. See | ||||
| 	// https://prometheus.io/docs/practices/histograms/#count-and-sum-of-observations | ||||
| 	// for details. | ||||
| 	Observe(float64) | ||||
| } | ||||
|  | ||||
| @ -121,7 +126,9 @@ type SummaryOpts struct { | ||||
| 	Objectives map[float64]float64 | ||||
|  | ||||
| 	// MaxAge defines the duration for which an observation stays relevant | ||||
| 	// for the summary. Must be positive. The default value is DefMaxAge. | ||||
| 	// for the summary. Only applies to pre-calculated quantiles, does not | ||||
| 	// apply to _sum and _count. Must be positive. The default value is | ||||
| 	// DefMaxAge. | ||||
| 	MaxAge time.Duration | ||||
|  | ||||
| 	// AgeBuckets is the number of buckets used to exclude observations that | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/github.com/prometheus/client_golang/prometheus/value.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/prometheus/client_golang/prometheus/value.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -19,7 +19,7 @@ import ( | ||||
| 	"time" | ||||
| 	"unicode/utf8" | ||||
|  | ||||
| 	//lint:ignore SA1019 Need to keep deprecated package for compatibility. | ||||
| 	//nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"github.com/golang/protobuf/ptypes" | ||||
|  | ||||
|  | ||||
							
								
								
									
										4
									
								
								vendor/github.com/prometheus/client_golang/prometheus/vec.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/prometheus/client_golang/prometheus/vec.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -167,8 +167,8 @@ func (m *MetricVec) CurryWith(labels Labels) (*MetricVec, error) { | ||||
| // calling the newMetric function provided during construction of the | ||||
| // MetricVec). | ||||
| // | ||||
| // It is possible to call this method without using the returned Metry to only | ||||
| // create the new Metric but leave it in its intitial state. | ||||
| // It is possible to call this method without using the returned Metric to only | ||||
| // create the new Metric but leave it in its initial state. | ||||
| // | ||||
| // Keeping the Metric for later use is possible (and should be considered if | ||||
| // performance is critical), but keep in mind that Reset, DeleteLabelValues and | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/github.com/prometheus/client_golang/prometheus/wrap.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/prometheus/client_golang/prometheus/wrap.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -17,7 +17,7 @@ import ( | ||||
| 	"fmt" | ||||
| 	"sort" | ||||
|  | ||||
| 	//lint:ignore SA1019 Need to keep deprecated package for compatibility. | ||||
| 	//nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. | ||||
| 	"github.com/golang/protobuf/proto" | ||||
|  | ||||
| 	dto "github.com/prometheus/client_model/go" | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/github.com/prometheus/common/expfmt/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/prometheus/common/expfmt/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -18,7 +18,7 @@ import ( | ||||
| 	"io" | ||||
| 	"net/http" | ||||
|  | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"github.com/golang/protobuf/proto" //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. | ||||
| 	"github.com/matttproud/golang_protobuf_extensions/pbutil" | ||||
| 	"github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg" | ||||
|  | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/github.com/prometheus/common/expfmt/text_parse.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/prometheus/common/expfmt/text_parse.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -24,7 +24,7 @@ import ( | ||||
|  | ||||
| 	dto "github.com/prometheus/client_model/go" | ||||
|  | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"github.com/golang/protobuf/proto" //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. | ||||
| 	"github.com/prometheus/common/model" | ||||
| ) | ||||
|  | ||||
|  | ||||
							
								
								
									
										8
									
								
								vendor/github.com/prometheus/common/model/labels.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/prometheus/common/model/labels.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -45,6 +45,14 @@ const ( | ||||
| 	// scrape a target. | ||||
| 	MetricsPathLabel = "__metrics_path__" | ||||
|  | ||||
| 	// ScrapeIntervalLabel is the name of the label that holds the scrape interval | ||||
| 	// used to scrape a target. | ||||
| 	ScrapeIntervalLabel = "__scrape_interval__" | ||||
|  | ||||
| 	// ScrapeTimeoutLabel is the name of the label that holds the scrape | ||||
| 	// timeout used to scrape a target. | ||||
| 	ScrapeTimeoutLabel = "__scrape_timeout__" | ||||
|  | ||||
| 	// ReservedLabelPrefix is a prefix which is not legal in user-supplied | ||||
| 	// label names. | ||||
| 	ReservedLabelPrefix = "__" | ||||
|  | ||||
							
								
								
									
										45
									
								
								vendor/github.com/prometheus/common/model/time.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								vendor/github.com/prometheus/common/model/time.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -14,6 +14,8 @@ | ||||
| package model | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"math" | ||||
| 	"regexp" | ||||
| @ -201,13 +203,23 @@ func ParseDuration(durationStr string) (Duration, error) { | ||||
|  | ||||
| 	// Parse the match at pos `pos` in the regex and use `mult` to turn that | ||||
| 	// into ms, then add that value to the total parsed duration. | ||||
| 	var overflowErr error | ||||
| 	m := func(pos int, mult time.Duration) { | ||||
| 		if matches[pos] == "" { | ||||
| 			return | ||||
| 		} | ||||
| 		n, _ := strconv.Atoi(matches[pos]) | ||||
|  | ||||
| 		// Check if the provided duration overflows time.Duration (> ~ 290years). | ||||
| 		if n > int((1<<63-1)/mult/time.Millisecond) { | ||||
| 			overflowErr = errors.New("duration out of range") | ||||
| 		} | ||||
| 		d := time.Duration(n) * time.Millisecond | ||||
| 		dur += d * mult | ||||
|  | ||||
| 		if dur < 0 { | ||||
| 			overflowErr = errors.New("duration out of range") | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	m(2, 1000*60*60*24*365) // y | ||||
| @ -218,7 +230,7 @@ func ParseDuration(durationStr string) (Duration, error) { | ||||
| 	m(12, 1000)             // s | ||||
| 	m(14, 1)                // ms | ||||
|  | ||||
| 	return Duration(dur), nil | ||||
| 	return Duration(dur), overflowErr | ||||
| } | ||||
|  | ||||
| func (d Duration) String() string { | ||||
| @ -254,6 +266,37 @@ func (d Duration) String() string { | ||||
| 	return r | ||||
| } | ||||
|  | ||||
| // MarshalJSON implements the json.Marshaler interface. | ||||
| func (d Duration) MarshalJSON() ([]byte, error) { | ||||
| 	return json.Marshal(d.String()) | ||||
| } | ||||
|  | ||||
| // UnmarshalJSON implements the json.Unmarshaler interface. | ||||
| func (d *Duration) UnmarshalJSON(bytes []byte) error { | ||||
| 	var s string | ||||
| 	if err := json.Unmarshal(bytes, &s); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	dur, err := ParseDuration(s) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*d = dur | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // MarshalText implements the encoding.TextMarshaler interface. | ||||
| func (d *Duration) MarshalText() ([]byte, error) { | ||||
| 	return []byte(d.String()), nil | ||||
| } | ||||
|  | ||||
| // UnmarshalText implements the encoding.TextUnmarshaler interface. | ||||
| func (d *Duration) UnmarshalText(text []byte) error { | ||||
| 	var err error | ||||
| 	*d, err = ParseDuration(string(text)) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // MarshalYAML implements the yaml.Marshaler interface. | ||||
| func (d Duration) MarshalYAML() (interface{}, error) { | ||||
| 	return d.String(), nil | ||||
|  | ||||
							
								
								
									
										2
									
								
								vendor/github.com/prometheus/procfs/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/prometheus/procfs/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -18,6 +18,8 @@ include Makefile.common | ||||
| 	./ttar -C $(dir $*) -x -f $*.ttar | ||||
| 	touch $@ | ||||
|  | ||||
| fixtures: fixtures/.unpacked | ||||
|  | ||||
| update_fixtures: | ||||
| 	rm -vf fixtures/.unpacked | ||||
| 	./ttar -c -f fixtures.ttar fixtures/ | ||||
|  | ||||
							
								
								
									
										17
									
								
								vendor/github.com/prometheus/procfs/Makefile.common
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								vendor/github.com/prometheus/procfs/Makefile.common
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -78,12 +78,12 @@ ifneq ($(shell which gotestsum),) | ||||
| endif | ||||
| endif | ||||
|  | ||||
| PROMU_VERSION ?= 0.5.0 | ||||
| PROMU_VERSION ?= 0.12.0 | ||||
| PROMU_URL     := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz | ||||
|  | ||||
| GOLANGCI_LINT := | ||||
| GOLANGCI_LINT_OPTS ?= | ||||
| GOLANGCI_LINT_VERSION ?= v1.18.0 | ||||
| GOLANGCI_LINT_VERSION ?= v1.39.0 | ||||
| # golangci-lint only supports linux, darwin and windows platforms on i386/amd64. | ||||
| # windows isn't included here because of the path separator being different. | ||||
| ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin)) | ||||
| @ -118,7 +118,7 @@ endif | ||||
| %: common-% ; | ||||
|  | ||||
| .PHONY: common-all | ||||
| common-all: precheck style check_license lint unused build test | ||||
| common-all: precheck style check_license lint yamllint unused build test | ||||
|  | ||||
| .PHONY: common-style | ||||
| common-style: | ||||
| @ -198,6 +198,15 @@ else | ||||
| endif | ||||
| endif | ||||
|  | ||||
| .PHONY: common-yamllint | ||||
| common-yamllint: | ||||
| 	@echo ">> running yamllint on all YAML files in the repository" | ||||
| ifeq (, $(shell which yamllint)) | ||||
| 	@echo "yamllint not installed so skipping" | ||||
| else | ||||
| 	yamllint . | ||||
| endif | ||||
|  | ||||
| # For backward-compatibility. | ||||
| .PHONY: common-staticcheck | ||||
| common-staticcheck: lint | ||||
| @ -245,10 +254,12 @@ common-docker-publish: $(PUBLISH_DOCKER_ARCHS) | ||||
| $(PUBLISH_DOCKER_ARCHS): common-docker-publish-%: | ||||
| 	docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" | ||||
|  | ||||
| DOCKER_MAJOR_VERSION_TAG = $(firstword $(subst ., ,$(shell cat VERSION))) | ||||
| .PHONY: common-docker-tag-latest $(TAG_DOCKER_ARCHS) | ||||
| common-docker-tag-latest: $(TAG_DOCKER_ARCHS) | ||||
| $(TAG_DOCKER_ARCHS): common-docker-tag-latest-%: | ||||
| 	docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest" | ||||
| 	docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)" | ||||
|  | ||||
| .PHONY: common-docker-manifest | ||||
| common-docker-manifest: | ||||
|  | ||||
							
								
								
									
										4
									
								
								vendor/github.com/prometheus/procfs/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/prometheus/procfs/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -6,8 +6,8 @@ metrics from the pseudo-filesystems /proc and /sys. | ||||
| *WARNING*: This package is a work in progress. Its API may still break in | ||||
| backwards-incompatible ways without warnings. Use it at your own risk. | ||||
|  | ||||
| [](https://godoc.org/github.com/prometheus/procfs) | ||||
| [](https://travis-ci.org/prometheus/procfs) | ||||
| [](https://pkg.go.dev/github.com/prometheus/procfs) | ||||
| [](https://circleci.com/gh/prometheus/procfs/tree/master) | ||||
| [](https://goreportcard.com/report/github.com/prometheus/procfs) | ||||
|  | ||||
| ## Usage | ||||
|  | ||||
							
								
								
									
										6
									
								
								vendor/github.com/prometheus/procfs/SECURITY.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/prometheus/procfs/SECURITY.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| # Reporting a security issue | ||||
|  | ||||
| The Prometheus security policy, including how to report vulnerabilities, can be | ||||
| found here: | ||||
|  | ||||
| https://prometheus.io/docs/operating/security/ | ||||
							
								
								
									
										4
									
								
								vendor/github.com/prometheus/procfs/arp.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/prometheus/procfs/arp.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -36,7 +36,7 @@ type ARPEntry struct { | ||||
| func (fs FS) GatherARPEntries() ([]ARPEntry, error) { | ||||
| 	data, err := ioutil.ReadFile(fs.proc.Path("net/arp")) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("error reading arp %s: %s", fs.proc.Path("net/arp"), err) | ||||
| 		return nil, fmt.Errorf("error reading arp %q: %w", fs.proc.Path("net/arp"), err) | ||||
| 	} | ||||
|  | ||||
| 	return parseARPEntries(data) | ||||
| @ -59,7 +59,7 @@ func parseARPEntries(data []byte) ([]ARPEntry, error) { | ||||
| 		} else if width == expectedDataWidth { | ||||
| 			entry, err := parseARPEntry(columns) | ||||
| 			if err != nil { | ||||
| 				return []ARPEntry{}, fmt.Errorf("failed to parse ARP entry: %s", err) | ||||
| 				return []ARPEntry{}, fmt.Errorf("failed to parse ARP entry: %w", err) | ||||
| 			} | ||||
| 			entries = append(entries, entry) | ||||
| 		} else { | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user