From 6eeb346fad4c5f9ed4b72e2c113a3aebbc8b227d Mon Sep 17 00:00:00 2001 From: Aleksa Sarai Date: Sun, 16 Jul 2017 18:27:23 +1000 Subject: [PATCH 01/88] conversion: add platform conversions In b6d5a8cc1562 ("Change platform ref from runtime-spec"), the conversion to runtime-spec for the "os" and "architecture" fields was removed (as the fields had also been removed in runtime-spec). Re-add the conversion as an annotation field rather than a verbatim field. Signed-off-by: Aleksa Sarai --- conversion.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/conversion.md b/conversion.md index 285c2037e..5420dbe42 100644 --- a/conversion.md +++ b/conversion.md @@ -44,15 +44,19 @@ These fields all affect the `annotations` of the runtime configuration, and are | Image Field | Runtime Field | Notes | | ------------------- | --------------- | ----- | -| `author` | `annotations` | 1,2 | -| `created` | `annotations` | 1,3 | +| `os` | `annotations` | 1,2 | +| `architecture` | `annotations` | 1,3 | +| `author` | `annotations` | 1,4 | +| `created` | `annotations` | 1,5 | | `Config.Labels` | `annotations` | | -| `Config.StopSignal` | `annotations` | 1,4 | +| `Config.StopSignal` | `annotations` | 1,6 | 1. If a user has explicitly specified this annotation with `Config.Labels`, then the value specified in this field takes lower [precedence](#annotations) and the converter MUST instead use the value from `Config.Labels`. -2. The value of this field MUST be set as the value of `org.opencontainers.image.author` in `annotations`. -3. The value of this field MUST be set as the value of `org.opencontainers.image.created` in `annotations`. -4. The value of this field MUST be set as the value of `org.opencontainers.image.stopSignal` in `annotations`. +2. The value of this field MUST be set as the value of `org.opencontainers.image.os` in `annotations`. +3. The value of this field MUST be set as the value of `org.opencontainers.image.architecture` in `annotations`. +4. The value of this field MUST be set as the value of `org.opencontainers.image.author` in `annotations`. +5. The value of this field MUST be set as the value of `org.opencontainers.image.created` in `annotations`. +6. The value of this field MUST be set as the value of `org.opencontainers.image.stopSignal` in `annotations`. ## Parsed Fields From 046b392fda3083558b8ed423ca28855e781fd928 Mon Sep 17 00:00:00 2001 From: zhouhao Date: Wed, 6 Sep 2017 11:09:58 +0800 Subject: [PATCH 02/88] validate: add '\n' Signed-off-by: zhouhao --- schema/validator.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/schema/validator.go b/schema/validator.go index b859934aa..e9f6d4378 100644 --- a/schema/validator.go +++ b/schema/validator.go @@ -217,8 +217,8 @@ func checkPlatform(OS string, Architecture string) { return } } - fmt.Printf("warning: combination of %q and %q is invalid.", OS, Architecture) + fmt.Printf("warning: combination of %q and %q is invalid.\n", OS, Architecture) } } - fmt.Printf("warning: operating system %q of the bundle is not supported yet.", OS) + fmt.Printf("warning: operating system %q of the bundle is not supported yet.\n", OS) } From f767d2ad91c65783709403645946717e11e1feb6 Mon Sep 17 00:00:00 2001 From: Akihiro Suda Date: Thu, 16 Nov 2017 05:01:01 +0000 Subject: [PATCH 03/88] travis: use Go 1.9 Signed-off-by: Akihiro Suda --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 17f4840ce..28a54ecdc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: go go: - - 1.7 + - 1.9.x sudo: required From d98c0ae56131c2c8ef070014e974dbc0efdfff9f Mon Sep 17 00:00:00 2001 From: Akihiro Suda Date: Thu, 3 Aug 2017 06:14:05 +0000 Subject: [PATCH 04/88] clarification about nested index Signed-off-by: Akihiro Suda --- image-index.md | 4 ++++ image-layout.md | 6 +++++- img/media-types.dot | 1 + img/media-types.png | Bin 39845 -> 41679 bytes 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/image-index.md b/image-index.md index 2db34fc28..259bc6187 100644 --- a/image-index.md +++ b/image-index.md @@ -35,6 +35,10 @@ For the media type(s) that this document is compatible with, see the [matrix][ma - [`application/vnd.oci.image.manifest.v1+json`](manifest.md) + Also, implementations SHOULD support the following media types: + + - `application/vnd.oci.image.index.v1+json` (nested index) + Image indexes concerned with portability SHOULD use one of the above media types. Future versions of the spec MAY use a different mediatype (i.e. a new versioned format). An encountered `mediaType` that is unknown SHOULD be safely ignored. diff --git a/image-layout.md b/image-layout.md index 2915c8948..3df3b3efa 100644 --- a/image-layout.md +++ b/image-layout.md @@ -199,7 +199,11 @@ Those tags will often be represented in an image-layout repository with matching } ``` -This illustrates an index that provides two named manifest references and an auxiliary mediatype for this image layout. +This illustrates an index that provides two named references and an auxiliary mediatype for this image layout. +The first named reference (`stable-release`) points to another index that might contain multiple references with distinct platforms and annotations. +Note that the [`org.opencontainers.image.ref.name` annotation](annotations.md) SHOULD only be considered valid when on descriptors on `index.json`. + +The second named reference (`v1.0`) points to a manifest that is specific to the linux/ppc64le platform. [descriptors]: ./descriptor.md diff --git a/img/media-types.dot b/img/media-types.dot index 12ff55ff5..e3b1e3f3d 100644 --- a/img/media-types.dot +++ b/img/media-types.dot @@ -6,6 +6,7 @@ digraph G { layer [shape=note, label="Layer tar archive\napplication/vnd.oci.image.layer.v1.tar\napplication/vnd.oci.image.layer.v1.tar+gzip\napplication/vnd.oci.image.layer.nondistributable.v1.tar\napplication/vnd.oci.image.layer.nondistributable.v1.tar+gzip"] } + imageIndex -> imageIndex [label="1..*"] imageIndex -> manifest [label="1..*"] manifest -> config [label="1..1"] manifest -> layer [label="1..*"] diff --git a/img/media-types.png b/img/media-types.png index 996aae8e618dccb0605a0753964b703b91ed11b0..729c02d54ca2aa31fb5d61a62e1081e5c601539b 100644 GIT binary patch literal 41679 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 Cn-Y!y literal 39845 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 Date: Tue, 9 Jan 2018 16:54:34 +0100 Subject: [PATCH 05/88] Rebuild schema/fs.go. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This only commits the result of (make schema-fs) and is otherwise unrelated to the rest of the PR. Signed-off-by: Miloslav Trmač --- schema/fs.go | 74 +++++++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/schema/fs.go b/schema/fs.go index f83391b78..b18f76568 100644 --- a/schema/fs.go +++ b/schema/fs.go @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Code generated by "esc -private -pkg=schema -include=.*\.json$ ."; DO NOT EDIT. + package schema import ( @@ -170,7 +172,7 @@ func _escFSByte(useLocal bool, name string) ([]byte, error) { return nil, err } b, err := ioutil.ReadAll(f) - f.Close() + _ = f.Close() return b, err } f, err := _escStatic.prepare(name) @@ -205,27 +207,27 @@ var _escData = map[string]*_escFile{ "/config-schema.json": { local: "config-schema.json", size: 2771, - modtime: 1498025574, + modtime: 1515512099, compressed: ` -H4sIAAAJbogA/+RWQW/bPAy9+1cYbo9t/R2+U67dbgMyINh2KIZAsemEnSVqFD3MGPLfB8vJZtmym3XI -aScDFB/f4xMl60eSplkJrmC0gmSyVZqtLZhHMqLQAKePZCrcpxsLBVZYKJ9118FuXXEArTrIQcSu8vzZ -kbnvow/E+7xkVcn9f//nfeymx2F5hrhVnpMFU5zZnIf12TlqtYe88Pw9UloLHZZ2z1BIH7NMFlgQXLZK -u3bSNCsYlED5KzCAOmE0fTkfr4i1km6lVAL3ghoyv3bsUzLVyIF4oVSYzcUBBQppGC7FkLs08+RFJHvg -iI9HXPHxDw44iMwwDlh9ztvvlhyU74nFjfG3DJU3ECr30I3ATV5ChQa7UXG5VnbjK697jfH65tucLMWs -2uxuuIQCeixjoZE0Pc6QCreW0MiYmwysu56eAoKQblHigswXpIZyR5IXVZimrsNKwzqfoxY86vKf7f0j -1Y2GyThf2P9rp/7aXX0i/oJm/wZfdc7fqR3U17ZkE9n4a1qyEbIb3BtVX2xJMvyer18mkip6WV96/ZZY -VVssJwZf/6475S91H9CCafRkx7NatcAuizuejFgzhq8Nsv8PP0U8GKtLhhXPnh/QCXEbMz00K2LU3PbM -b1D07fCyW0vviMlWxN4UcYpZ/Enjdtf+RQ3SGiZ/vj8oANpKu/UTMV9kR1SDMjPzGZ6y5MQwnZvwWfX7 -2RSey6SbnWPyMwAA//9KY9sL0woAAA== +H4sIAAAAAAAC/+RWQY/TPBC951dE2T22m+/wnXot3JCKVAGHFarcZNLOEnvMeIKIUP87itNCkjpp6apc +OEUaz7z35nns+EcUx0kOLmO0gmSSRZysLJglGVFogOMlmQJ38dpChgVmymfNmrJHl+1Bq6ZkL2IXafri +yMzb6BPxLs1ZFTL/7/+0jT20dZifStwiTcmCyU5szpe12SlqtYM08/xtpdQWmlravkAmbcwyWWBBcMki +btqJ4yRjUAL5r0Cn1AmjaeF8vCDWSpqVXAnMBTUkfu3QpiSqkj3xBFQ/m7M9CmRSMVxbQ+7azKMXgeyO +Iz4ecMXHPzjgXmSEscPqc95+t+Qgf08sblj/yFB4A6FwT80IPKQ5FGiwGRWXamXXHnnVagzjm29jshSz +qpNZdwkF9FDGRCNxfBghFa4toZEhNxlYNT099wj6dJMSJ2RekNqXO5A8qcJUZdlH6uJ8Dlqw1Pk/2/tH +KisN7sb+b536e3f1ifgLmt0bvOmcv1NbKO9tyTqw8fe0ZC1k17gzqrzakqj7PV2/TCSFe831m2NRbDB3 +f/+uO+ZPdd+jBVPpsx1PSlUDuyTseDRgTRi+Vsj+P/wc8GCoLuoinjzfoxPiOmR636yAUWPbM75BwbfD +Zbem3hGB8T5/U1ze1FlA42ZbvwKDtIazP98fAIC2Um/8RIyDbIlKUGZkPvunLDoynM9N/1n1+9nUP5dR +MzuH6GcAAAD//0pj2wvTCgAA `, }, "/content-descriptor.json": { local: "content-descriptor.json", size: 1085, - modtime: 1498025574, + modtime: 1515512099, compressed: ` -H4sIAAAJbogA/5yTwW7UMBCG73mKUVqpl27NoeIQVb3AnQPcEAevPY6nbGwznlW1oL47mniXJoAo3Vsy +H4sIAAAAAAAC/5yTwW7UMBCG73mKUVqpl27NoeIQVb3AnQPcEAevPY6nbGwznlW1oL47mniXJoAo3Vsy +r+Zz8n4RwfQe6yOqQjl1A/QfyiY3uUklhIy6BMmgffHUGb4WNBRIGdn4lpbXFYXcbKKR5EyGPNQc9q0 6k3m0Xi2QTZvbk2rXTSO/AmpgzG5YHKnyXXGWtr4X9MbJ4eCSubtAzpptcK5IAth7QfQgwH0E3qyn1q4 lf48r0SEOadNIQfQAmNAxuTQw2LGjF8yBuU8hrp5FrvRE18Yj4ESae9qnqfP7FNr0Vf6/pKPRoASbA+C @@ -238,9 +240,9 @@ ERcrb5b9zhBc4s2zO7r2jN/2xKhin3+/McttXS9NB/Cle+p+BgAA///HjexwPQQAAA== "/defs-descriptor.json": { local: "defs-descriptor.json", size: 922, - modtime: 1498025574, + modtime: 1515512099, compressed: ` -H4sIAAAJbogA/6STX2/TMBTF3/spLl7FgDZN4QFp0Ria2DsP42lTV93ZN/Ed8R/ZrqYy9bsjJ1naFYFA +H4sIAAAAAAAC/6STX2/TMBTF3/spLl7FgDZN4QFp0Ria2DsP42lTV93ZN/Ed8R/ZrqYy9bsjJ1naFYFA PCSyj67Pub8b52kCIBRFGdgndlZUIK6oZst5F8FjSCw3LQZIDr56sl+cTciWAlwNx1yAa0+Sa5bYecx7 09FFVJBzAIQhxfht62mUAASrnKpT8rEqS+fJyueMuHChKaPUZLBkgw2Vakwt927zZ6/Ue4uYAttmr3tM iUKHd3d7Wdxg8WNZnK32y1cn09fF3XoxWz0t5+8/fNyVf1c2FV3Erk8SihuK6ZDuaLhJE8iw9ck1Ab1m @@ -254,9 +256,9 @@ ELULBvNXEJvAYtB3LzDQWpfw5fX8n7t46Dc2PQ1UZz9FdVw8RGdPyoPfojTor7ve+/cw50l+dpOfAQAA "/defs.json": { local: "defs.json", size: 1670, - modtime: 1498025574, + modtime: 1515512099, compressed: ` -H4sIAAAJbogA/7STza6bMBCF9zzFyO2S9oJtbGDb7hMpy6oLSiaJq2AjY6RWEe9e8RNChFuJKneRgGc8 +H4sIAAAAAAAC/7STza6bMBCF9zzFyO2S9oJtbGDb7hMpy6oLSiaJq2AjY6RWEe9e8RNChFuJKneRgGc8 3zmeMbcAgByxKa2qnTKa5EC+4klp1a8aaBs8grtY054vpnXgLgi7GvUXo12hNFo41FiqkyqLoTwceTOA 5NBLABClXTqvAIj7XWOvprTDM9qhckhUSquqrUgOn2KaPsLFrykcUzkEu3Amx2IrmlEpfPA+vsIzuhVP Yy55ygT3aczJlZDgW4UyShmTNGIiTbiUIooij6Jn15N0+x/T8enQJFlxN8/GBxZJwtbozXPxoTnNeCYk @@ -269,29 +271,29 @@ fIvD7in0ryMEy+fK1G6UfmdTE+tvpoL+1wV/AgAA//96IpqyhgYAAA== "/image-index-schema.json": { local: "image-index-schema.json", size: 2993, - modtime: 1498025574, + modtime: 1515512099, compressed: ` -H4sIAAAJbogA/6yWv27bMBDGdz/FQQmQJYmKIuhgBFnaJVOHBl2KDAx5ki61SPVIJ3ELv3tBMrIlUXZt -1Zt95H33+07892cGkCm0kqlxZHQ2h+xrg/qz0U6QRob7WpQI91rhG3xrUFJBUoSplz733MoKa+HzKuea -eZ4/W6OvYvTacJkrFoW7+nCTx9hZzCPVpth5npsGtWxL2pAWZ+fky+fky8dEt2rQp5qnZ5Quxho2DbIj -tNkcvCWALOZ/R7bRVgynbh8qslAQLhTYaA8tuAohVIZQGaIYvEQ1EBaEBtIOS+SAEJQneMr7mBup1mVS -oyZN9bLO5vBxGxNvbSyE1nEkq4WmAq2zXfutsmAWqw67w7o772g7bbEv7+01W+jxr/Y+wvhrSYy+1o9N -1MOjIvHg0y67YUu/BxFFJVqXbUKPHfGRhZHI9wfSBeLXQpjtPYApwuJgLJBRS1SQWAoi54yFz1ZY2Cu1 -6cm13x1nucKCNPkKNt+SdBTWqelDOP1EIA1PK4d2EusIIGn36WY33Hv/D8GTvGqcKVk0FUmQFcqfdllD -VGhxI+Olt+H/NsI5ZA0Xt2JRGiZX1XfzW78WFaq7i+l9H66boa8lL4arJnUlYEER3U+Hgk0NrxXJCpw/ -V6IXqMUKnhCUedULIxSq6dSBaidzsxCuMFyn3Mdt5o3OgHPnNoY9WzmMCZYVOZRuyTjIA8hMz1NvD8Pe -fZxqp+OT3ed7oTvtsI5Jl9lgwnrM5inxjD0N1PVLckueAm4jexrIAoX/Dqdu4VZ3D2b/suyWTa7Ng00C -rP9p+0UwCZ0erof0cLbrX//IEFobFx50I6fdcV3dHlx5V3XyWdcVmY15aX+te8+ecUeTXmdjNv7HgAcN -mOlZmY29BDtPuBnA42w9+xsAAP//IKe/nbELAAA= +H4sIAAAAAAAC/6yWz0/jOhDH7/0rRgGJC5CnJ/QOFeLy9sJpD4v2suJg7EkybGNnx1Ogu+r/vrJN2qRJ +C4Te2rHnO5/vxL/+zAAyg14zNULOZnPIvjZo/3dWFFlkuK1ViXBrDb7AtwY1FaRVnHoeck+9rrBWIa8S +aeZ5/uidvUjRS8dlblgVcvHPVZ5iJymPTJvi53nuGrS6LeljWpqdUyifUyifEmXVYEh1D4+oJcUadg2y +EPpsDsESQJbyvyP7ZCuFh27vKvJQEC4M+GQPPUiFECtDrAxJDJ6SGigPygJZwRI5IkTlCZ7yPuZGqnU5 +qFGTpXpZZ3P4dxtTL20shtZpJKuVpQK9+K79Vlkxq1WHXbDuzvuwnbbYl9f2ui30+Fd7HWH8tSTGUOvH +Jhrg0ZC6C2nn3bCn3zsRQyV6yTah+474yMIYyPcHhgskrIU4O3gAV8TFwVggo9VoYGApipwyFiHbYOEv +zKYnl2F3nOQGC7IUKvh8S9JRWA9Nv4czTASy8LAS9JNYRwDJyn9X++Fe+/8ePM2rRlzJqqlIg65Q//TL +GpJCi5sYz4ON8LdRIsgWzq7VonRMUtU38+uwFg2am7Ppfd9dN7u+lrzwb7pSsKCEHqZDwa6G54p0BRLO +leQFarWCBwTjnu3CKYNmOnWk2svcLJQUjush98c280Znh3PvNj60leOYYl2RoJYl404eQOZ6nnp7+PA+ +HmoPxye7zw9Cd9rhhcmW2c6E9ZjNY+I5fxyoy6fBLXkMuI3scSALVOE7HLuFW90DmP3Lslt2cG2+2yTA ++k3bT4pJWRm3/EYPZ/v+9Y8MZa2T+KDznz01tgdX3lWdfNZ1RWZjXtpf696zZ9zRpNfZmI3PGAigEXN4 +VmZjL8HOE24GcD9bz/4GAAD//yCnv52xCwAA `, }, "/image-layout-schema.json": { local: "image-layout-schema.json", size: 439, - modtime: 1498025574, + modtime: 1515512099, compressed: ` -H4sIAAAJbogA/2yPQUvEMBCF7/0VQ/Sg4DYVPOW6pwVhD4IX8VDTaTvLNonJVFik/12SaRXRU5g38+W9 +H4sIAAAAAAAC/2yPQUvEMBCF7/0VQ/Sg4DYVPOW6pwVhD4IX8VDTaTvLNonJVFik/12SaRXRU5g38+W9 91kBqA6TjRSYvFMG1DGg23vHLTmMcJjaAeGxvfiZ4cmOOLXqLlPXSQYDamQORutT8m4nau3joLvY9rxr HrRoV8JRtyHJaO0DOruZpYLJtaZsrM/FWEi+BMysfzuhXbUQfcDIhEkZyG2yQyYl8TPGJLVk97fth1yA 74FHhOP+8LvyDbmy8JZ2EgZ6OuNtsS8fbrESR3LDj45unpSBl3UGUPd1UzdqnV/Lu1QAS2kS8X2miN03 @@ -302,9 +304,9 @@ HrRoV8JRtyHJaO0DOruZpYLJtaZsrM/FWEi+BMysfzuhXbUQfcDIhEkZyG2yQyYl8TPGJLVk97fth1yA "/image-manifest-schema.json": { local: "image-manifest-schema.json", size: 921, - modtime: 1498025574, + modtime: 1515512099, compressed: ` -H4sIAAAJbogA/5ySMW8iMRCF+/0VI0MJ+O501bZXUZxSJEoTpXB2x7uDWNsZmygo4r9HtnHAkCKifTvv +H4sIAAAAAAAC/5ySMW8iMRCF+/0VI0MJ+O501bZXUZxSJEoTpXB2x7uDWNsZmygo4r9HtnHAkCKifTvv zTdv/dEAiB59x+QCWSNaEHcOzT9rgiKDDOtJDQj/lSGNPsC9w440dSpNL6J97rsRJxWtYwiulXLjrVlm dWV5kD0rHZa//sqszbKP+mLxrZTWoenKVp9seVpSJJDTkSB7w95hdNuXDXZHzbF1yIHQixbiYQAiRzwi +3xclq9vfhjJgybc9uDzheghjAhpOZTlkPPgLQeC8qAMkAk4ICeKFH7bZbKG/Uort16tmcjQtJtEC39O @@ -316,6 +318,6 @@ Dj+ZAwAA "/": { isDir: true, - local: "/", + local: "", }, } From dc668e084714b21c892c651ddf5c5397ec5122b8 Mon Sep 17 00:00:00 2001 From: Francesco Mari Date: Mon, 15 Jan 2018 11:32:45 +0100 Subject: [PATCH 06/88] descriptor: fix link Signed-off-by: Francesco Mari --- descriptor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/descriptor.md b/descriptor.md index 570985c52..2ba672d07 100644 --- a/descriptor.md +++ b/descriptor.md @@ -99,7 +99,7 @@ As an example, we can parameterize the encoding and algorithm as `multihash+base Before consuming content targeted by a descriptor from untrusted sources, the byte content SHOULD be verified against the digest string. Before calculating the digest, the size of the content SHOULD be verified to reduce hash collision space. Heavy processing before calculating a hash SHOULD be avoided. -Implementations MAY employ [canonicalization](canonicalization.md#canonicalization) of the underlying content to ensure stable content identifiers. +Implementations MAY employ [canonicalization](considerations.md#canonicalization) of the underlying content to ensure stable content identifiers. ### Digest calculations From 8ebe7720ff258ba0b070ad802a2ef5f8e5d876eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20Trma=C4=8D?= Date: Wed, 10 Jan 2018 19:10:42 +0100 Subject: [PATCH 07/88] Make JSON schema available for verification under https:// URIs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After updating gojsonschema to include https://github.com/xeipuuv/gojsonschema/pull/171 , tests fail with > unable to validate: Could not read schema from HTTP, response status is 404 Not Found Before that gojsonschema change, "$ref" links were interpreted by taking the current schema source file's URI as a base, and treating "$ref" as relative to this. For example, starting with the [file://]/image-manifest-schema.json URI, as used by Validator.Validate (based on the "specs" map), the > "$ref": "content-descriptor.json" reference used to evaluate to file:///content-descriptor.json. gojsonschema.jsonReferenceLoader would then load these file:///*.json URIs via _escFS. After the gojsonschema change, "$ref" links are evaluated relative to a URI base specified by the "id" attribute inside the schema source, regardless of the "external" URI passed to the gojsonschema.JSONLoader. This is consistent with http://json-schema.org/latest/json-schema-core.html#rfc.section.8 and http://json-schema.org/latest/json-schema-core.html#rfc.section.9.2 (apart from the "id" vs. "$id" attribute name). In the same example, [file://]/image-manifest-schema.json URI contains > "id": "https://opencontainers.org/schema/image/manifest", so the same > "$ref": "content-descriptor.json" now evaluates to "https://opencontainers.org/schema/image/content-descriptor.json", which is not found by gojsonschema.jsonReferenceLoader (it uses _escFS only for file:/// URIs), resulting in the 404 quoted above. This is a minimal fix, making the schema files available to gojsonschema at the https:// URIs, while continuing to read them from _escFS. Because gojsonschema.jsonReferenceLoader can only use the provided fs for file:/// URIs, we are forced to implement our own gojsonschema.JSONLoaderFactory and gojsonschema.JSONLoader; something like this might be more generally useful and should therefore instead be provided by the gojsonschema library. This particular JSONLoader{Factory,} implementation, though, is image-spec specific because it locally works around various inconsistencies in the image-spec JSON schemas, and thus is not suitable for gojsonschema as is. Namely, the specs/*.json schema files use URIs with two URI path prefixes, https://opencontainers.org/schema/{,image/} in the top-level "id" attributes, and the nested "id" attributes along with "$ref" references use _several more_ URI path prefixes, e.g. > "id": "https://opencontainers.org/schema/image/manifest/annotations", > "$ref": "defs-descriptor.json#/definitions/annotations" in image-manifest-schema.json specifies the https://opencontainers.org/schema/image/manifest/defs-descriptor.json URI. In fact, defs-descriptor.json references use all of the following URIs: > https://opencontainers.org/schema/defs-descriptor.json > https://opencontainers.org/schema/image/defs-descriptor.json > https://opencontainers.org/schema/image/descriptor/defs-descriptor.json > https://opencontainers.org/schema/image/index/defs-descriptor.json > https://opencontainers.org/schema/image/manifest/defs-descriptor.json So, this commit introduces a loader which preserves the original _escFS layout by recognizing and stripping all of these prefixes, and using the same /*.json paths for _escFS lookups as before; this is clearly unsuitable for gojsonschema inclusion. Finally, the reason this commit uses such a fairly hacky loader is that merely changing the _escFS structure is still not sufficient to get consistent schema: the schema/*.json paths in this repository, and the "$ref" values, do not match the "id" values inside the schemas at all. E.g. image-manifest-schema.json refers to https://opencontainers.org/schema/image/manifest/content-descriptor.json , while content-descriptor.json identifies itself as https://opencontainers.org/schema/descriptor , matching neither the path prefix nor the file name. Overall, it is completely unclear to me which of the URIs is the canonical URI of the "content descriptor" schema, and the owner of the URI namespace needs to decide on the canonical schema URIs. Only afterwards can the code be cleanly modified to match the specification; until then, this commit at least keeps the tests passing, and the validator usable by external callers who want to use the public image-spec/schema.ValidateMediaType*.Validate() API. Signed-off-by: Miloslav Trmač --- schema/loader.go | 126 ++++++++++++++++++++++++++++++++++++++++++++ schema/schema.go | 35 +++++++++--- schema/validator.go | 2 +- 3 files changed, 156 insertions(+), 7 deletions(-) create mode 100644 schema/loader.go diff --git a/schema/loader.go b/schema/loader.go new file mode 100644 index 000000000..c6bde0048 --- /dev/null +++ b/schema/loader.go @@ -0,0 +1,126 @@ +// Copyright 2018 The Linux Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package schema + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "net/http" + "strings" + + "github.com/xeipuuv/gojsonreference" + "github.com/xeipuuv/gojsonschema" +) + +// fsLoaderFactory implements gojsonschema.JSONLoaderFactory by reading files under the specified namespaces from the root of fs. +type fsLoaderFactory struct { + namespaces []string + fs http.FileSystem +} + +// newFSLoaderFactory returns a fsLoaderFactory reading files under the specified namespaces from the root of fs. +func newFSLoaderFactory(namespaces []string, fs http.FileSystem) *fsLoaderFactory { + return &fsLoaderFactory{ + namespaces: namespaces, + fs: fs, + } +} + +func (factory *fsLoaderFactory) New(source string) gojsonschema.JSONLoader { + return &fsLoader{ + factory: factory, + source: source, + } +} + +// refContents returns the contents of ref, if available in fsLoaderFactory. +func (factory *fsLoaderFactory) refContents(ref gojsonreference.JsonReference) ([]byte, error) { + refStr := ref.String() + path := "" + for _, ns := range factory.namespaces { + if strings.HasPrefix(refStr, ns) { + path = "/" + strings.TrimPrefix(refStr, ns) + break + } + } + if path == "" { + return nil, fmt.Errorf("Schema reference %#v unexpectedly not available in fsLoaderFactory with namespaces %#v", path, factory.namespaces) + } + + f, err := factory.fs.Open(path) + if err != nil { + return nil, err + } + defer f.Close() + + return ioutil.ReadAll(f) +} + +// fsLoader implements gojsonschema.JSONLoader by reading the document named by source from a fsLoaderFactory. +type fsLoader struct { + factory *fsLoaderFactory + source string +} + +// JsonSource implements gojsonschema.JSONLoader.JsonSource. The "Json" capitalization needs to be maintained to conform to the interface. +func (l *fsLoader) JsonSource() interface{} { // nolint: golint + return l.source +} + +func (l *fsLoader) LoadJSON() (interface{}, error) { + // Based on gojsonschema.jsonReferenceLoader.LoadJSON. + reference, err := gojsonreference.NewJsonReference(l.source) + if err != nil { + return nil, err + } + + refToURL := reference + refToURL.GetUrl().Fragment = "" + + body, err := l.factory.refContents(refToURL) + if err != nil { + return nil, err + } + + return decodeJSONUsingNumber(bytes.NewReader(body)) +} + +// decodeJSONUsingNumber returns JSON parsed from an io.Reader +func decodeJSONUsingNumber(r io.Reader) (interface{}, error) { + // Copied from gojsonschema. + var document interface{} + + decoder := json.NewDecoder(r) + decoder.UseNumber() + + err := decoder.Decode(&document) + if err != nil { + return nil, err + } + + return document, nil +} + +// JsonReference implements gojsonschema.JSONLoader.JsonReference. The "Json" capitalization needs to be maintained to conform to the interface. +func (l *fsLoader) JsonReference() (gojsonreference.JsonReference, error) { // nolint: golint + return gojsonreference.NewJsonReference(l.JsonSource().(string)) +} + +func (l *fsLoader) LoaderFactory() gojsonschema.JSONLoaderFactory { + return l.factory +} diff --git a/schema/schema.go b/schema/schema.go index 6a317f139..2a560552a 100644 --- a/schema/schema.go +++ b/schema/schema.go @@ -35,13 +35,36 @@ var ( // having the OCI JSON schema files in root "/". fs = _escFS(false) - // specs maps OCI schema media types to schema files. + // schemaNamespaces is a set of URI prefixes which are treated as containing the schema files of fs. + // This is necessary because *.json schema files in this directory use "id" and "$ref" attributes which evaluate to such URIs, e.g. + // ./image-manifest-schema.json URI contains + // "id": "https://opencontainers.org/schema/image/manifest", + // and + // "$ref": "content-descriptor.json" + // which evaluates as a link to https://opencontainers.org/schema/image/content-descriptor.json . + // + // To support such links without accessing the network (and trying to load content which is not hosted at these URIs), + // fsLoaderFactory accepts any URI starting with one of the schemaNamespaces below, + // and uses _escFS to load them from the root of its in-memory filesystem tree. + // + // (Note that this must contain subdirectories before its parent directories for fsLoaderFactory.refContents to work.) + schemaNamespaces = []string{ + "https://opencontainers.org/schema/image/descriptor/", + "https://opencontainers.org/schema/image/index/", + "https://opencontainers.org/schema/image/manifest/", + "https://opencontainers.org/schema/image/", + "https://opencontainers.org/schema/", + } + + // specs maps OCI schema media types to schema URIs. + // These URIs are expected to be used only by fsLoaderFactory (which trims schemaNamespaces defined above) + // and should never cause a network access. specs = map[Validator]string{ - ValidatorMediaTypeDescriptor: "content-descriptor.json", - ValidatorMediaTypeLayoutHeader: "image-layout-schema.json", - ValidatorMediaTypeManifest: "image-manifest-schema.json", - ValidatorMediaTypeImageIndex: "image-index-schema.json", - ValidatorMediaTypeImageConfig: "config-schema.json", + ValidatorMediaTypeDescriptor: "https://opencontainers.org/schema/content-descriptor.json", + ValidatorMediaTypeLayoutHeader: "https://opencontainers.org/schema/image/image-layout-schema.json", + ValidatorMediaTypeManifest: "https://opencontainers.org/schema/image/image-manifest-schema.json", + ValidatorMediaTypeImageIndex: "https://opencontainers.org/schema/image/image-index-schema.json", + ValidatorMediaTypeImageConfig: "https://opencontainers.org/schema/image/config-schema.json", } ) diff --git a/schema/validator.go b/schema/validator.go index e9f6d4378..029217c3b 100644 --- a/schema/validator.go +++ b/schema/validator.go @@ -67,7 +67,7 @@ func (v Validator) Validate(src io.Reader) error { } } - sl := gojsonschema.NewReferenceLoaderFileSystem("file:///"+specs[v], fs) + sl := newFSLoaderFactory(schemaNamespaces, fs).New(specs[v]) ml := gojsonschema.NewStringLoader(string(buf)) result, err := gojsonschema.Validate(sl, ml) From 70d69c52755bc5d23780f829da2101eeae6c20c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20Trma=C4=8D?= Date: Mon, 17 Sep 2018 15:54:34 +0200 Subject: [PATCH 08/88] Fix duplicate "id" values in JSON schema MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "id" values in JSON schema files must be unique, per RFC draft 8.3.1: > A schema MAY (and likely will) have multiple URIs, but there is no > way for a URI to identify more than one schema. and recent gojsonschema fails when handling such inputs (fairly nontransparently, it silently fails to resolve $ref references to absolute URIs and reports something like > Reference defs.json#/definitions/mapStringString must be canonical .) In particular, the https://opencontainers.org/schema/image/descriptor/annotations id value had three definitions. To resolve this: - Leave the definition in image-index-schema.json; although using the /descriptor subnamespace for the "manifests" array is a bit surprising, the /image/ part clearly belongs to image-index-schema.json - Rename the id definition in content-descriptor.json, to use the generic "blob descriptor" namespace. - Remove the definition in defs-descriptor.json; that seems to be an "utility" schema file describing common structures, but it's better for users to reference schema fragments by purpose than by common structure (so that we can let the structure diverge in the future if necessary). Finally, changing the content-descriptor.json "id" value changes the resolved absolute value of the reference to defs-descriptor.json, so add another namespace to be handled by fsLoaderFactory. Signed-off-by: Miloslav Trmač --- schema/content-descriptor.json | 2 +- schema/defs-descriptor.json | 1 - schema/schema.go | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/schema/content-descriptor.json b/schema/content-descriptor.json index 69fcea92e..9157e04a7 100644 --- a/schema/content-descriptor.json +++ b/schema/content-descriptor.json @@ -21,7 +21,7 @@ "$ref": "defs-descriptor.json#/definitions/urls" }, "annotations": { - "id": "https://opencontainers.org/schema/image/descriptor/annotations", + "id": "https://opencontainers.org/schema/descriptor/annotations", "$ref": "defs-descriptor.json#/definitions/annotations" } }, diff --git a/schema/defs-descriptor.json b/schema/defs-descriptor.json index feaea001b..dad2b0a3f 100644 --- a/schema/defs-descriptor.json +++ b/schema/defs-descriptor.json @@ -20,7 +20,6 @@ } }, "annotations": { - "id": "https://opencontainers.org/schema/image/descriptor/annotations", "$ref": "defs.json#/definitions/mapStringString" } } diff --git a/schema/schema.go b/schema/schema.go index 2a560552a..239eefa24 100644 --- a/schema/schema.go +++ b/schema/schema.go @@ -53,6 +53,7 @@ var ( "https://opencontainers.org/schema/image/index/", "https://opencontainers.org/schema/image/manifest/", "https://opencontainers.org/schema/image/", + "https://opencontainers.org/schema/descriptor/", "https://opencontainers.org/schema/", } From a10533e5f8bb998be12ffb792276721ea4bfd44e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20Trma=C4=8D?= Date: Mon, 17 Sep 2018 16:01:18 +0200 Subject: [PATCH 09/88] Run (make schema/fs.go) to make the previous commit effective MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Miloslav Trmač --- schema/fs.go | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/schema/fs.go b/schema/fs.go index b18f76568..5baeeaec5 100644 --- a/schema/fs.go +++ b/schema/fs.go @@ -224,32 +224,32 @@ MzuH6GcAAAD//0pj2wvTCgAA "/content-descriptor.json": { local: "content-descriptor.json", - size: 1085, - modtime: 1515512099, + size: 1079, + modtime: 1537191585, compressed: ` -H4sIAAAAAAAC/5yTwW7UMBCG73mKUVqpl27NoeIQVb3AnQPcEAevPY6nbGwznlW1oL47mniXJoAo3Vsy -+r+Zz8n4RwfQe6yOqQjl1A/QfyiY3uUklhIy6BMmgffHUGb4WNBRIGdn4lpbXFYXcbKKR5EyGPNQc9q0 -6k3m0Xi2QTZvbk2rXTSO/AmpgzG5YHKnyXXGWtr4X9MbJ4eCSubtAzpptcK5IAth7QfQgwH0E3qyn1q4 -lf48r0SEOadNIQfQAmNAxuTQw2LGjF8yBuU8hrp5FrvRE18Yj4ESae9qnqfP7FNr0Vf6/pKPRoASbA+C -9ZVOfxGhJG9v1xKeRqzygobjQ5E8si2RHLiI7mvdT9DYk1ZzuVZdfS1WBDnB1Z3djZlJ4nQ/3OmP9ejv -r875jkfXlf+ed/Uf9hZ21BQ1CIHzBI+RXASJVI/OMNkDbBF8fky7bD36c+xmk5WbTSnLfDtWiv+77DTZ -ERcrb5b9zhBc4s2zO7r2jN/2xKhin3+/McttXS9NB/Cle+p+BgAA///HjexwPQQAAA== +H4sIAAAAAAAC/5yTsW7cMAyGdz8F4QTIkos6BB2MIEu7d2i3ooNOok5Mz5JK8RBci7x7QcvX2G2RILfZ +xP+Rn2zqVwfQe6yOqQjl1A/QfyqYPuQklhIy6BMmgY9zKDN8LugokLMTca0tLquLOFrFo0gZjHmoOW1a +9Sbzzni2QTbvbk2rXTSO/AmpgzG5YHKnyXXCWtr4P9MbJ8eCSubtAzpptcK5IAth7QfQgwH0I3qyX1q4 +lf49r0SEKadNIQfQAmNAxuTQw2LGhF8yBuU8hrp5FrvRE18Yj4ESae9qnqdP7FNr0Vf6+ZqPRoASbI+C +9Y1O/xGhJO9v1xKedljlFQ3HxyJ5x7ZEcuAiuu/1MEJjT1rN5Vp19bVYEeQEV3d2v8tMEsf74U5/rEd/ +f3XOd5xdV/4H3tcX7C3sqSlqEALnER4juQgSqc7OMNojbBF8fkz7bD36c+wmk5WbTSnLdDtWim9fdrPs +dIbaEm+G3WzZM/44EKMqff37riz3dL0uHcC37qn7HQAA//9DKIMKNwQAAA== `, }, "/defs-descriptor.json": { local: "defs-descriptor.json", - size: 922, - modtime: 1515512099, + size: 844, + modtime: 1537191664, compressed: ` -H4sIAAAAAAAC/6STX2/TMBTF3/spLl7FgDZN4QFp0Ria2DsP42lTV93ZN/Ed8R/ZrqYy9bsjJ1naFYFA -PCSyj67Pub8b52kCIBRFGdgndlZUIK6oZst5F8FjSCw3LQZIDr56sl+cTciWAlwNx1yAa0+Sa5bYecx7 -09FFVJBzAIQhxfht62mUAASrnKpT8rEqS+fJyueMuHChKaPUZLBkgw2Vakwt927zZ6/Ue4uYAttmr3tM -iUKHd3d7Wdxg8WNZnK32y1cn09fF3XoxWz0t5+8/fNyVf1c2FV3Erk8SihuK6ZDuaLhJE8iw9ck1Ab1m -CVKT/B43Bvqz4GrIRe7+gWSaA9tuOwDA6Tm2jQuctLmozvOoFKmL03+cwMA1e/O5up0t1sVqVN6+q/L6 -srhZFmef1sVqdkS4CW38Ax9Cyz1ELoQ6OAOPmqWGpDkOVGBwC/cEyj3a1qEi9Wv/GAJu9zInMoe5vycF -ELULBvNXEJvAYtB3LzDQWpfw5fX8n7t46Dc2PQ1UZz9FdVw8RGdPyoPfojTor7ve+/cw50l+dpOfAQAA -//8aH/C2mgMAAA== +H4sIAAAAAAAC/5SST2/TTBDG7/kU826jt0DiOHBAqlWKKnrnUE6t0mi6O7aneP9od6IqVPnuaG03SYtA +cLC1+2jmefwbz9MEQBlKOnIQ9k5VoK6oZsf5liBgFNabDiOIh6+B3BfvBNlRhKuxzUe4DqS5Zo29x3ww +3buoCnIOgLJkGL9tA+0lAMUmp7YiIVVl6QM5/ZyRFj42ZdItWSzZYkOl2aeWB7f5s5cM3ipJZNcc9IAi +FHu8u9vL4gaLH8vibHU4/ncy/b+4Wy9mq6fl/P2Hj7vy78qmqo/YDUnKcENJjuleDVdaAh23QXwTMbSs +Qbekv6eNhaEXfA25yN8/kJY5sOuvIwCcnmPX+MjS2ovqPI/KkLk4/ccJjFyzN5+r29liXaz2ytt3VT5f +FjfL4uzTuljNXhFuYpf+wIfQ8QCRC6GO3sJjy7oFaTmNVGBxC/cExj+6zqMh8+v3Y4y4PcgsZI9zf08K +oGofLea/oDaR1ajvXmCgc17w5XoCqGmkOvcZqtPiIXl3Uh4tcmkxXPdpw3uczCQ/u8nPAAAA///5nDLG +TAMAAA== `, }, From f8c2f394ebfbef45408281e292ae6d6745e86c45 Mon Sep 17 00:00:00 2001 From: Harald Nordgren Date: Sun, 28 Oct 2018 22:58:50 +0100 Subject: [PATCH 10/88] Bump Go versions Signed-off-by: Harald Nordgren --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 28a54ecdc..df8439fe6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ language: go go: - 1.9.x + - 1.10.x + - 1.11.x sudo: required From 9335aad78ef0a431814a0f000ea4be8d93cc8c4e Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Tue, 18 Dec 2018 15:49:00 -0500 Subject: [PATCH 11/88] Makefile: variable cleanup and creation Signed-off-by: Vincent Batts --- Makefile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index a8d5fd39b..64a8c84d0 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,10 @@ export GO15VENDOREXPERIMENT DOCKER ?= $(shell command -v docker 2>/dev/null) PANDOC ?= $(shell command -v pandoc 2>/dev/null) +OUTPUT_DIRNAME ?= output/ +DOC_FILENAME ?= oci-image-spec + +PANDOC_CONTAINER ?= docker.io/vbatts/pandoc:1.17.0.3-2.fc25.x86_64 ifeq "$(strip $(PANDOC))" '' ifneq "$(strip $(DOCKER))" '' PANDOC = $(DOCKER) run \ @@ -13,7 +17,7 @@ ifeq "$(strip $(PANDOC))" '' -v $(shell pwd)/$(OUTPUT_DIRNAME)/:/$(OUTPUT_DIRNAME)/ \ -u $(shell id -u) \ --workdir /input \ - docker.io/vbatts/pandoc:1.17.0.3-2.fc25.x86_64 + $(PANDOC_CONTAINER) PANDOC_SRC := /input/ PANDOC_DST := / endif @@ -37,9 +41,6 @@ DOC_FILES := \ FIGURE_FILES := \ img/media-types.png -OUTPUT_DIRNAME ?= output/ -DOC_FILENAME ?= oci-image-spec - EPOCH_TEST_COMMIT ?= v0.2.0 TOOLS := esc gitvalidation glide glide-vc From fd02b7912271e991940de6a6c9437f7d0b9a441c Mon Sep 17 00:00:00 2001 From: Yusuke Nakamura Date: Mon, 24 Dec 2018 18:35:00 +0900 Subject: [PATCH 12/88] Fix table header grammar in annotations Move "prefix" to out of the code backtick. Signed-off-by: Yusuke Nakamura --- annotations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/annotations.md b/annotations.md index f3ba371be..0c7ad0aa1 100644 --- a/annotations.md +++ b/annotations.md @@ -47,7 +47,7 @@ This specification defines the following annotation keys, intended for but not l While users are encouraged to use the **org.opencontainers.image** keys, tools MAY choose to support compatible annotations using the **org.label-schema** prefix as follows. -| `org.opencontainers.image` prefix | `org.label-schema prefix` | Compatibility notes | +| `org.opencontainers.image` prefix | `org.label-schema` prefix | Compatibility notes | |---------------------------|-------------------------|---------------------| | `created` | `build-date` | Compatible | | `url` | `url` | Compatible | From 930960d83005fe06f31a3fd1b5fdea9b76f49134 Mon Sep 17 00:00:00 2001 From: Chris Aniszczyk Date: Sun, 20 Jan 2019 08:25:14 -0700 Subject: [PATCH 13/88] Update MAINTAINERS emails --- MAINTAINERS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 63de32938..db2247df9 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,9 +1,9 @@ -Brandon Philips (@philips) +Brandon Philips (@philips) Brendan Burns (@brendandburns) Jason Bouzane (@jbouzane) John Starks (@jstarks) -Jonathan Boulle (@jonboulle) -Stephen Day (@stevvooe) +Jonathan Boulle (@jonboulle) +Stephen Day (@stevvooe) Vincent Batts (@vbatts) Aleksa Sarai (@cyphar) Keyang Xie (@xiekeyang) From efeb6e4ca93f0aa452d06d77f37060d67ed60772 Mon Sep 17 00:00:00 2001 From: Jimmy Zelinskie Date: Tue, 5 Feb 2019 14:31:41 -0500 Subject: [PATCH 14/88] Unknown descriptor mediatypes MUST be ignored Signed-off-by: Jimmy Zelinskie --- image-index.md | 3 ++- manifest.md | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/image-index.md b/image-index.md index 259bc6187..5e6bdde95 100644 --- a/image-index.md +++ b/image-index.md @@ -4,6 +4,7 @@ The image index is a higher-level manifest which points to specific [image manif While the use of an image index is OPTIONAL for image providers, image consumers SHOULD be prepared to process them. This section defines the `application/vnd.oci.image.index.v1+json` [media type](media-types.md). + For the media type(s) that this document is compatible with, see the [matrix][matrix]. ## *Image Index* Property Descriptions @@ -41,7 +42,7 @@ For the media type(s) that this document is compatible with, see the [matrix][ma Image indexes concerned with portability SHOULD use one of the above media types. Future versions of the spec MAY use a different mediatype (i.e. a new versioned format). - An encountered `mediaType` that is unknown SHOULD be safely ignored. + An encountered `mediaType` that is unknown to the implementation MUST be ignored. - **`platform`** *object* diff --git a/manifest.md b/manifest.md index 8676045cb..29217dda8 100644 --- a/manifest.md +++ b/manifest.md @@ -61,6 +61,8 @@ Unlike the [image index](image-index.md), which contains information about a set - [`application/vnd.oci.image.layer.nondistributable.v1.tar+gzip`](layer.md#gzip-media-types) Manifests concerned with portability SHOULD use one of the above media types. + An encountered `mediaType` that is unknown to the implementation MUST be ignored. + Entries in this field will frequently use the `+gzip` types. From 36230c1322f056c165ff217746bb271882043081 Mon Sep 17 00:00:00 2001 From: Vanessa Sochat Date: Tue, 26 Feb 2019 12:12:38 -0500 Subject: [PATCH 15/88] updating link to code of conduct in org repository Signed-off-by: Vanessa Sochat --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 31e827865..0b7551121 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The Go types and validation should be compatible with the current Go release; ea Additional documentation about how this group operates: -- [Code of Conduct](https://github.com/opencontainers/tob/blob/d2f9d68c1332870e40693fe077d311e0742bc73d/code-of-conduct.md) +- [Code of Conduct](code-of-conduct) - [Roadmap](#roadmap) - [Releases](RELEASES.md) - [Project Documentation](project.md) @@ -162,6 +162,7 @@ Read more on [How to Write a Git Commit Message](http://chris.beams.io/posts/git 8. When possible, one keyword to scope the change in the subject (i.e. "README: ...", "runtime: ...") +[code-of-conduct]: https://github.com/opencontainers/org/blob/master/.github/CODE_OF_CONDUCT.md [UberConference]: https://www.uberconference.com/opencontainers [irc-logs]: http://ircbot.wl.linuxfoundation.org/eavesdrop/%23opencontainers/ [minutes]: http://ircbot.wl.linuxfoundation.org/meetings/opencontainers/ From 39d36cb27575e71bbdbb20fb3735813ed593d8d2 Mon Sep 17 00:00:00 2001 From: Vanessa Sochat Date: Wed, 27 Feb 2019 10:21:13 -0500 Subject: [PATCH 16/88] fixing code of conduct link Signed-off-by: Vanessa Sochat --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0b7551121..239461fab 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The Go types and validation should be compatible with the current Go release; ea Additional documentation about how this group operates: -- [Code of Conduct](code-of-conduct) +- [Code of Conduct][code-of-conduct] - [Roadmap](#roadmap) - [Releases](RELEASES.md) - [Project Documentation](project.md) @@ -162,7 +162,7 @@ Read more on [How to Write a Git Commit Message](http://chris.beams.io/posts/git 8. When possible, one keyword to scope the change in the subject (i.e. "README: ...", "runtime: ...") -[code-of-conduct]: https://github.com/opencontainers/org/blob/master/.github/CODE_OF_CONDUCT.md +[code-of-conduct]: https://github.com/opencontainers/org/blob/master/CODE_OF_CONDUCT.md [UberConference]: https://www.uberconference.com/opencontainers [irc-logs]: http://ircbot.wl.linuxfoundation.org/eavesdrop/%23opencontainers/ [minutes]: http://ircbot.wl.linuxfoundation.org/meetings/opencontainers/ From 57a8aec55308a68d50d4f78219380e6907fe1c63 Mon Sep 17 00:00:00 2001 From: xiekeyang Date: Wed, 6 Mar 2019 10:16:47 +0800 Subject: [PATCH 17/88] Edit mail address of @xiekeyang Signed-off-by: xiekeyang --- MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index db2247df9..5d556e084 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -6,4 +6,4 @@ Jonathan Boulle (@jonboulle) Stephen Day (@stevvooe) Vincent Batts (@vbatts) Aleksa Sarai (@cyphar) -Keyang Xie (@xiekeyang) +Keyang Xie (@xiekeyang) From 908f14ca546fa6c0c98588616f604ddb3dd6ac69 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Wed, 13 Mar 2019 18:17:30 -0400 Subject: [PATCH 18/88] MAINTAINERS: fix the fix Closes #766 Signed-off-by: Vincent Batts --- MAINTAINERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 5d556e084..c98c39ea5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,9 +1,9 @@ -Brandon Philips (@philips) +Brandon Philips (@philips) Brendan Burns (@brendandburns) Jason Bouzane (@jbouzane) John Starks (@jstarks) Jonathan Boulle (@jonboulle) -Stephen Day (@stevvooe) +Stephen Day (@stevvooe) Vincent Batts (@vbatts) Aleksa Sarai (@cyphar) Keyang Xie (@xiekeyang) From 8fbc2fe4e7cc129f641aecf0ab4028ea9622b18a Mon Sep 17 00:00:00 2001 From: Odin Ugedal Date: Sat, 15 Jun 2019 01:29:23 +0200 Subject: [PATCH 19/88] Fix linting error Make error string non-capitalized, to fix linting problem Signed-off-by: Odin Ugedal --- schema/loader.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schema/loader.go b/schema/loader.go index c6bde0048..f17176595 100644 --- a/schema/loader.go +++ b/schema/loader.go @@ -59,7 +59,7 @@ func (factory *fsLoaderFactory) refContents(ref gojsonreference.JsonReference) ( } } if path == "" { - return nil, fmt.Errorf("Schema reference %#v unexpectedly not available in fsLoaderFactory with namespaces %#v", path, factory.namespaces) + return nil, fmt.Errorf("schema reference %#v unexpectedly not available in fsLoaderFactory with namespaces %#v", path, factory.namespaces) } f, err := factory.fs.Open(path) From 9e2546787c634d3c220395b86779aae227162e6d Mon Sep 17 00:00:00 2001 From: Odin Ugedal Date: Sat, 15 Jun 2019 01:31:43 +0200 Subject: [PATCH 20/88] Run tests with go 1.12 Signed-off-by: Odin Ugedal --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index df8439fe6..aef821a52 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: go go: - - 1.9.x - 1.10.x - 1.11.x + - 1.12.x sudo: required From b9023712aa79ea5fa1d1cd2ef42100106db052bb Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Wed, 21 Aug 2019 13:27:54 +0200 Subject: [PATCH 21/88] media-types: Define layer media types suffix '+zstd' Closes: https://github.com/opencontainers/image-spec/issues/787 Signed-off-by: Giuseppe Scrivano --- layer.md | 8 +++++++- media-types.md | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/layer.md b/layer.md index 947037ce5..387c9cf8a 100644 --- a/layer.md +++ b/layer.md @@ -4,13 +4,18 @@ This document describes how to serialize a filesystem and filesystem changes lik One or more layers are applied on top of each other to create a complete filesystem. This document will use a concrete example to illustrate how to create and consume these filesystem layers. -This section defines the `application/vnd.oci.image.layer.v1.tar`, `application/vnd.oci.image.layer.v1.tar+gzip`, `application/vnd.oci.image.layer.nondistributable.v1.tar`, and `application/vnd.oci.image.layer.nondistributable.v1.tar+gzip` [media types](media-types.md). +This section defines the `application/vnd.oci.image.layer.v1.tar`, `application/vnd.oci.image.layer.v1.tar+gzip`, `application/vnd.oci.image.layer.v1.tar+zstd`, `application/vnd.oci.image.layer.nondistributable.v1.tar`, `application/vnd.oci.image.layer.nondistributable.v1.tar+gzip`, and `application/vnd.oci.image.layer.nondistributable.v1.tar+zstd` [media types](media-types.md). ## `+gzip` Media Types * The media type `application/vnd.oci.image.layer.v1.tar+gzip` represents an `application/vnd.oci.image.layer.v1.tar` payload which has been compressed with [gzip][rfc1952_2]. * The media type `application/vnd.oci.image.layer.nondistributable.v1.tar+gzip` represents an `application/vnd.oci.image.layer.nondistributable.v1.tar` payload which has been compressed with [gzip][rfc1952_2]. +## `+zstd` Media Types + +* The media type `application/vnd.oci.image.layer.v1.tar+zstd` represents an `application/vnd.oci.image.layer.v1.tar` payload which has been compressed with [zstd][rfc8478]. +* The media type `application/vnd.oci.image.layer.nondistributable.v1.tar+zstd` represents an `application/vnd.oci.image.layer.nondistributable.v1.tar` payload which has been compressed with [zstd][rfc8478]. + ## Distributable Format * Layer Changesets for the [media type](media-types.md) `application/vnd.oci.image.layer.v1.tar` MUST be packaged in [tar archive][tar-archive]. @@ -331,3 +336,4 @@ Implementations SHOULD NOT upload layers tagged with this media type; however, s [gnu-tar-standard]: http://www.gnu.org/software/tar/manual/html_node/Standard.html [rfc1952_2]: https://tools.ietf.org/html/rfc1952 [tar-archive]: https://en.wikipedia.org/wiki/Tar_(computing) +[rfc8478]: https://tools.ietf.org/html/rfc8478 diff --git a/media-types.md b/media-types.md index 1f01fd6b2..b9a08246c 100644 --- a/media-types.md +++ b/media-types.md @@ -9,8 +9,10 @@ The following media types identify the formats described here and their referenc - `application/vnd.oci.image.config.v1+json`: [Image config](config.md) - `application/vnd.oci.image.layer.v1.tar`: ["Layer", as a tar archive](layer.md) - `application/vnd.oci.image.layer.v1.tar+gzip`: ["Layer", as a tar archive](layer.md#gzip-media-types) compressed with [gzip][rfc1952] +- `application/vnd.oci.image.layer.v1.tar+zstd`: ["Layer", as a tar archive](layer.md#zstd-media-types) compressed with [zstd][rfc8478] - `application/vnd.oci.image.layer.nondistributable.v1.tar`: ["Layer", as a tar archive with distribution restrictions](layer.md#non-distributable-layers) - `application/vnd.oci.image.layer.nondistributable.v1.tar+gzip`: ["Layer", as a tar archive with distribution restrictions](layer.md#gzip-media-types) compressed with [gzip][rfc1952] +- `application/vnd.oci.image.layer.nondistributable.v1.tar+zstd`: ["Layer", as a tar archive with distribution restrictions](layer.md#zstd-media-types) compressed with [zstd][rfc8478] ## Media Type Conflicts @@ -66,3 +68,4 @@ The following figure shows how the above media types reference each other: The image-index being a "fat manifest" references a list of image manifests per target platform. An image manifest references exactly one target configuration and possibly many layers. [rfc1952]: https://tools.ietf.org/html/rfc1952 +[rfc8478]: https://tools.ietf.org/html/rfc8478 From 28a0a87c4cd1d2f698961fca84c786e88e32ca27 Mon Sep 17 00:00:00 2001 From: Phil Estes Date: Wed, 17 Jul 2019 14:34:52 -0400 Subject: [PATCH 22/88] Reference "org" repo for meeting info Point to one canonical location for meeting details, frequency, minutes, agenda, etc. Signed-off-by: Phil Estes --- README.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 239461fab..39fe891d7 100644 --- a/README.md +++ b/README.md @@ -71,12 +71,11 @@ It also guarantees that the design is sound before code is written; a GitHub pul Typos and grammatical errors can go straight to a pull-request. When in doubt, start on the [mailing-list](#mailing-list). -## Weekly Call +## Meetings -The contributors and maintainers of all OCI projects have a weekly meeting Wednesdays at 2:00 PM (USA Pacific). -Everyone is welcome to participate via [UberConference web][UberConference] or audio-only: +1-415-968-0849 (no PIN needed). -An initial agenda will be posted to the [mailing list](#mailing-list) earlier in the week, and everyone is welcome to propose additional topics or suggest other agenda alterations there. -Minutes are posted to the [mailing list](#mailing-list) and minutes from past calls are archived [here][minutes]. +Please see the [OCI org repository README](https://github.com/opencontainers/org#meetings) for the most up-to-date +information on OCI contributor and maintainer meeting schedules. You can also find links to meeting agendas and +minutes for all prior meetings. ## Mailing List @@ -163,6 +162,4 @@ Read more on [How to Write a Git Commit Message](http://chris.beams.io/posts/git [code-of-conduct]: https://github.com/opencontainers/org/blob/master/CODE_OF_CONDUCT.md -[UberConference]: https://www.uberconference.com/opencontainers [irc-logs]: http://ircbot.wl.linuxfoundation.org/eavesdrop/%23opencontainers/ -[minutes]: http://ircbot.wl.linuxfoundation.org/meetings/opencontainers/ From 28ad867e60c7a37459c5c275a805adb3dfeb8dfe Mon Sep 17 00:00:00 2001 From: Jonathan Boulle Date: Wed, 21 Aug 2019 16:24:32 +0200 Subject: [PATCH 23/88] README.md: return to one-sentence-per-line format Signed-off-by: Jonathan Boulle --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 39fe891d7..f770bd0fa 100644 --- a/README.md +++ b/README.md @@ -73,9 +73,8 @@ When in doubt, start on the [mailing-list](#mailing-list). ## Meetings -Please see the [OCI org repository README](https://github.com/opencontainers/org#meetings) for the most up-to-date -information on OCI contributor and maintainer meeting schedules. You can also find links to meeting agendas and -minutes for all prior meetings. +Please see the [OCI org repository README](https://github.com/opencontainers/org#meetings) for the most up-to-date information on OCI contributor and maintainer meeting schedules. +You can also find links to meeting agendas and minutes for all prior meetings. ## Mailing List From a0f41f3e2b1c0194ba9946310544b75bda222aee Mon Sep 17 00:00:00 2001 From: Valentin Rothberg Date: Fri, 23 Aug 2019 10:39:07 +0200 Subject: [PATCH 24/88] zstd: add constants to specs-go/v1 Add go constants for the zstd MIME types to make them usable by consumers of the go package. Signed-off-by: Valentin Rothberg --- schema/validator.go | 4 +++- specs-go/v1/mediatype.go | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/schema/validator.go b/schema/validator.go index 029217c3b..545ade22d 100644 --- a/schema/validator.go +++ b/schema/validator.go @@ -117,8 +117,10 @@ func validateManifest(r io.Reader) error { for _, layer := range header.Layers { if layer.MediaType != string(v1.MediaTypeImageLayer) && layer.MediaType != string(v1.MediaTypeImageLayerGzip) && + layer.MediaType != string(v1.MediaTypeImageLayerZstd) && layer.MediaType != string(v1.MediaTypeImageLayerNonDistributable) && - layer.MediaType != string(v1.MediaTypeImageLayerNonDistributableGzip) { + layer.MediaType != string(v1.MediaTypeImageLayerNonDistributableGzip) && + layer.MediaType != string(v1.MediaTypeImageLayerNonDistributableZstd) { fmt.Printf("warning: layer %s has an unknown media type: %s\n", layer.Digest, layer.MediaType) } } diff --git a/specs-go/v1/mediatype.go b/specs-go/v1/mediatype.go index bad7bb97f..4f35ac134 100644 --- a/specs-go/v1/mediatype.go +++ b/specs-go/v1/mediatype.go @@ -34,6 +34,10 @@ const ( // referenced by the manifest. MediaTypeImageLayerGzip = "application/vnd.oci.image.layer.v1.tar+gzip" + // MediaTypeImageLayerZstd is the media type used for zstd compressed + // layers referenced by the manifest. + MediaTypeImageLayerZstd = "application/vnd.oci.image.layer.v1.tar+zstd" + // MediaTypeImageLayerNonDistributable is the media type for layers referenced by // the manifest but with distribution restrictions. MediaTypeImageLayerNonDistributable = "application/vnd.oci.image.layer.nondistributable.v1.tar" @@ -43,6 +47,11 @@ const ( // restrictions. MediaTypeImageLayerNonDistributableGzip = "application/vnd.oci.image.layer.nondistributable.v1.tar+gzip" + // MediaTypeImageLayerNonDistributableZstd is the media type for zstd + // compressed layers referenced by the manifest but with distribution + // restrictions. + MediaTypeImageLayerNonDistributableZstd = "application/vnd.oci.image.layer.nondistributable.v1.tar+zstd" + // MediaTypeImageConfig specifies the media type for the image configuration. MediaTypeImageConfig = "application/vnd.oci.image.config.v1+json" ) From ed3bc48a9c661e30a2d9e03756bd3c61eaf1be6d Mon Sep 17 00:00:00 2001 From: Vanessa Sochat Date: Wed, 6 Nov 2019 11:17:54 -0500 Subject: [PATCH 25/88] mediatype of layers should be application/vnd.oci.image.layer.v1.tar+gzip Signed-off-by: Vanessa Sochat --- schema/manifest_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/schema/manifest_test.go b/schema/manifest_test.go index 6c680f53a..0af67a4d1 100644 --- a/schema/manifest_test.go +++ b/schema/manifest_test.go @@ -188,17 +188,17 @@ func TestManifest(t *testing.T) { }, "layers": [ { - "mediaType": "application/vnd.oci.image.config.v1+json", + "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", "size": 1470, "digest": "sha256+foo-bar:c86f7763873b6c0aae22d963bab59b4f5debbed6685761b5951584f6efb0633b" }, { - "mediaType": "application/vnd.oci.image.config.v1+json", + "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", "size": 1470, "digest": "sha256.foo-bar:c86f7763873b6c0aae22d963bab59b4f5debbed6685761b5951584f6efb0633b" }, { - "mediaType": "application/vnd.oci.image.config.v1+json", + "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", "size": 1470, "digest": "multihash+base58:QmRZxt2b1FVZPNqd8hsiykDL3TdBDeTSPX9Kv46HmX4Gx8" } @@ -219,7 +219,7 @@ func TestManifest(t *testing.T) { }, "layers": [ { - "mediaType": "application/vnd.oci.image.config.v1+json", + "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", "size": 1470, "digest": "sha256+foo+-b:c86f7763873b6c0aae22d963bab59b4f5debbed6685761b5951584f6efb0633b" } From 7f8ccb1c167f8527955ea16d177cbac97b022f4e Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Wed, 5 Feb 2020 16:15:59 -0800 Subject: [PATCH 26/88] MAINTAINERS: remove Brandon Philips @philips I have not been active in the project for quite some time so I am stepping down. Thank you for all of the work over the years to standardize container formats everyone! Signed-off-by: Brandon Philips --- MAINTAINERS | 1 - 1 file changed, 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index c98c39ea5..a809f34a7 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,4 +1,3 @@ -Brandon Philips (@philips) Brendan Burns (@brendandburns) Jason Bouzane (@jbouzane) John Starks (@jstarks) From a28a18a9e569648cdb77623de0fc121228f46c2b Mon Sep 17 00:00:00 2001 From: Shengjing Zhu Date: Mon, 23 Mar 2020 18:35:56 +0800 Subject: [PATCH 27/88] Remove go4.org dependency The offset to line/col translation is easy to implement. Not worthy to bring a third-party dependency. PS. I think this code is never used, but removing it is too aggressive since it exposes public api. Signed-off-by: Shengjing Zhu --- schema/error.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/schema/error.go b/schema/error.go index 8b0bfc2af..baf875195 100644 --- a/schema/error.go +++ b/schema/error.go @@ -15,10 +15,9 @@ package schema import ( + "bufio" "encoding/json" "io" - - "go4.org/errorutil" ) // A SyntaxError is a description of a JSON syntax error @@ -36,7 +35,21 @@ func (e *SyntaxError) Error() string { return e.msg } // If the given error is not a *json.SyntaxError it is returned unchanged. func WrapSyntaxError(r io.Reader, err error) error { if serr, ok := err.(*json.SyntaxError); ok { - line, col, _ := errorutil.HighlightBytePosition(r, serr.Offset) + buf := bufio.NewReader(r) + line := 0 + col := 0 + for i := int64(0); i < serr.Offset; i++ { + b, berr := buf.ReadByte() + if berr != nil { + break + } + if b == '\n' { + line++ + col = 1 + } else { + col++ + } + } return &SyntaxError{serr.Error(), line, col, serr.Offset} } From 541b9c4f5678134e8982ee1bcccd961e4c2dec4c Mon Sep 17 00:00:00 2001 From: Mohammed Daoudi Date: Mon, 16 Nov 2020 05:54:00 +0100 Subject: [PATCH 28/88] fixed typo in image-layout Signed-off-by: Mohammed Daoudi --- image-layout.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/image-layout.md b/image-layout.md index 3df3b3efa..2ae591ab5 100644 --- a/image-layout.md +++ b/image-layout.md @@ -1,6 +1,6 @@ ## OCI Image Layout Specification -* The OCI Image Layout is directory structure for OCI content-addressable blobs and [location-addressable](https://en.wikipedia.org/wiki/Content-addressable_storage#Content-addressed_vs._location-addressed) references (refs). +* The OCI Image Layout is the directory structure for OCI content-addressable blobs and [location-addressable](https://en.wikipedia.org/wiki/Content-addressable_storage#Content-addressed_vs._location-addressed) references (refs). * This layout MAY be used in a variety of different transport mechanisms: archive formats (e.g. tar, zip), shared filesystem environments (e.g. nfs), or networked file fetching (e.g. http, ftp, rsync). Given an image layout and a ref, a tool can create an [OCI Runtime Specification bundle](https://github.com/opencontainers/runtime-spec/blob/v1.0.0/bundle.md) by: From 78b304d1676cd7c9f9bf0814b25c0b550d3e7aca Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Mon, 7 Dec 2020 08:58:00 -0500 Subject: [PATCH 29/88] pandoc: point to a joint OCI org image Signed-off-by: Vincent Batts --- .travis.yml | 2 +- Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index aef821a52..624e455e1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,7 @@ before_script: - export PATH=$HOME/gopath/bin:$PATH before_install: - - docker pull vbatts/pandoc + - docker pull quay.io/oci/pandoc:1.17.0.3-2.fc25.x86_64 - make install.tools - go get -u github.com/alecthomas/gometalinter - gometalinter --install diff --git a/Makefile b/Makefile index 64a8c84d0..56bfadfc9 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ PANDOC ?= $(shell command -v pandoc 2>/dev/null) OUTPUT_DIRNAME ?= output/ DOC_FILENAME ?= oci-image-spec -PANDOC_CONTAINER ?= docker.io/vbatts/pandoc:1.17.0.3-2.fc25.x86_64 +PANDOC_CONTAINER ?= quay.io/oci/pandoc:1.17.0.3-2.fc25.x86_64 ifeq "$(strip $(PANDOC))" '' ifneq "$(strip $(DOCKER))" '' PANDOC = $(DOCKER) run \ From 7cb369bb6c9ad6491b3f2ccc2d24527e2a5d4307 Mon Sep 17 00:00:00 2001 From: Phil Estes Date: Thu, 25 Mar 2021 14:38:29 -0400 Subject: [PATCH 30/88] Replace Jason B with Jon J in image-spec maintainers Switch approved by Jason Bouzane via email to OCI TOB mailing list. Signed-off-by: Phil Estes --- MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index a809f34a7..8468e29c4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,5 +1,5 @@ Brendan Burns (@brendandburns) -Jason Bouzane (@jbouzane) +Jon Johnson (@jonjohnsonjr) John Starks (@jstarks) Jonathan Boulle (@jonboulle) Stephen Day (@stevvooe) From 6ed01715fb7bee05f2882e2fa3ee813a11e5590c Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Fri, 26 Mar 2021 11:35:50 -0400 Subject: [PATCH 31/88] Update vbatts email address in MAINTAINERS Signed-off-by: Jason Hall --- MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 8468e29c4..04129fa09 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3,6 +3,6 @@ Jon Johnson (@jonjohnsonjr) John Starks (@jstarks) Jonathan Boulle (@jonboulle) Stephen Day (@stevvooe) -Vincent Batts (@vbatts) +Vincent Batts (@vbatts) Aleksa Sarai (@cyphar) Keyang Xie (@xiekeyang) From 96026a1df0a72ed220b949fecd819df71ad57852 Mon Sep 17 00:00:00 2001 From: Jonathan Boulle Date: Mon, 3 May 2021 14:54:55 +0200 Subject: [PATCH 32/88] MAINTAINERS: update jonboulle email address Signed-off-by: Jonathan Boulle --- MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 04129fa09..8bd695812 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,7 +1,7 @@ Brendan Burns (@brendandburns) Jon Johnson (@jonjohnsonjr) John Starks (@jstarks) -Jonathan Boulle (@jonboulle) +Jonathan Boulle (@jonboulle) Stephen Day (@stevvooe) Vincent Batts (@vbatts) Aleksa Sarai (@cyphar) From 6efa561be4dc822037626b3661b6881d37322798 Mon Sep 17 00:00:00 2001 From: Chris Aniszczyk Date: Wed, 5 May 2021 11:25:59 -0500 Subject: [PATCH 33/88] Remove Keyang Xie as a maintainer Signed-off-by: Chris Aniszczyk --- MAINTAINERS | 1 - 1 file changed, 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 8bd695812..79b5bed60 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -5,4 +5,3 @@ Jonathan Boulle (@jonboulle) Stephen Day (@stevvooe) Vincent Batts (@vbatts) Aleksa Sarai (@cyphar) -Keyang Xie (@xiekeyang) From 5479df145a3d7e352a6a0ea1d59d3700d54d7128 Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Thu, 18 Feb 2021 09:12:33 -0500 Subject: [PATCH 34/88] Add standard base image annotations Signed-off-by: Jason Hall --- annotations.md | 8 ++++++++ specs-go/v1/annotations.go | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/annotations.md b/annotations.md index 0c7ad0aa1..d2dd73ee5 100644 --- a/annotations.md +++ b/annotations.md @@ -40,6 +40,14 @@ This specification defines the following annotation keys, intended for but not l ``` * **org.opencontainers.image.title** Human-readable title of the image (string) * **org.opencontainers.image.description** Human-readable description of the software packaged in the image (string) +* **org.opencontainers.image.base.digest** [Digest](descriptor.md#digests) of the image this image is based on (string) + * This SHOULD be the immediate image sharing zero-indexed layers with the image, such as from a Dockerfile `FROM` statement. + * This SHOULD NOT reference any other images used to generate the contents of the image (e.g., multi-stage Dockerfile builds). +* **org.opencontainers.image.base.ref.name** Image reference of the image this image is based on (string) + * This SHOULD be image references in the format defined by [distribution/distribution](https://github.com/distribution/distribution/blob/d0deff9cd6c2b8c82c6f3d1c713af51df099d07b/reference/reference.go). + * This SHOULD be a fully qualified reference name, without any assumed default registry. (e.g., `index.docker.io/my-org/my-image:tag` instead of `my-org/my-image:tag`). + * This SHOULD be the immediate image sharing zero-indexed layers with the image, such as from a Dockerfile `FROM` statement. + * This SHOULD NOT reference any other images used to generate the contents of the image (e.g., multi-stage Dockerfile builds). ## Back-compatibility with Label Schema diff --git a/specs-go/v1/annotations.go b/specs-go/v1/annotations.go index 35d810895..34ced01c8 100644 --- a/specs-go/v1/annotations.go +++ b/specs-go/v1/annotations.go @@ -53,4 +53,10 @@ const ( // AnnotationDescription is the annotation key for the human-readable description of the software packaged in the image. AnnotationDescription = "org.opencontainers.image.description" + + // AnnotationBaseImageDigest is the annotation key for the digest of the image's base image. + AnnotationBaseImageDigest = "org.opencontainers.image.base.digest" + + // AnnotationBaseImageRefName is the annotation key for the image reference of the image's base image. + AnnotationBaseImageRefName = "org.opencontainers.image.base.ref.name" ) From 0392094e76b208e7301bce6ec3eece3714929932 Mon Sep 17 00:00:00 2001 From: Chris Aniszczyk Date: Sat, 8 May 2021 10:10:32 -0500 Subject: [PATCH 35/88] Create EMERITUS.md to recognize old maintainers Previous maintainers should be thanked for their work. Signed-off-by: Chris Aniszczyk Signed-off-by: Vincent Batts --- EMERITUS.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 EMERITUS.md diff --git a/EMERITUS.md b/EMERITUS.md new file mode 100644 index 000000000..52205517e --- /dev/null +++ b/EMERITUS.md @@ -0,0 +1,7 @@ +We would like to acknowledge previous OCI image spec maintainers and their huge contributions to our collective success: + +* Brandon Philips (@philips) +* Jason Bouzane (@jbouzane) +* Keyang Xie (@xiekeyang) + +We thank these members for their service to the OCI community. From ba23dff7e2cd1c8b59c44f767eacadffbac2fbc8 Mon Sep 17 00:00:00 2001 From: vsoch Date: Fri, 30 Apr 2021 16:08:32 -0600 Subject: [PATCH 36/88] adding github workflow to render docs and lint This should be equivalent to the .travis-ci workflow, but run in GitHub actions. I am using the exact commit of the v1 release, as that is considered safer practice than the tag/release itself. Signed-off-by: vsoch --- .github/workflows/docs-and-linting.yml | 49 ++++++++++++++++++++++ .travis.yml | 30 ------------- Makefile | 9 ++-- schema/fs.go | 58 ++++++++++++++++++++++---- 4 files changed, 102 insertions(+), 44 deletions(-) create mode 100644 .github/workflows/docs-and-linting.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/docs-and-linting.yml b/.github/workflows/docs-and-linting.yml new file mode 100644 index 000000000..30be61e3a --- /dev/null +++ b/.github/workflows/docs-and-linting.yml @@ -0,0 +1,49 @@ +name: Render and Lint Documentation + +on: + pull_request: + branches_ignore: [] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + go: ['1.10', '1.11', '1.12'] + + name: Documentation and Linting + steps: + + - uses: actions/checkout@v2 + with: + path: go/src/github.com/opencontainers/image-spec + + # commit for v1 release + - uses: actions/setup-go@0caeaed6fd66a828038c2da3c0f662a42862658f + with: + go-version: ${{ matrix.go }} + + - name: Render and Lint + env: + GOPATH: /home/runner/work/image-spec/image-spec/go + run: | + export PATH=$GOPATH/bin:$PATH + docker pull quay.io/oci/pandoc:1.17.0.3-2.fc25.x86_64 + cd go/src/github.com/opencontainers/image-spec + make install.tools + go get -u github.com/alecthomas/gometalinter + gometalinter --install + go get -t -d ./... + ls ../ + make + make .gitvalidation + make lint + make check-license + make test + make docs + + - name: documentation artifacts + uses: actions/upload-artifact@v2 + with: + name: oci-docs + path: go/src/github.com/opencontainers/image-spec/output diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 624e455e1..000000000 --- a/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -language: go -go: - - 1.10.x - - 1.11.x - - 1.12.x - -sudo: required - -services: - - docker - -before_script: - - export PATH=$HOME/gopath/bin:$PATH - -before_install: - - docker pull quay.io/oci/pandoc:1.17.0.3-2.fc25.x86_64 - - make install.tools - - go get -u github.com/alecthomas/gometalinter - - gometalinter --install - - go get -t -d ./... - -install: true - -script: - - env | grep TRAVIS_ - - make .gitvalidation - - make lint - - make check-license - - make test - - make docs diff --git a/Makefile b/Makefile index 56bfadfc9..e84625af3 100644 --- a/Makefile +++ b/Makefile @@ -4,14 +4,13 @@ export GO15VENDOREXPERIMENT DOCKER ?= $(shell command -v docker 2>/dev/null) PANDOC ?= $(shell command -v pandoc 2>/dev/null) -OUTPUT_DIRNAME ?= output/ +OUTPUT_DIRNAME ?= output DOC_FILENAME ?= oci-image-spec PANDOC_CONTAINER ?= quay.io/oci/pandoc:1.17.0.3-2.fc25.x86_64 ifeq "$(strip $(PANDOC))" '' ifneq "$(strip $(DOCKER))" '' PANDOC = $(DOCKER) run \ - -it \ --rm \ -v $(shell pwd)/:/input/:ro \ -v $(shell pwd)/$(OUTPUT_DIRNAME)/:/$(OUTPUT_DIRNAME)/ \ @@ -107,11 +106,11 @@ img/%.png: img/%.dot dot -Tpng $^ > $@ -# When this is running in travis, it will only check the travis commit range +# When this is running in GitHub, it will only check the commit range .gitvalidation: @which git-validation > /dev/null 2>/dev/null || (echo "ERROR: git-validation not found. Consider 'make install.tools' target" && false) -ifdef TRAVIS_COMMIT_RANGE - git-validation -q -run DCO,short-subject,dangling-whitespace +ifdef GITHUB_SHA + git-validation -q -run DCO,short-subject,dangling-whitespace -range $(GITHUB_SHA)..HEAD else git-validation -v -run DCO,short-subject,dangling-whitespace -range $(EPOCH_TEST_COMMIT)..HEAD endif diff --git a/schema/fs.go b/schema/fs.go index 5baeeaec5..ca5bbe95a 100644 --- a/schema/fs.go +++ b/schema/fs.go @@ -20,6 +20,8 @@ import ( "bytes" "compress/gzip" "encoding/base64" + "fmt" + "io" "io/ioutil" "net/http" "os" @@ -114,7 +116,24 @@ func (f *_escFile) Close() error { } func (f *_escFile) Readdir(count int) ([]os.FileInfo, error) { - return nil, nil + if !f.isDir { + return nil, fmt.Errorf(" escFile.Readdir: '%s' is not directory", f.name) + } + + fis, ok := _escDirs[f.local] + if !ok { + return nil, fmt.Errorf(" escFile.Readdir: '%s' is directory, but we have no info about content of this dir, local=%s", f.name, f.local) + } + limit := count + if count <= 0 || limit > len(fis) { + limit = len(fis) + } + + if len(fis) == 0 && count > 0 { + return nil, io.EOF + } + + return fis[0:limit], nil } func (f *_escFile) Stat() (os.FileInfo, error) { @@ -205,9 +224,10 @@ func _escFSMustString(useLocal bool, name string) string { var _escData = map[string]*_escFile{ "/config-schema.json": { + name: "config-schema.json", local: "config-schema.json", size: 2771, - modtime: 1515512099, + modtime: 1619819526, compressed: ` H4sIAAAAAAAC/+RWQY/TPBC951dE2T22m+/wnXot3JCKVAGHFarcZNLOEnvMeIKIUP87itNCkjpp6apc OEUaz7z35nns+EcUx0kOLmO0gmSSRZysLJglGVFogOMlmQJ38dpChgVmymfNmrJHl+1Bq6ZkL2IXafri @@ -223,9 +243,10 @@ MzuH6GcAAAD//0pj2wvTCgAA }, "/content-descriptor.json": { + name: "content-descriptor.json", local: "content-descriptor.json", size: 1079, - modtime: 1537191585, + modtime: 1619819526, compressed: ` H4sIAAAAAAAC/5yTsW7cMAyGdz8F4QTIkos6BB2MIEu7d2i3ooNOok5Mz5JK8RBci7x7QcvX2G2RILfZ xP+Rn2zqVwfQe6yOqQjl1A/QfyqYPuQklhIy6BMmgY9zKDN8LugokLMTca0tLquLOFrFo0gZjHmoOW1a @@ -238,9 +259,10 @@ dIbaEm+G3WzZM/44EKMqff37riz3dL0uHcC37qn7HQAA//9DKIMKNwQAAA== }, "/defs-descriptor.json": { + name: "defs-descriptor.json", local: "defs-descriptor.json", size: 844, - modtime: 1537191664, + modtime: 1619819526, compressed: ` H4sIAAAAAAAC/5SST2/TTBDG7/kU826jt0DiOHBAqlWKKnrnUE6t0mi6O7aneP9od6IqVPnuaG03SYtA cLC1+2jmefwbz9MEQBlKOnIQ9k5VoK6oZsf5liBgFNabDiOIh6+B3BfvBNlRhKuxzUe4DqS5Zo29x3ww @@ -254,9 +276,10 @@ TAMAAA== }, "/defs.json": { + name: "defs.json", local: "defs.json", size: 1670, - modtime: 1515512099, + modtime: 1619819526, compressed: ` H4sIAAAAAAAC/7STza6bMBCF9zzFyO2S9oJtbGDb7hMpy6oLSiaJq2AjY6RWEe9e8RNChFuJKneRgGc8 3zmeMbcAgByxKa2qnTKa5EC+4klp1a8aaBs8grtY054vpnXgLgi7GvUXo12hNFo41FiqkyqLoTwceTOA @@ -269,9 +292,10 @@ fIvD7in0ryMEy+fK1G6UfmdTE+tvpoL+1wV/AgAA//96IpqyhgYAAA== }, "/image-index-schema.json": { + name: "image-index-schema.json", local: "image-index-schema.json", size: 2993, - modtime: 1515512099, + modtime: 1619819526, compressed: ` H4sIAAAAAAAC/6yWz0/jOhDH7/0rRgGJC5CnJ/QOFeLy9sJpD4v2suJg7EkybGNnx1Ogu+r/vrJN2qRJ C4Te2rHnO5/vxL/+zAAyg14zNULOZnPIvjZo/3dWFFlkuK1ViXBrDb7AtwY1FaRVnHoeck+9rrBWIa8S @@ -289,9 +313,10 @@ VmZjL8HOE24GcD9bz/4GAAD//yCnv52xCwAA }, "/image-layout-schema.json": { + name: "image-layout-schema.json", local: "image-layout-schema.json", size: 439, - modtime: 1515512099, + modtime: 1619819526, compressed: ` H4sIAAAAAAAC/2yPQUvEMBCF7/0VQ/Sg4DYVPOW6pwVhD4IX8VDTaTvLNonJVFik/12SaRXRU5g38+W9 91kBqA6TjRSYvFMG1DGg23vHLTmMcJjaAeGxvfiZ4cmOOLXqLlPXSQYDamQORutT8m4nau3joLvY9rxr @@ -302,9 +327,10 @@ HrRoV8JRtyHJaO0DOruZpYLJtaZsrM/FWEi+BMysfzuhXbUQfcDIhEkZyG2yQyYl8TPGJLVk97fth1yA }, "/image-manifest-schema.json": { + name: "image-manifest-schema.json", local: "image-manifest-schema.json", size: 921, - modtime: 1515512099, + modtime: 1619819526, compressed: ` H4sIAAAAAAAC/5ySMW8iMRCF+/0VI0MJ+O501bZXUZxSJEoTpXB2x7uDWNsZmygo4r9HtnHAkCKifTvv zTdv/dEAiB59x+QCWSNaEHcOzT9rgiKDDOtJDQj/lSGNPsC9w440dSpNL6J97rsRJxWtYwiulXLjrVlm @@ -317,7 +343,21 @@ Dj+ZAwAA }, "/": { + name: "/", + local: `.`, isDir: true, - local: "", + }, +} + +var _escDirs = map[string][]os.FileInfo{ + + ".": { + _escData["/config-schema.json"], + _escData["/content-descriptor.json"], + _escData["/defs-descriptor.json"], + _escData["/defs.json"], + _escData["/image-index-schema.json"], + _escData["/image-layout-schema.json"], + _escData["/image-manifest-schema.json"], }, } From d46e100d55029c3db32dc8c83ae9755ade111f88 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Fri, 30 Apr 2021 14:33:39 -0400 Subject: [PATCH 37/88] Makefile: switch to the new OCI container image like https://github.com/opencontainers/distribution-spec/commit/199cf0e5f696a09557b2d7e1ab9b065dcacf5317#diff-76ed074a9305c04054cdebb9e9aad2d818052b07091de1f20cad0bbac34ffb52 Fixes: #773 Closes: #774 Signed-off-by: Yang Bo Signed-off-by: Vincent Batts --- Makefile | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index e84625af3..edef0a100 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,4 @@ -GO15VENDOREXPERIMENT=1 -export GO15VENDOREXPERIMENT +EPOCH_TEST_COMMIT ?= v0.2.0 DOCKER ?= $(shell command -v docker 2>/dev/null) PANDOC ?= $(shell command -v pandoc 2>/dev/null) @@ -7,7 +6,7 @@ PANDOC ?= $(shell command -v pandoc 2>/dev/null) OUTPUT_DIRNAME ?= output DOC_FILENAME ?= oci-image-spec -PANDOC_CONTAINER ?= quay.io/oci/pandoc:1.17.0.3-2.fc25.x86_64 +PANDOC_CONTAINER ?= ghcr.io/opencontainers/pandoc:2.9.2.1-8.fc33.x86_64@sha256:5d81ff930a043295a557be8b003ece2a33d14e91b28c50d368413b83372f8d28 ifeq "$(strip $(PANDOC))" '' ifneq "$(strip $(DOCKER))" '' PANDOC = $(DOCKER) run \ @@ -40,8 +39,6 @@ DOC_FILES := \ FIGURE_FILES := \ img/media-types.png -EPOCH_TEST_COMMIT ?= v0.2.0 - TOOLS := esc gitvalidation glide glide-vc default: check-license lint test @@ -69,13 +66,13 @@ $(OUTPUT_DIRNAME)/$(DOC_FILENAME).pdf: $(DOC_FILES) $(FIGURE_FILES) else $(OUTPUT_DIRNAME)/$(DOC_FILENAME).pdf: $(DOC_FILES) $(FIGURE_FILES) @mkdir -p $(OUTPUT_DIRNAME)/ && \ - $(PANDOC) -f markdown_github -t latex --latex-engine=xelatex -o $(PANDOC_DST)$@ $(patsubst %,$(PANDOC_SRC)%,$(DOC_FILES)) + $(PANDOC) -f gfm -t latex --pdf-engine=xelatex -V geometry:margin=0.5in,bottom=0.8in -V block-headings -o $(PANDOC_DST)$@ $(patsubst %,$(PANDOC_SRC)%,$(DOC_FILES)) ls -sh $(realpath $@) $(OUTPUT_DIRNAME)/$(DOC_FILENAME).html: header.html $(DOC_FILES) $(FIGURE_FILES) @mkdir -p $(OUTPUT_DIRNAME)/ && \ cp -ap img/ $(shell pwd)/$(OUTPUT_DIRNAME)/&& \ - $(PANDOC) -f markdown_github -t html5 -H $(PANDOC_SRC)header.html --standalone -o $(PANDOC_DST)$@ $(patsubst %,$(PANDOC_SRC)%,$(DOC_FILES)) + $(PANDOC) -f gfm -t html5 -H $(PANDOC_SRC)header.html --standalone -o $(PANDOC_DST)$@ $(patsubst %,$(PANDOC_SRC)%,$(DOC_FILES)) ls -sh $(realpath $@) endif From 470541bcf106b67bffb1453ec067a7cead401895 Mon Sep 17 00:00:00 2001 From: Jon Johnson Date: Wed, 16 Jun 2021 09:32:31 -0700 Subject: [PATCH 38/88] Fix typo Missing "to" in Volumes description. Signed-off-by: Jon Johnson --- config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.md b/config.md index 398296ae4..049614adc 100644 --- a/config.md +++ b/config.md @@ -148,7 +148,7 @@ Note: Any OPTIONAL field MAY also be set to null, which is equivalent to being a - **Volumes** *object*, OPTIONAL - A set of directories describing where the process is likely write data specific to a container instance. + A set of directories describing where the process is likely to write data specific to a container instance. **NOTE:** This JSON structure value is unusual because it is a direct JSON serialization of the Go type `map[string]struct{}` and is represented in JSON as an object mapping its keys to an empty object. - **WorkingDir** *string*, OPTIONAL From cd1dd98467371a6f2456b2192eb88abcd172f39d Mon Sep 17 00:00:00 2001 From: Vanessasaurus <814322+vsoch@users.noreply.github.com> Date: Fri, 18 Jun 2021 17:15:42 -0600 Subject: [PATCH 39/88] Removing Link Introduction There doesn't seem to be an introduction in this file (and the link goes to itself?) so I think we probably want to remove it (or link to an introduction elsewhere?) Signed-off-by: vsoch --- spec.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spec.md b/spec.md index bf8474389..976ff7247 100644 --- a/spec.md +++ b/spec.md @@ -7,7 +7,6 @@ The goal of this specification is to enable the creation of interoperable tools ### Table of Contents -- [Introduction](spec.md) - [Notational Conventions](#notational-conventions) - [Overview](#overview) - [Understanding the Specification](#understanding-the-specification) From 467e67f10b04c88ad5a7bb0e5f4ec7336f87823c Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Wed, 30 Jun 2021 16:50:53 -0400 Subject: [PATCH 40/88] Describe how index manifests should work with base image annotations Signed-off-by: Jason Hall --- annotations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/annotations.md b/annotations.md index d2dd73ee5..99d5e1f0f 100644 --- a/annotations.md +++ b/annotations.md @@ -48,6 +48,7 @@ This specification defines the following annotation keys, intended for but not l * This SHOULD be a fully qualified reference name, without any assumed default registry. (e.g., `index.docker.io/my-org/my-image:tag` instead of `my-org/my-image:tag`). * This SHOULD be the immediate image sharing zero-indexed layers with the image, such as from a Dockerfile `FROM` statement. * This SHOULD NOT reference any other images used to generate the contents of the image (e.g., multi-stage Dockerfile builds). + * If the `image.base.ref.name` annotation is specified, the `image.base.digest` annotation SHOULD be the digest of the manifest referenced by the `image.base.ref.name` annotation. ## Back-compatibility with Label Schema From de0acf6ffa9267b89101b03e88d97456b8e83c19 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Wed, 30 Jun 2021 17:49:16 -0400 Subject: [PATCH 41/88] CODEOWNERS: switching from pullapprove to github builtin Signed-off-by: Vincent Batts --- CODEOWNERS | 1 + 1 file changed, 1 insertion(+) create mode 100644 CODEOWNERS diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 000000000..3a867729b --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @brendandburns @jonjohnsonjr @jstarks @jonboulle @stevvooe @vbatts @cyphar From f80228f623126048982f52972b3b06fa750edf34 Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Wed, 30 Jun 2021 20:09:11 -0400 Subject: [PATCH 42/88] image.base.ref.name -> image.base.name based on stevvooe's feedback Signed-off-by: Jason Hall --- annotations.md | 4 ++-- specs-go/v1/annotations.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/annotations.md b/annotations.md index 99d5e1f0f..ead0ce538 100644 --- a/annotations.md +++ b/annotations.md @@ -43,12 +43,12 @@ This specification defines the following annotation keys, intended for but not l * **org.opencontainers.image.base.digest** [Digest](descriptor.md#digests) of the image this image is based on (string) * This SHOULD be the immediate image sharing zero-indexed layers with the image, such as from a Dockerfile `FROM` statement. * This SHOULD NOT reference any other images used to generate the contents of the image (e.g., multi-stage Dockerfile builds). -* **org.opencontainers.image.base.ref.name** Image reference of the image this image is based on (string) +* **org.opencontainers.image.base.name** Image reference of the image this image is based on (string) * This SHOULD be image references in the format defined by [distribution/distribution](https://github.com/distribution/distribution/blob/d0deff9cd6c2b8c82c6f3d1c713af51df099d07b/reference/reference.go). * This SHOULD be a fully qualified reference name, without any assumed default registry. (e.g., `index.docker.io/my-org/my-image:tag` instead of `my-org/my-image:tag`). * This SHOULD be the immediate image sharing zero-indexed layers with the image, such as from a Dockerfile `FROM` statement. * This SHOULD NOT reference any other images used to generate the contents of the image (e.g., multi-stage Dockerfile builds). - * If the `image.base.ref.name` annotation is specified, the `image.base.digest` annotation SHOULD be the digest of the manifest referenced by the `image.base.ref.name` annotation. + * If the `image.base.name` annotation is specified, the `image.base.digest` annotation SHOULD be the digest of the manifest referenced by the `image.ref.name` annotation. ## Back-compatibility with Label Schema diff --git a/specs-go/v1/annotations.go b/specs-go/v1/annotations.go index 34ced01c8..581cf7cdf 100644 --- a/specs-go/v1/annotations.go +++ b/specs-go/v1/annotations.go @@ -57,6 +57,6 @@ const ( // AnnotationBaseImageDigest is the annotation key for the digest of the image's base image. AnnotationBaseImageDigest = "org.opencontainers.image.base.digest" - // AnnotationBaseImageRefName is the annotation key for the image reference of the image's base image. - AnnotationBaseImageRefName = "org.opencontainers.image.base.ref.name" + // AnnotationBaseImageName is the annotation key for the image reference of the image's base image. + AnnotationBaseImageName = "org.opencontainers.image.base.name" ) From 9c907283d851e54afab4e14b99df76a0a69ed7a6 Mon Sep 17 00:00:00 2001 From: Luciano Queiroz Date: Wed, 7 Jul 2021 23:19:46 +0200 Subject: [PATCH 43/88] Add background to png images On github darkmode is really hard to follow the specification because png images expects a light background. Signed-off-by: Luciano Queiroz --- img/build-diagram.png | Bin 27796 -> 43326 bytes img/run-diagram.png | Bin 14368 -> 9640 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/img/build-diagram.png b/img/build-diagram.png index d34a047864756ffa6870201ca6ce8e3f98cf28ec..9ad9b84eb5f052c30cf444c43a3e21cdff1f4f64 100644 GIT binary patch literal 43326 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 Y@&En@){e8C#0Q|Ky-@4I?A1H}7exi_OaK4? literal 27796 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 z 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 diff --git a/img/run-diagram.png b/img/run-diagram.png index df6145bf06ea2997dbe722b2da958e6bf9bf3dd8..c1009f4de5036e15ddfdb0bfa1d2f2e7895e248b 100644 GIT binary patch literal 9640 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 MqN`l_#Olre0a}$ObN~PV literal 14368 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 Uig1SGgw)TOSez+3ef{452Q_iqDgXcg From bef99800c9151c97e4eb5e2280cb04d6ce04ab0d Mon Sep 17 00:00:00 2001 From: Aidan Delaney Date: Mon, 1 Mar 2021 07:57:59 +0000 Subject: [PATCH 44/88] Drop link to OCI scope table The OCI scope table no-longer exists. Drop the reference to it in the README. Fixes #812 Signed-off-by: Aidan Delaney --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index f770bd0fa..e7557208c 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,6 @@ Additional documentation about how this group operates: - [Releases](RELEASES.md) - [Project Documentation](project.md) -The _optional_ and _base_ layers of all OCI projects are tracked in the [OCI Scope Table](https://www.opencontainers.org/about/oci-scope-table). - ## Running an OCI Image The OCI Image Format partner project is the [OCI Runtime Spec project](https://github.com/opencontainers/runtime-spec). From ce6501af108e312dd9e2bd5b7b625444e7ed33f0 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Fri, 9 Jul 2021 12:25:22 -0400 Subject: [PATCH 45/88] pullapprove: remove defunct config Signed-off-by: Vincent Batts --- .pullapprove.yml | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 .pullapprove.yml diff --git a/.pullapprove.yml b/.pullapprove.yml deleted file mode 100644 index 0f56c1e0c..000000000 --- a/.pullapprove.yml +++ /dev/null @@ -1,27 +0,0 @@ -version: 2 - -requirements: - signed_off_by: - required: true - -group_defaults: - required: 2 - approve_by_comment: - enabled: true - approve_regex: '^(Approved|lgtm|LGTM|:shipit:|:star:|:\+1:|:ship:)' - reject_regex: ^Rejected - reset_on_push: - enabled: true - author_approval: - ignored: true - always_pending: - title_regex: ^WIP - explanation: 'Work in progress...' - conditions: - branches: - - master - -groups: - image-spec: - teams: - - image-spec-maintainers From 4dd11f3365e22a50719328b447a170ebd3a06caa Mon Sep 17 00:00:00 2001 From: Vanessa Sochat Date: Wed, 6 Nov 2019 11:13:55 -0500 Subject: [PATCH 46/88] expected type/subtype test for descriptors should have comment that references failure, not success Signed-off-by: Vanessa Sochat --- schema/descriptor_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/schema/descriptor_test.go b/schema/descriptor_test.go index ecdbe52b1..c6b610779 100644 --- a/schema/descriptor_test.go +++ b/schema/descriptor_test.go @@ -97,7 +97,7 @@ func TestDescriptor(t *testing.T) { fail: false, }, - // expected success: mediaType does not match pattern (type too long) + // expected failure: mediaType does not match pattern (type too long) { descriptor: ` { @@ -109,7 +109,7 @@ func TestDescriptor(t *testing.T) { fail: true, }, - // expected success: mediaType does not match pattern (subtype too long) + // expected failure: mediaType does not match pattern (subtype too long) { descriptor: ` { From 908f9e6218370b7d5eaf3cd58549fc9fe7d96c3d Mon Sep 17 00:00:00 2001 From: Chris Price Date: Mon, 6 May 2019 05:57:33 -0700 Subject: [PATCH 47/88] Add CPU variant to image config This commit adds the CPU variant to the image config type. It also refactors the image index specification to isolate the platform variant specifications, allowing a reference from the config spec. The go specs are updated to include the new field in the v1.Image struct, and tests are updated to include the new field. Signed-off-by: Chris Price --- config.md | 5 +++++ conversion.md | 14 ++++++++------ image-index.md | 20 +++++++++++--------- schema/config-schema.json | 3 +++ schema/config_test.go | 20 +++++++++++++++++++- schema/validator.go | 29 ++++++++++++++++++++++++++++- specs-go/v1/config.go | 3 +++ 7 files changed, 77 insertions(+), 17 deletions(-) diff --git a/config.md b/config.md index 049614adc..4f33fdfbc 100644 --- a/config.md +++ b/config.md @@ -105,6 +105,11 @@ Note: Any OPTIONAL field MAY also be set to null, which is equivalent to being a The CPU architecture which the binaries in this image are built to run on. Configurations SHOULD use, and implementations SHOULD understand, values listed in the Go Language document for [`GOARCH`][go-environment]. +- **variant** *string*, OPTIONAL + + The variant of the specified CPU architecture. + Configurations SHOULD use, and implementations SHOULD understand, `variant` values listed in the [Platform Variants](image-index.md#platform-variants) table. + - **os** *string*, REQUIRED The name of the operating system which the image is built to run on. diff --git a/conversion.md b/conversion.md index 5420dbe42..3e5ed06c0 100644 --- a/conversion.md +++ b/conversion.md @@ -46,17 +46,19 @@ These fields all affect the `annotations` of the runtime configuration, and are | ------------------- | --------------- | ----- | | `os` | `annotations` | 1,2 | | `architecture` | `annotations` | 1,3 | -| `author` | `annotations` | 1,4 | -| `created` | `annotations` | 1,5 | +| `variant` | `annotations` | 1,4 | +| `author` | `annotations` | 1,5 | +| `created` | `annotations` | 1,6 | | `Config.Labels` | `annotations` | | -| `Config.StopSignal` | `annotations` | 1,6 | +| `Config.StopSignal` | `annotations` | 1,7 | 1. If a user has explicitly specified this annotation with `Config.Labels`, then the value specified in this field takes lower [precedence](#annotations) and the converter MUST instead use the value from `Config.Labels`. 2. The value of this field MUST be set as the value of `org.opencontainers.image.os` in `annotations`. 3. The value of this field MUST be set as the value of `org.opencontainers.image.architecture` in `annotations`. -4. The value of this field MUST be set as the value of `org.opencontainers.image.author` in `annotations`. -5. The value of this field MUST be set as the value of `org.opencontainers.image.created` in `annotations`. -6. The value of this field MUST be set as the value of `org.opencontainers.image.stopSignal` in `annotations`. +4. The value of this field MUST be set as the value of `org.opencontainers.image.variant` in `annotations`. +5. The value of this field MUST be set as the value of `org.opencontainers.image.author` in `annotations`. +6. The value of this field MUST be set as the value of `org.opencontainers.image.created` in `annotations`. +7. The value of this field MUST be set as the value of `org.opencontainers.image.stopSignal` in `annotations`. ## Parsed Fields diff --git a/image-index.md b/image-index.md index 5e6bdde95..10e42ef30 100644 --- a/image-index.md +++ b/image-index.md @@ -77,15 +77,7 @@ For the media type(s) that this document is compatible with, see the [matrix][ma - **`variant`** *string* This OPTIONAL property specifies the variant of the CPU. - Image indexes SHOULD use, and implementations SHOULD understand, values listed in the following table. - When the variant of the CPU is not listed in the table, values are implementation-defined and SHOULD be submitted to this specification for standardization. - - | ISA/ABI | `architecture` | `variant` | - |-----------------|----------------|-------------| - | ARM 32-bit, v6 | `arm` | `v6` | - | ARM 32-bit, v7 | `arm` | `v7` | - | ARM 32-bit, v8 | `arm` | `v8` | - | ARM 64-bit, v8 | `arm64` | `v8` | + Image indexes SHOULD use, and implementations SHOULD understand, `variant` values listed in the [Platform Variants](#platform-variants) table. - **`features`** *array of strings* @@ -98,6 +90,16 @@ For the media type(s) that this document is compatible with, see the [matrix][ma See [Pre-Defined Annotation Keys](annotations.md#pre-defined-annotation-keys). +## Platform Variants +When the variant of the CPU is not listed in the table, values are implementation-defined and SHOULD be submitted to this specification for standardization. + +| ISA/ABI | `architecture` | `variant` | +|-----------------|----------------|-------------| +| ARM 32-bit, v6 | `arm` | `v6` | +| ARM 32-bit, v7 | `arm` | `v7` | +| ARM 32-bit, v8 | `arm` | `v8` | +| ARM 64-bit, v8 | `arm64` | `v8` | + ## Example Image Index *Example showing a simple image index pointing to image manifests for two platforms:* diff --git a/schema/config-schema.json b/schema/config-schema.json index 15bccd04e..58e0c849b 100644 --- a/schema/config-schema.json +++ b/schema/config-schema.json @@ -14,6 +14,9 @@ "architecture": { "type": "string" }, + "variant": { + "type": "string" + }, "os": { "type": "string" }, diff --git a/schema/config_test.go b/schema/config_test.go index 28b872870..9daa41e5c 100644 --- a/schema/config_test.go +++ b/schema/config_test.go @@ -39,6 +39,23 @@ func TestConfig(t *testing.T) { "type": "layers" } } +`, + fail: true, + }, + // expected failure: field "variant" has numeric value, must be string + { + config: ` +{ + "architecture": "arm64", + "variant": 123, + "os": "linux", + "rootfs": { + "diff_ids": [ + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ], + "type": "layers" + } +} `, fail: true, }, @@ -140,7 +157,8 @@ func TestConfig(t *testing.T) { { "created": "2015-10-31T22:22:56.015925234Z", "author": "Alyssa P. Hacker ", - "architecture": "amd64", + "architecture": "arm64", + "variant": "v8", "os": "linux", "config": { "User": "1:1", diff --git a/schema/validator.go b/schema/validator.go index 545ade22d..48c20a999 100644 --- a/schema/validator.go +++ b/schema/validator.go @@ -168,6 +168,7 @@ func validateIndex(r io.Reader) error { } if manifest.Platform != nil { checkPlatform(manifest.Platform.OS, manifest.Platform.Architecture) + checkArchitecture(manifest.Platform.Architecture, manifest.Platform.Variant) } } @@ -189,6 +190,7 @@ func validateConfig(r io.Reader) error { } checkPlatform(header.OS, header.Architecture) + checkArchitecture(header.Architecture, header.Variant) envRegexp := regexp.MustCompile(`^[^=]+=.*$`) for _, e := range header.Config.Env { @@ -200,6 +202,31 @@ func validateConfig(r io.Reader) error { return nil } +func checkArchitecture(Architecture string, Variant string) { + validCombins := map[string][]string{ + "arm": {"v6", "v7", "v8"}, + "arm64": {"v8"}, + "386": {""}, + "amd64": {""}, + "ppc64": {""}, + "ppc64le": {""}, + "mips64": {""}, + "mips64le": {""}, + "s390x": {""}, + } + for arch, variants := range validCombins { + if arch == Architecture { + for _, variant := range variants { + if variant == Variant { + return + } + } + fmt.Printf("warning: combination of architecture %q and variant %q is not valid.\n", Architecture, Variant) + } + } + fmt.Printf("warning: architecture %q is not supported yet.\n", Architecture) +} + func checkPlatform(OS string, Architecture string) { validCombins := map[string][]string{ "android": {"arm"}, @@ -219,7 +246,7 @@ func checkPlatform(OS string, Architecture string) { return } } - fmt.Printf("warning: combination of %q and %q is invalid.\n", OS, Architecture) + fmt.Printf("warning: combination of OS %q and architecture %q is invalid.\n", OS, Architecture) } } fmt.Printf("warning: operating system %q of the bundle is not supported yet.\n", OS) diff --git a/specs-go/v1/config.go b/specs-go/v1/config.go index fe799bd69..486c3cbc7 100644 --- a/specs-go/v1/config.go +++ b/specs-go/v1/config.go @@ -89,6 +89,9 @@ type Image struct { // Architecture is the CPU architecture which the binaries in this image are built to run on. Architecture string `json:"architecture"` + // Variant is the variant of the specified CPU architecture which image binaries are intended to run on. + Variant string `json:"variant,omitempty"` + // OS is the name of the operating system which the image is built to run on. OS string `json:"os"` From e8d6a347523ed991312750d4b82361b35d1a2b12 Mon Sep 17 00:00:00 2001 From: Ashok Pon Kumar Date: Fri, 2 Oct 2020 00:49:46 +0530 Subject: [PATCH 48/88] Add go.mod and pin dependencies Signed-off-by: Ashok Pon Kumar --- specs-go/go.mod | 5 +++++ specs-go/go.sum | 2 ++ 2 files changed, 7 insertions(+) create mode 100644 specs-go/go.mod create mode 100644 specs-go/go.sum diff --git a/specs-go/go.mod b/specs-go/go.mod new file mode 100644 index 000000000..4413134bb --- /dev/null +++ b/specs-go/go.mod @@ -0,0 +1,5 @@ +module github.com/opencontainers/image-spec/specs-go + +go 1.15 + +require github.com/opencontainers/go-digest v1.0.0 diff --git a/specs-go/go.sum b/specs-go/go.sum new file mode 100644 index 000000000..30f45e97f --- /dev/null +++ b/specs-go/go.sum @@ -0,0 +1,2 @@ +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= From df34673e84e3d81727cee4074678c748619770b8 Mon Sep 17 00:00:00 2001 From: Jon Johnson Date: Fri, 12 Mar 2021 15:13:58 -0800 Subject: [PATCH 49/88] Define the data field This should contain an embedded representation of the referenced content, which is useful for avoiding extra hops to access small pieces of content. Signed-off-by: Jon Johnson --- descriptor.md | 17 ++++++++--------- specs-go/v1/descriptor.go | 3 +++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/descriptor.md b/descriptor.md index 2ba672d07..45c1e5347 100644 --- a/descriptor.md +++ b/descriptor.md @@ -41,20 +41,18 @@ The following fields contain the primary properties that constitute a Descriptor - **`annotations`** *string-string map* - This OPTIONAL property contains arbitrary metadata for this descriptor. - This OPTIONAL property MUST use the [annotation rules](annotations.md#rules). + This OPTIONAL property contains arbitrary metadata for this descriptor. + This OPTIONAL property MUST use the [annotation rules](annotations.md#rules). -Descriptors pointing to [`application/vnd.oci.image.manifest.v1+json`](manifest.md) SHOULD include the extended field `platform`, see [Image Index Property Descriptions](image-index.md#image-index-property-descriptions) for details. - -### Reserved +- **`data`** *string* -The following field keys are reserved and MUST NOT be used by other specifications. + This OPTIONAL property contains an embedded representation of the referenced content. + Values MUST conform to the Base 64 encoding, as defined in [RFC 4648][rfc4648-s4]. -- **`data`** *string* +Descriptors pointing to [`application/vnd.oci.image.manifest.v1+json`](manifest.md) SHOULD include the extended field `platform`, see [Image Index Property Descriptions](image-index.md#image-index-property-descriptions) for details. - This key is RESERVED for future versions of the specification. +### Reserved -All other fields may be included in other OCI specifications. Extended _Descriptor_ field additions proposed in other OCI specifications SHOULD first be considered for addition into this specification. ## Digests @@ -179,6 +177,7 @@ In the following example, the descriptor indicates that the referenced manifest [rfc3986]: https://tools.ietf.org/html/rfc3986 [rfc4634-s4.1]: https://tools.ietf.org/html/rfc4634#section-4.1 [rfc4634-s4.2]: https://tools.ietf.org/html/rfc4634#section-4.2 +[rfc4648-s4]: https://tools.ietf.org/html/rfc4648#section-4 [rfc6838]: https://tools.ietf.org/html/rfc6838 [rfc6838-s4.2]: https://tools.ietf.org/html/rfc6838#section-4.2 [rfc7230-s2.7]: https://tools.ietf.org/html/rfc7230#section-2.7 diff --git a/specs-go/v1/descriptor.go b/specs-go/v1/descriptor.go index 6e442a085..c2ff43c4c 100644 --- a/specs-go/v1/descriptor.go +++ b/specs-go/v1/descriptor.go @@ -35,6 +35,9 @@ type Descriptor struct { // Annotations contains arbitrary metadata relating to the targeted content. Annotations map[string]string `json:"annotations,omitempty"` + // Data is an embedding of the targeted content. + Data []byte `json:"data,omitempty"` + // Platform describes the platform which the image in the manifest runs on. // // This should only be used when referring to a manifest. From ab9700dbe7b0f248ece6af03e5a7c239100a141e Mon Sep 17 00:00:00 2001 From: Jon Johnson Date: Wed, 17 Mar 2021 13:58:15 -0700 Subject: [PATCH 50/88] Add Embedded Data section Signed-off-by: Jon Johnson --- descriptor.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/descriptor.md b/descriptor.md index 45c1e5347..aaac73c58 100644 --- a/descriptor.md +++ b/descriptor.md @@ -48,6 +48,8 @@ The following fields contain the primary properties that constitute a Descriptor This OPTIONAL property contains an embedded representation of the referenced content. Values MUST conform to the Base 64 encoding, as defined in [RFC 4648][rfc4648-s4]. + The decoded data MUST be identical to the referenced content and SHOULD be verified against the [`digest`](#digests) and `size` fields. + See [Embedded Content](#embedded-content) for when this is appropriate. Descriptors pointing to [`application/vnd.oci.image.manifest.v1+json`](manifest.md) SHOULD include the extended field `platform`, see [Image Index Property Descriptions](image-index.md#image-index-property-descriptions) for details. @@ -149,6 +151,17 @@ Implementations MAY implement SHA-512 digest verification for use in descriptors When the _algorithm identifier_ is `sha512`, the _encoded_ portion MUST match `/[a-f0-9]{128}/`. Note that `[A-F]` MUST NOT be used here. +## Embedded Content + +In many contexts, such as when downloading content over a network, resolving a descriptor to its content has a measurable fixed "roundtrip" latency cost. +For large blobs, the fixed cost is usually inconsequental, as the majority of time will be spent actually fetching the content. +For very small blobs, the fixed cost will be quite significant. + +Implementations MAY choose to embed small pieces of content directly within a descriptor to avoid roundtrips. + +Implementations SHOULD NOT populate the `data` field in situations where doing so would unexpectedly modify content identifiers. +For example, a registry SHOULD NOT arbitrarily populate `data` fields within uploaded manifests, as that would modify the content address of those manifests. + ## Examples The following example describes a [_Manifest_](manifest.md#image-manifest) with a content identifier of "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270" and a size of 7682 bytes: From 3c028eeee9181b6a67ba7616409fb85d318bd2e6 Mon Sep 17 00:00:00 2001 From: Jon Johnson Date: Thu, 18 Mar 2021 10:38:53 -0700 Subject: [PATCH 51/88] Add note about portability concerns Signed-off-by: Jon Johnson --- descriptor.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/descriptor.md b/descriptor.md index aaac73c58..0aa9d5e74 100644 --- a/descriptor.md +++ b/descriptor.md @@ -155,13 +155,16 @@ Note that `[A-F]` MUST NOT be used here. In many contexts, such as when downloading content over a network, resolving a descriptor to its content has a measurable fixed "roundtrip" latency cost. For large blobs, the fixed cost is usually inconsequental, as the majority of time will be spent actually fetching the content. -For very small blobs, the fixed cost will be quite significant. +For very small blobs, the fixed cost can be quite significant. Implementations MAY choose to embed small pieces of content directly within a descriptor to avoid roundtrips. Implementations SHOULD NOT populate the `data` field in situations where doing so would unexpectedly modify content identifiers. For example, a registry SHOULD NOT arbitrarily populate `data` fields within uploaded manifests, as that would modify the content address of those manifests. +Implementations SHOULD consider limitations of storage systems when deciding whether or not to embed data. +Many implementations will refuse to accept or parse manifests that violate the limitations of their storage systems, so descriptors concerned with portability SHOULD avoid embedding large amounts of data. + ## Examples The following example describes a [_Manifest_](manifest.md#image-manifest) with a content identifier of "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270" and a size of 7682 bytes: From a75401130e7d278a4e9561d6130446f63317106d Mon Sep 17 00:00:00 2001 From: Jon Johnson Date: Thu, 18 Mar 2021 15:08:48 -0700 Subject: [PATCH 52/88] Expand godoc for Data Signed-off-by: Jon Johnson --- specs-go/v1/descriptor.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/specs-go/v1/descriptor.go b/specs-go/v1/descriptor.go index c2ff43c4c..94f19be62 100644 --- a/specs-go/v1/descriptor.go +++ b/specs-go/v1/descriptor.go @@ -35,7 +35,9 @@ type Descriptor struct { // Annotations contains arbitrary metadata relating to the targeted content. Annotations map[string]string `json:"annotations,omitempty"` - // Data is an embedding of the targeted content. + // Data is an embedding of the targeted content. This is encoded as a base64 + // string when marshalled to JSON (automatically, by encoding/json). If + // present, Data can be used directly to avoid fetching the targeted content. Data []byte `json:"data,omitempty"` // Platform describes the platform which the image in the manifest runs on. From a1f010c9e5721f304322066a30cb745d6a01c86a Mon Sep 17 00:00:00 2001 From: Jon Johnson Date: Tue, 6 Apr 2021 10:53:53 -0700 Subject: [PATCH 53/88] Implementations MUST NOT populate data arbitrarily Also add a counterexample. Signed-off-by: Jon Johnson --- descriptor.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/descriptor.md b/descriptor.md index 0aa9d5e74..6054c222d 100644 --- a/descriptor.md +++ b/descriptor.md @@ -159,8 +159,9 @@ For very small blobs, the fixed cost can be quite significant. Implementations MAY choose to embed small pieces of content directly within a descriptor to avoid roundtrips. -Implementations SHOULD NOT populate the `data` field in situations where doing so would unexpectedly modify content identifiers. -For example, a registry SHOULD NOT arbitrarily populate `data` fields within uploaded manifests, as that would modify the content address of those manifests. +Implementations MUST NOT populate the `data` field in situations where doing so would modify existing content identifiers. +For example, a registry MUST NOT arbitrarily populate `data` fields within uploaded manifests, as that would modify the content identifier of those manifests. +In contrast, a client MAY populate the `data` field before uploading a manifest, because the manifest would not yet have a content identifier in the registry. Implementations SHOULD consider limitations of storage systems when deciding whether or not to embed data. Many implementations will refuse to accept or parse manifests that violate the limitations of their storage systems, so descriptors concerned with portability SHOULD avoid embedding large amounts of data. From 574f93dc64e1b4083d26fc8bb7aba45fa506bd54 Mon Sep 17 00:00:00 2001 From: Jon Johnson Date: Thu, 20 May 2021 08:29:59 -0700 Subject: [PATCH 54/88] Clean up portability considerations Also fix typo. Signed-off-by: Jon Johnson --- descriptor.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/descriptor.md b/descriptor.md index 6054c222d..bf3bce1d7 100644 --- a/descriptor.md +++ b/descriptor.md @@ -154,7 +154,7 @@ Note that `[A-F]` MUST NOT be used here. ## Embedded Content In many contexts, such as when downloading content over a network, resolving a descriptor to its content has a measurable fixed "roundtrip" latency cost. -For large blobs, the fixed cost is usually inconsequental, as the majority of time will be spent actually fetching the content. +For large blobs, the fixed cost is usually inconsequential, as the majority of time will be spent actually fetching the content. For very small blobs, the fixed cost can be quite significant. Implementations MAY choose to embed small pieces of content directly within a descriptor to avoid roundtrips. @@ -163,8 +163,7 @@ Implementations MUST NOT populate the `data` field in situations where doing so For example, a registry MUST NOT arbitrarily populate `data` fields within uploaded manifests, as that would modify the content identifier of those manifests. In contrast, a client MAY populate the `data` field before uploading a manifest, because the manifest would not yet have a content identifier in the registry. -Implementations SHOULD consider limitations of storage systems when deciding whether or not to embed data. -Many implementations will refuse to accept or parse manifests that violate the limitations of their storage systems, so descriptors concerned with portability SHOULD avoid embedding large amounts of data. +Implementations SHOULD consider portability when deciding whether to embed data, as some providers are known to refuse to accept or parse manifests that exceed a certain size. ## Examples From e66224d979472fb42ac3944913c88f64a5106032 Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Mon, 12 Jul 2021 13:39:42 -0400 Subject: [PATCH 55/88] Use registry.example.com as example default registry Signed-off-by: Jason Hall --- annotations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/annotations.md b/annotations.md index ead0ce538..907220796 100644 --- a/annotations.md +++ b/annotations.md @@ -45,7 +45,7 @@ This specification defines the following annotation keys, intended for but not l * This SHOULD NOT reference any other images used to generate the contents of the image (e.g., multi-stage Dockerfile builds). * **org.opencontainers.image.base.name** Image reference of the image this image is based on (string) * This SHOULD be image references in the format defined by [distribution/distribution](https://github.com/distribution/distribution/blob/d0deff9cd6c2b8c82c6f3d1c713af51df099d07b/reference/reference.go). - * This SHOULD be a fully qualified reference name, without any assumed default registry. (e.g., `index.docker.io/my-org/my-image:tag` instead of `my-org/my-image:tag`). + * This SHOULD be a fully qualified reference name, without any assumed default registry. (e.g., `registry.example.com/my-org/my-image:tag` instead of `my-org/my-image:tag`). * This SHOULD be the immediate image sharing zero-indexed layers with the image, such as from a Dockerfile `FROM` statement. * This SHOULD NOT reference any other images used to generate the contents of the image (e.g., multi-stage Dockerfile builds). * If the `image.base.name` annotation is specified, the `image.base.digest` annotation SHOULD be the digest of the manifest referenced by the `image.ref.name` annotation. From f32720f8368ac29d66683df6a8a7e173b92de916 Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Wed, 30 Sep 2020 13:17:39 -0700 Subject: [PATCH 56/88] Embedded other platform fields in image spec This makes sure that an index can be generated from an image spec. `OSVersion` in particular is fairly important for Windows since Windows can only run containers for the OS version it was built for, and currently the only way to reliably get this is from the index. Signed-off-by: Brian Goff --- config.md | 23 ++++++++++++++++++----- conversion.md | 16 ++++++++++------ image-index.md | 1 + schema/config-schema.json | 11 ++++++++++- schema/fs.go | 36 ++++++++++++++++++------------------ schema/validator.go | 8 ++++---- specs-go/v1/config.go | 8 ++++++++ 7 files changed, 69 insertions(+), 34 deletions(-) diff --git a/config.md b/config.md index 4f33fdfbc..ffba65ac4 100644 --- a/config.md +++ b/config.md @@ -105,16 +105,29 @@ Note: Any OPTIONAL field MAY also be set to null, which is equivalent to being a The CPU architecture which the binaries in this image are built to run on. Configurations SHOULD use, and implementations SHOULD understand, values listed in the Go Language document for [`GOARCH`][go-environment]. -- **variant** *string*, OPTIONAL - - The variant of the specified CPU architecture. - Configurations SHOULD use, and implementations SHOULD understand, `variant` values listed in the [Platform Variants](image-index.md#platform-variants) table. - - **os** *string*, REQUIRED The name of the operating system which the image is built to run on. Configurations SHOULD use, and implementations SHOULD understand, values listed in the Go Language document for [`GOOS`][go-environment]. +- **os.version** *string*, OPTIONAL + + This OPTIONAL property specifies the version of the operating system targeted by the referenced blob. + Implementations MAY refuse to use manifests where `os.version` is not known to work with the host OS version. + Valid values are implementation-defined. e.g. `10.0.14393.1066` on `windows`. + +- **os.features** *array of strings*, OPTIONAL + + This OPTIONAL property specifies an array of strings, each specifying a mandatory OS feature. + When `os` is `windows`, image indexes SHOULD use, and implementations SHOULD understand the following values: + + - `win32k`: image requires `win32k.sys` on the host (Note: `win32k.sys` is missing on Nano Server) + +- **variant** *string*, OPTIONAL + + The variant of the specified CPU architecture. + Configurations SHOULD use, and implementations SHOULD understand, `variant` values listed in the [Platform Variants](image-index.md#platform-variants) table. + - **config** *object*, OPTIONAL The execution parameters which SHOULD be used as a base when running a container using the image. diff --git a/conversion.md b/conversion.md index 3e5ed06c0..d406baedc 100644 --- a/conversion.md +++ b/conversion.md @@ -47,18 +47,22 @@ These fields all affect the `annotations` of the runtime configuration, and are | `os` | `annotations` | 1,2 | | `architecture` | `annotations` | 1,3 | | `variant` | `annotations` | 1,4 | -| `author` | `annotations` | 1,5 | -| `created` | `annotations` | 1,6 | +| `os.version` | `annotations` | 1,5 | +| `os.features` | `annotations` | 1,6 | +| `author` | `annotations` | 1,7 | +| `created` | `annotations` | 1,8 | | `Config.Labels` | `annotations` | | -| `Config.StopSignal` | `annotations` | 1,7 | +| `Config.StopSignal` | `annotations` | 1,9 | 1. If a user has explicitly specified this annotation with `Config.Labels`, then the value specified in this field takes lower [precedence](#annotations) and the converter MUST instead use the value from `Config.Labels`. 2. The value of this field MUST be set as the value of `org.opencontainers.image.os` in `annotations`. 3. The value of this field MUST be set as the value of `org.opencontainers.image.architecture` in `annotations`. 4. The value of this field MUST be set as the value of `org.opencontainers.image.variant` in `annotations`. -5. The value of this field MUST be set as the value of `org.opencontainers.image.author` in `annotations`. -6. The value of this field MUST be set as the value of `org.opencontainers.image.created` in `annotations`. -7. The value of this field MUST be set as the value of `org.opencontainers.image.stopSignal` in `annotations`. +5. The value of this field MUST be set as the value of `org.opencontainers.image.os.version` in `annotations`. +6. The value of this field MUST be set as the value of `org.opencontainers.image.os.features` in `annotations`. +7. The value of this field MUST be set as the value of `org.opencontainers.image.author` in `annotations`. +8. The value of this field MUST be set as the value of `org.opencontainers.image.created` in `annotations`. +9. The value of this field MUST be set as the value of `org.opencontainers.image.stopSignal` in `annotations`. ## Parsed Fields diff --git a/image-index.md b/image-index.md index 10e42ef30..c8e6e561a 100644 --- a/image-index.md +++ b/image-index.md @@ -91,6 +91,7 @@ For the media type(s) that this document is compatible with, see the [matrix][ma See [Pre-Defined Annotation Keys](annotations.md#pre-defined-annotation-keys). ## Platform Variants + When the variant of the CPU is not listed in the table, values are implementation-defined and SHOULD be submitted to this specification for standardization. | ISA/ABI | `architecture` | `variant` | diff --git a/schema/config-schema.json b/schema/config-schema.json index 58e0c849b..9b3be97c5 100644 --- a/schema/config-schema.json +++ b/schema/config-schema.json @@ -15,11 +15,20 @@ "type": "string" }, "variant": { - "type": "string" + "type": "string" }, "os": { "type": "string" }, + "os.version": { + "type": "string" + }, + "os.features": { + "type": "array", + "items": { + "type": "string" + } + }, "config": { "type": "object", "properties": { diff --git a/schema/fs.go b/schema/fs.go index ca5bbe95a..9c6b29415 100644 --- a/schema/fs.go +++ b/schema/fs.go @@ -226,19 +226,19 @@ var _escData = map[string]*_escFile{ "/config-schema.json": { name: "config-schema.json", local: "config-schema.json", - size: 2771, - modtime: 1619819526, + size: 2969, + modtime: 1625865937, compressed: ` -H4sIAAAAAAAC/+RWQY/TPBC951dE2T22m+/wnXot3JCKVAGHFarcZNLOEnvMeIKIUP87itNCkjpp6apc -OEUaz7z35nns+EcUx0kOLmO0gmSSRZysLJglGVFogOMlmQJ38dpChgVmymfNmrJHl+1Bq6ZkL2IXafri -yMzb6BPxLs1ZFTL/7/+0jT20dZifStwiTcmCyU5szpe12SlqtYM08/xtpdQWmlravkAmbcwyWWBBcMki -btqJ4yRjUAL5r0Cn1AmjaeF8vCDWSpqVXAnMBTUkfu3QpiSqkj3xBFQ/m7M9CmRSMVxbQ+7azKMXgeyO -Iz4ecMXHPzjgXmSEscPqc95+t+Qgf08sblj/yFB4A6FwT80IPKQ5FGiwGRWXamXXHnnVagzjm29jshSz -qpNZdwkF9FDGRCNxfBghFa4toZEhNxlYNT099wj6dJMSJ2RekNqXO5A8qcJUZdlH6uJ8Dlqw1Pk/2/tH -KisN7sb+b536e3f1ifgLmt0bvOmcv1NbKO9tyTqw8fe0ZC1k17gzqrzakqj7PV2/TCSFe831m2NRbDB3 -f/+uO+ZPdd+jBVPpsx1PSlUDuyTseDRgTRi+Vsj+P/wc8GCoLuoinjzfoxPiOmR636yAUWPbM75BwbfD -Zbem3hGB8T5/U1ze1FlA42ZbvwKDtIazP98fAIC2Um/8RIyDbIlKUGZkPvunLDoynM9N/1n1+9nUP5dR -MzuH6GcAAAD//0pj2wvTCgAA +H4sIAAAAAAAC/+RWsW7bQAzd9RWCkjGJOnTymnYrkAJG2yEojLNE2Ux1xyuPMioU/vdCJzvx2SfZteEu +XSnyvcdHSuLvJE2zElzBaAXJZJM0e7JgHsmIQgOcPpKpcJFOLRRYYaF81l1XduuKJWjVlSxF7CTPXxyZ ++z76QLzIS1aV3L97n/exm74Oy22Jm+Q5WTDFls35sj47R60WkBeev6+U1kJXS/MXKKSPWSYLLAgum6Rd +O2maFQxKoHwN7JQ6YTQ9nI9XxFpJ96RUAveCGjL/bN2nZKqRJfEIVJjNxRIFCmkYTq1ZKUZl5NR0cqdn +PqyAXT/WUysqUJ34KIliVu2bdyigd/MGwNN0HZBsJhrB35mrj0dm6+NfHHAQGWR+ZfU5H39ZclB+Jha3 +X3/LUPk1gMo9dIt8k5dQocFu4V2ulZ165KdeYxzfrIZkhdYN2DfayNbGQ1Lh1hIGG9RP08BT19NzQBDS +jUockXlEaih3T/KoCtPUdYi0i/M9asGjLv/b3r9S3WhwZ/Z/7tZfu6tvxD/QLD7gWe/5JzWH+tqWTCOD +v6YlUyE7xYVR9cmWRD+/TCSVu+TzW2JVzbB0//5bt8kf6z6gBdPog4lntWqBXRZ3PNljzRh+Nsj+mniO +eLCvLtlF3Hq+RCfE7WX/1L3xDA8oegEdd2vsGoqs9+FldHyodxGNs3l7AQZpDQd/vr8AAG2lnfmNGAaZ +E9WgzMB+hm9ZsmE43JvwOHy75sL3Mul2Z538CQAA//9C38scmQsAAA== `, }, @@ -246,7 +246,7 @@ MzuH6GcAAAD//0pj2wvTCgAA name: "content-descriptor.json", local: "content-descriptor.json", size: 1079, - modtime: 1619819526, + modtime: 1625865919, compressed: ` H4sIAAAAAAAC/5yTsW7cMAyGdz8F4QTIkos6BB2MIEu7d2i3ooNOok5Mz5JK8RBci7x7QcvX2G2RILfZ xP+Rn2zqVwfQe6yOqQjl1A/QfyqYPuQklhIy6BMmgY9zKDN8LugokLMTca0tLquLOFrFo0gZjHmoOW1a @@ -262,7 +262,7 @@ dIbaEm+G3WzZM/44EKMqff37riz3dL0uHcC37qn7HQAA//9DKIMKNwQAAA== name: "defs-descriptor.json", local: "defs-descriptor.json", size: 844, - modtime: 1619819526, + modtime: 1625865919, compressed: ` H4sIAAAAAAAC/5SST2/TTBDG7/kU826jt0DiOHBAqlWKKnrnUE6t0mi6O7aneP9od6IqVPnuaG03SYtA cLC1+2jmefwbz9MEQBlKOnIQ9k5VoK6oZsf5liBgFNabDiOIh6+B3BfvBNlRhKuxzUe4DqS5Zo29x3ww @@ -279,7 +279,7 @@ TAMAAA== name: "defs.json", local: "defs.json", size: 1670, - modtime: 1619819526, + modtime: 1625865903, compressed: ` H4sIAAAAAAAC/7STza6bMBCF9zzFyO2S9oJtbGDb7hMpy6oLSiaJq2AjY6RWEe9e8RNChFuJKneRgGc8 3zmeMbcAgByxKa2qnTKa5EC+4klp1a8aaBs8grtY054vpnXgLgi7GvUXo12hNFo41FiqkyqLoTwceTOA @@ -295,7 +295,7 @@ fIvD7in0ryMEy+fK1G6UfmdTE+tvpoL+1wV/AgAA//96IpqyhgYAAA== name: "image-index-schema.json", local: "image-index-schema.json", size: 2993, - modtime: 1619819526, + modtime: 1625865919, compressed: ` H4sIAAAAAAAC/6yWz0/jOhDH7/0rRgGJC5CnJ/QOFeLy9sJpD4v2suJg7EkybGNnx1Ogu+r/vrJN2qRJ C4Te2rHnO5/vxL/+zAAyg14zNULOZnPIvjZo/3dWFFlkuK1ViXBrDb7AtwY1FaRVnHoeck+9rrBWIa8S @@ -316,7 +316,7 @@ VmZjL8HOE24GcD9bz/4GAAD//yCnv52xCwAA name: "image-layout-schema.json", local: "image-layout-schema.json", size: 439, - modtime: 1619819526, + modtime: 1625865903, compressed: ` H4sIAAAAAAAC/2yPQUvEMBCF7/0VQ/Sg4DYVPOW6pwVhD4IX8VDTaTvLNonJVFik/12SaRXRU5g38+W9 91kBqA6TjRSYvFMG1DGg23vHLTmMcJjaAeGxvfiZ4cmOOLXqLlPXSQYDamQORutT8m4nau3joLvY9rxr @@ -330,7 +330,7 @@ HrRoV8JRtyHJaO0DOruZpYLJtaZsrM/FWEi+BMysfzuhXbUQfcDIhEkZyG2yQyYl8TPGJLVk97fth1yA name: "image-manifest-schema.json", local: "image-manifest-schema.json", size: 921, - modtime: 1619819526, + modtime: 1625865903, compressed: ` H4sIAAAAAAAC/5ySMW8iMRCF+/0VI0MJ+O501bZXUZxSJEoTpXB2x7uDWNsZmygo4r9HtnHAkCKifTvv zTdv/dEAiB59x+QCWSNaEHcOzT9rgiKDDOtJDQj/lSGNPsC9w440dSpNL6J97rsRJxWtYwiulXLjrVlm diff --git a/schema/validator.go b/schema/validator.go index 48c20a999..8cd9ecfc3 100644 --- a/schema/validator.go +++ b/schema/validator.go @@ -23,7 +23,7 @@ import ( "regexp" digest "github.com/opencontainers/go-digest" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" "github.com/pkg/errors" "github.com/xeipuuv/gojsonschema" ) @@ -204,8 +204,8 @@ func validateConfig(r io.Reader) error { func checkArchitecture(Architecture string, Variant string) { validCombins := map[string][]string{ - "arm": {"v6", "v7", "v8"}, - "arm64": {"v8"}, + "arm": {"", "v6", "v7", "v8"}, + "arm64": {"", "v8"}, "386": {""}, "amd64": {""}, "ppc64": {""}, @@ -246,7 +246,7 @@ func checkPlatform(OS string, Architecture string) { return } } - fmt.Printf("warning: combination of OS %q and architecture %q is invalid.\n", OS, Architecture) + fmt.Printf("warning: combination of os %q and architecture %q is invalid.\n", OS, Architecture) } } fmt.Printf("warning: operating system %q of the bundle is not supported yet.\n", OS) diff --git a/specs-go/v1/config.go b/specs-go/v1/config.go index 486c3cbc7..ffff4b6d1 100644 --- a/specs-go/v1/config.go +++ b/specs-go/v1/config.go @@ -95,6 +95,14 @@ type Image struct { // OS is the name of the operating system which the image is built to run on. OS string `json:"os"` + // OSVersion is an optional field specifying the operating system + // version, for example on Windows `10.0.14393.1066`. + OSVersion string `json:"os.version,omitempty"` + + // OSFeatures is an optional field specifying an array of strings, + // each listing a required OS feature (for example on Windows `win32k`). + OSFeatures []string `json:"os.features,omitempty"` + // Config defines the execution parameters which should be used as a base when running a container using the image. Config ImageConfig `json:"config,omitempty"` From f6f47b80c571fd0ca77c20926dd6fc96a0b9bc2a Mon Sep 17 00:00:00 2001 From: Jon Johnson Date: Tue, 10 Aug 2021 11:38:13 -0700 Subject: [PATCH 57/88] Scope data verification to content consumers While registries might want to verify the data field, we shouldn't rely on it, as many registries are unaware of this field. On the other hand, clients SHOULD verify the content before consuming it. Signed-off-by: Jon Johnson --- descriptor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/descriptor.md b/descriptor.md index bf3bce1d7..8c1277a44 100644 --- a/descriptor.md +++ b/descriptor.md @@ -48,7 +48,7 @@ The following fields contain the primary properties that constitute a Descriptor This OPTIONAL property contains an embedded representation of the referenced content. Values MUST conform to the Base 64 encoding, as defined in [RFC 4648][rfc4648-s4]. - The decoded data MUST be identical to the referenced content and SHOULD be verified against the [`digest`](#digests) and `size` fields. + The decoded data MUST be identical to the referenced content and SHOULD be verified against the [`digest`](#digests) and `size` fields by content consumers. See [Embedded Content](#embedded-content) for when this is appropriate. Descriptors pointing to [`application/vnd.oci.image.manifest.v1+json`](manifest.md) SHOULD include the extended field `platform`, see [Image Index Property Descriptions](image-index.md#image-index-property-descriptions) for details. From 125b74eabde580bcc65f11f8af7752a26df2148c Mon Sep 17 00:00:00 2001 From: Akihiro Suda Date: Wed, 23 Dec 2020 21:31:14 +0900 Subject: [PATCH 58/88] media-types.md: clarify differences from Docker media types OCI media types are slightly different from Docker ones, e.g., Docker manifests must have `.mediaType` field while OCI may not have. Also, OCI descriptors may have `.annotations` while Docker may not. Also updates to compare the spec with Docker Image Spec v1.2, not v1.0. OCI Image Spec v1 is more akin to Docker Image Spec v1.2 rather than v1.0, which lacked content addressability. See also https://github.com/moby/moby/blob/v20.10.1/image/spec/README.md for differencces between Docker Image Spec v1.2 and v1.0. Signed-off-by: Akihiro Suda --- config.md | 16 ++++++++++++++++ media-types.md | 23 +++++++++++++++++++---- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/config.md b/config.md index ffba65ac4..4371d5d28 100644 --- a/config.md +++ b/config.md @@ -183,6 +183,22 @@ Note: Any OPTIONAL field MAY also be set to null, which is equivalent to being a The field contains the system call signal that will be sent to the container to exit. The signal can be a signal name in the format `SIGNAME`, for instance `SIGKILL` or `SIGRTMIN+3`. + - **Memory** *integer*, OPTIONAL + + This property is *reserved* for use, to [maintain compatibility](media-types.md#compatibility-matrix). + + - **MemorySwap** *integer*, OPTIONAL + + This property is *reserved* for use, to [maintain compatibility](media-types.md#compatibility-matrix). + + - **CpuShares** *integer*, OPTIONAL + + This property is *reserved* for use, to [maintain compatibility](media-types.md#compatibility-matrix). + + - **Healthcheck** *object*, OPTIONAL + + This property is *reserved* for use, to [maintain compatibility](media-types.md#compatibility-matrix). + - **rootfs** *object*, REQUIRED The rootfs key references the layer content addresses used by the image. diff --git a/media-types.md b/media-types.md index b9a08246c..c41a4a73f 100644 --- a/media-types.md +++ b/media-types.md @@ -38,25 +38,40 @@ This section shows where the OCI Image Specification is compatible with formats **Similar/related schema** -- [application/vnd.docker.distribution.manifest.list.v2+json](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) - mediaType is different +- [application/vnd.docker.distribution.manifest.list.v2+json](https://github.com/distribution/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) + - `.mediaType`: only present in Docker, and reserved in OCI + - `.annotations`: only present in OCI + - `.[]manifests.annotations`: only present in OCI + - `.[]manifests.urls`: only present in OCI ### application/vnd.oci.image.manifest.v1+json **Similar/related schema** -- [application/vnd.docker.distribution.manifest.v2+json](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#image-manifest-field-descriptions) +- [application/vnd.docker.distribution.manifest.v2+json](https://github.com/distribution/distribution/blob/master/docs/spec/manifest-v2-2.md#image-manifest-field-descriptions) + - `.mediaType`: only present in Docker, and reserved in OCI + - `.annotations`: only present in OCI + - `.config.annotations`: only present in OCI + - `.config.urls`: only present in OCI + - `.[]layers.annotations`: only present in OCI ### application/vnd.oci.image.layer.v1.tar+gzip **Interchangeable and fully compatible mime-types** -- [application/vnd.docker.image.rootfs.diff.tar.gzip](https://github.com/docker/docker/blob/master/image/spec/v1.md#creating-an-image-filesystem-changeset) +- [application/vnd.docker.image.rootfs.diff.tar.gzip](https://github.com/moby/moby/blob/v20.10.8/image/spec/v1.2.md#creating-an-image-filesystem-changeset) ### application/vnd.oci.image.config.v1+json **Similar/related schema** -- [application/vnd.docker.container.image.v1+json](https://github.com/docker/docker/blob/master/image/spec/v1.md#image-json-description) +- [application/vnd.docker.container.image.v1+json](https://github.com/moby/moby/blob/v20.10.8/image/spec/v1.2.md#image-json-description) (Docker Image Spec v1.2) + - `.config.Memory`: only present in Docker, and reserved in OCI + - `.config.MemorySwap`: only present in Docker, and reserved in OCI + - `.config.CpuShares`: only present in Docker, and reserved in OCI + - `.config.Healthcheck`: only present in Docker, and reserved in OCI + +`.config.StopSignal` and `.config.Labels` are accidentally undocumented in Docker Image Spec v1.2, but these fields are not OCI-specific concepts. ## Relations From 971af5c574332db081e3863a9c4810d162423505 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Petazzoni?= Date: Wed, 13 Oct 2021 22:08:15 +0200 Subject: [PATCH 59/88] Fix very minor oversight in config example MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #872 Signed-off-by: Jérôme Petazzoni --- config.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config.md b/config.md index 4371d5d28..4306c82e9 100644 --- a/config.md +++ b/config.md @@ -298,6 +298,10 @@ Here is an example image configuration JSON document: "created": "2015-10-31T22:22:55.613815829Z", "created_by": "/bin/sh -c #(nop) CMD [\"sh\"]", "empty_layer": true + }, + { + "created": "2015-10-31T22:22:56.329850019Z", + "created_by": "/bin/sh -c apk add curl" } ] } From 5111f2c4604c5bed29f50df231581e2fbc98d872 Mon Sep 17 00:00:00 2001 From: wyckster Date: Sat, 9 Oct 2021 00:12:50 -0400 Subject: [PATCH 60/88] Minor spelling correction Fixed a minor typo / spelling mistake. Signed-off-by: wyckster --- descriptor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/descriptor.md b/descriptor.md index 8c1277a44..3e287604b 100644 --- a/descriptor.md +++ b/descriptor.md @@ -145,7 +145,7 @@ Note that `[A-F]` MUST NOT be used here. #### SHA-512 -[SHA-512][rfc4634-s4.2] is a collision-resistant hash function which [may be more perfomant][sha256-vs-sha512] than [SHA-256](#sha-256) on some CPUs. +[SHA-512][rfc4634-s4.2] is a collision-resistant hash function which [may be more performant][sha256-vs-sha512] than [SHA-256](#sha-256) on some CPUs. Implementations MAY implement SHA-512 digest verification for use in descriptors. When the _algorithm identifier_ is `sha512`, the _encoded_ portion MUST match `/[a-f0-9]{128}/`. From 543351edb8c4da48346ef7be1c5df8e16b9f5751 Mon Sep 17 00:00:00 2001 From: Steve Lasker Date: Wed, 27 Oct 2021 10:17:20 -0700 Subject: [PATCH 61/88] Reflect docker dontation of distribution to CNCF Signed-off-by: Steve Lasker --- implementations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/implementations.md b/implementations.md index 31d8279e1..2dcf2c707 100644 --- a/implementations.md +++ b/implementations.md @@ -9,7 +9,7 @@ Projects or Companies currently adopting the OCI Image Specification * [Mesos plans](https://issues.apache.org/jira/browse/MESOS-5011) ([design doc](https://docs.google.com/document/d/1Pus7D-inIBoLSIPyu3rl_apxvUhtp3rp0_b0Ttr2Xww/edit#heading=h.hrvk2wboog4p)) * [Docker](https://github.com/docker) - [docker/docker (`docker save/load` WIP)](https://github.com/docker/docker/pull/26369) - - [docker/distribution (registry PR)](https://github.com/docker/distribution/pull/2076) + - [distribution/distribution (registry PR)](https://github.com/distribution/distribution/pull/2076) * [containerd/containerd](https://github.com/containerd/containerd) * [Containers](https://github.com/containers/) - [containers/build](https://github.com/containers/build) From 708fd9bf10ffde63ee7d65f2d8d808c9d6626ccd Mon Sep 17 00:00:00 2001 From: Steve Lasker Date: Wed, 27 Oct 2021 12:46:49 -0700 Subject: [PATCH 62/88] Adding ACR to implementations Signed-off-by: Steve Lasker --- implementations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/implementations.md b/implementations.md index 2dcf2c707..786075cbe 100644 --- a/implementations.md +++ b/implementations.md @@ -4,6 +4,7 @@ Projects or Companies currently adopting the OCI Image Specification * [projectatomic/skopeo](https://github.com/projectatomic/skopeo) * [Amazon Elastic Container Registry (ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-manifest-formats.html) ([announcement](https://aws.amazon.com/about-aws/whats-new/2017/01/amazon-ecr-supports-docker-image-manifest-v2-schema-2/)) +* [Azure Container Registry (ACR)](https://docs.microsoft.com/azure/container-registry/container-registry-image-formats#oci-images) * [openSUSE/umoci](https://github.com/openSUSE/umoci) * [cloudfoundry/grootfs](https://github.com/cloudfoundry/grootfs) ([source](https://github.com/cloudfoundry/grootfs/blob/c3da26e1e463b51be1add289032f3dca6698b335/fetcher/remote/docker_src.go)) * [Mesos plans](https://issues.apache.org/jira/browse/MESOS-5011) ([design doc](https://docs.google.com/document/d/1Pus7D-inIBoLSIPyu3rl_apxvUhtp3rp0_b0Ttr2Xww/edit#heading=h.hrvk2wboog4p)) From 1e98be76b62627a922dece460bf9375c12113897 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Thu, 28 Oct 2021 14:05:29 -0400 Subject: [PATCH 63/88] media-types: `.mediaType` is available in both OCI and Docker Signed-off-by: Vincent Batts --- media-types.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/media-types.md b/media-types.md index c41a4a73f..aa0b464b3 100644 --- a/media-types.md +++ b/media-types.md @@ -39,7 +39,6 @@ This section shows where the OCI Image Specification is compatible with formats **Similar/related schema** - [application/vnd.docker.distribution.manifest.list.v2+json](https://github.com/distribution/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) - - `.mediaType`: only present in Docker, and reserved in OCI - `.annotations`: only present in OCI - `.[]manifests.annotations`: only present in OCI - `.[]manifests.urls`: only present in OCI @@ -49,7 +48,6 @@ This section shows where the OCI Image Specification is compatible with formats **Similar/related schema** - [application/vnd.docker.distribution.manifest.v2+json](https://github.com/distribution/distribution/blob/master/docs/spec/manifest-v2-2.md#image-manifest-field-descriptions) - - `.mediaType`: only present in Docker, and reserved in OCI - `.annotations`: only present in OCI - `.config.annotations`: only present in OCI - `.config.urls`: only present in OCI From 697697fa24095d10700a66da8269045e8c9686b5 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Wed, 24 Nov 2021 00:02:36 -0500 Subject: [PATCH 64/88] github: bring forward the versions of golang tested/built with Signed-off-by: Vincent Batts --- .github/workflows/docs-and-linting.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs-and-linting.yml b/.github/workflows/docs-and-linting.yml index 30be61e3a..2e958caa9 100644 --- a/.github/workflows/docs-and-linting.yml +++ b/.github/workflows/docs-and-linting.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - go: ['1.10', '1.11', '1.12'] + go: ['1.15', '1.16', '1.17'] name: Documentation and Linting steps: From 038579f521ecc77a515eeefd1affe0d291f385a6 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Wed, 24 Nov 2021 00:06:23 -0500 Subject: [PATCH 65/88] Makefile: stale installation of glide was failing Signed-off-by: Vincent Batts --- Makefile | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Makefile b/Makefile index edef0a100..80ffad5b3 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ DOC_FILES := \ FIGURE_FILES := \ img/media-types.png -TOOLS := esc gitvalidation glide glide-vc +TOOLS := esc gitvalidation default: check-license lint test @@ -120,12 +120,6 @@ install.tools: $(TOOLS:%=.install.%) .install.gitvalidation: go get -u github.com/vbatts/git-validation -.install.glide: - go get -u github.com/Masterminds/glide - -.install.glide-vc: - go get -u github.com/sgotti/glide-vc - clean: rm -rf *~ $(OUTPUT_DIRNAME) header.html From fa8c02cf0d92a644ff5dd59f80db7c56f96526c7 Mon Sep 17 00:00:00 2001 From: Josh Dolitsky Date: Thu, 2 Dec 2021 13:15:19 -0600 Subject: [PATCH 66/88] Remove unneeded docker pull of pandoc image Signed-off-by: Josh Dolitsky --- .github/workflows/docs-and-linting.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/docs-and-linting.yml b/.github/workflows/docs-and-linting.yml index 2e958caa9..e8829863b 100644 --- a/.github/workflows/docs-and-linting.yml +++ b/.github/workflows/docs-and-linting.yml @@ -28,7 +28,6 @@ jobs: GOPATH: /home/runner/work/image-spec/image-spec/go run: | export PATH=$GOPATH/bin:$PATH - docker pull quay.io/oci/pandoc:1.17.0.3-2.fc25.x86_64 cd go/src/github.com/opencontainers/image-spec make install.tools go get -u github.com/alecthomas/gometalinter From 0b3406a2966841bec76511f2af2e68acd407fa59 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Thu, 2 Dec 2021 14:28:39 -0500 Subject: [PATCH 67/88] go: have the go.mod at top-level Closes #810 Signed-off-by: Vincent Batts --- go.mod | 11 +++++++++++ go.sum | 19 +++++++++++++++++++ specs-go/go.mod | 5 ----- specs-go/go.sum | 2 -- 4 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 go.mod create mode 100644 go.sum delete mode 100644 specs-go/go.mod delete mode 100644 specs-go/go.sum diff --git a/go.mod b/go.mod new file mode 100644 index 000000000..06049f232 --- /dev/null +++ b/go.mod @@ -0,0 +1,11 @@ +module github.com/opencontainers/image-spec + +go 1.11 + +require ( + github.com/opencontainers/go-digest v1.0.0 + github.com/pkg/errors v0.9.1 + github.com/russross/blackfriday v1.6.0 + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 + github.com/xeipuuv/gojsonschema v1.2.0 +) diff --git a/go.sum b/go.sum new file mode 100644 index 000000000..5bf8fb578 --- /dev/null +++ b/go.sum @@ -0,0 +1,19 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= +github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= diff --git a/specs-go/go.mod b/specs-go/go.mod deleted file mode 100644 index 4413134bb..000000000 --- a/specs-go/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/opencontainers/image-spec/specs-go - -go 1.15 - -require github.com/opencontainers/go-digest v1.0.0 diff --git a/specs-go/go.sum b/specs-go/go.sum deleted file mode 100644 index 30f45e97f..000000000 --- a/specs-go/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= From b4244ed31f777e7983d1cef90243f9b167ec7958 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Thu, 2 Dec 2021 14:58:41 -0500 Subject: [PATCH 68/88] *: switch to golangci-lint Signed-off-by: Vincent Batts --- .github/workflows/docs-and-linting.yml | 4 +- .golangci.yml | 26 + .tool/lint | 19 +- Makefile | 5 +- go.mod | 7 + go.sum | 1293 +++++++++++++++++++++++- 6 files changed, 1330 insertions(+), 24 deletions(-) create mode 100644 .golangci.yml diff --git a/.github/workflows/docs-and-linting.yml b/.github/workflows/docs-and-linting.yml index e8829863b..8190dacce 100644 --- a/.github/workflows/docs-and-linting.yml +++ b/.github/workflows/docs-and-linting.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - go: ['1.15', '1.16', '1.17'] + go: ['1.16', '1.17'] name: Documentation and Linting steps: @@ -30,8 +30,6 @@ jobs: export PATH=$GOPATH/bin:$PATH cd go/src/github.com/opencontainers/image-spec make install.tools - go get -u github.com/alecthomas/gometalinter - gometalinter --install go get -t -d ./... ls ../ make diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 000000000..35b52f7ca --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,26 @@ +run: + timeout: 10m + +linters: + disable-all: true + enable: + - deadcode + - dupl + - gofmt + - goimports + - gosimple + - govet + - ineffassign + - misspell + - nakedret + - revive + - structcheck + - unused + - varcheck + - staticcheck + +linters-settings: + gofmt: + simplify: true + dupl: + threshold: 400 diff --git a/.tool/lint b/.tool/lint index aa4f179f2..0e8024c54 100755 --- a/.tool/lint +++ b/.tool/lint @@ -4,21 +4,4 @@ set -o errexit set -o nounset set -o pipefail -if [ ! $(command -v gometalinter) ]; then - go get -u github.com/alecthomas/gometalinter - gometalinter --install -fi - -for d in $(find . -type d -not -iwholename '*.git*' -a -not -iname '.tool' -a -not -iwholename '*vendor*'); do - gometalinter \ - --exclude='error return value not checked.*(Close|Log|Print).*\(errcheck\)$' \ - --exclude='.*_test\.go:.*error return value not checked.*\(errcheck\)$' \ - --exclude='duplicate of.*_test.go.*\(dupl\)$' \ - --exclude='schema/fs.go' \ - --disable=aligncheck \ - --disable=gotype \ - --disable=gas \ - --cyclo-over=35 \ - --tests \ - --deadline=60s "${d}" -done +GO111MODULE=on golangci-lint run diff --git a/Makefile b/Makefile index 80ffad5b3..e7b378592 100644 --- a/Makefile +++ b/Makefile @@ -92,7 +92,7 @@ check-license: @echo "checking license headers" @./.tool/check-license -lint: +lint: .install.lint @echo "checking lint" @./.tool/lint @@ -114,6 +114,9 @@ endif install.tools: $(TOOLS:%=.install.%) +.install.lint: + go get github.com/golangci/golangci-lint/cmd/golangci-lint@latest + .install.esc: go get -u github.com/mjibson/esc diff --git a/go.mod b/go.mod index 06049f232..f3ccf7e05 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,16 @@ module github.com/opencontainers/image-spec go 1.11 require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/golangci/golangci-lint v1.43.0 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect github.com/opencontainers/go-digest v1.0.0 github.com/pkg/errors v0.9.1 github.com/russross/blackfriday v1.6.0 + github.com/stretchr/testify v1.7.0 // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 github.com/xeipuuv/gojsonschema v1.2.0 + gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect ) diff --git a/go.sum b/go.sum index 5bf8fb578..32d2c0880 100644 --- a/go.sum +++ b/go.sum @@ -1,19 +1,1308 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +4d63.com/gochecknoglobals v0.1.0 h1:zeZSRqj5yCg28tCkIV/z/lWbwvNm5qnKVS15PI8nhD0= +4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= +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.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= +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 v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU= +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/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= +cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= +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= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Antonboom/errname v0.1.5 h1:IM+A/gz0pDhKmlt5KSNTVAvfLMb+65RxavBXpRtCUEg= +github.com/Antonboom/errname v0.1.5/go.mod h1:DugbBstvPFQbv/5uLcRRzfrNqKE9tVdVCqWCLp6Cifo= +github.com/Antonboom/nilnil v0.1.0 h1:DLDavmg0a6G/F4Lt9t7Enrbgb3Oph6LnDE6YVsmTt74= +github.com/Antonboom/nilnil v0.1.0/go.mod h1:PhHLvRPSghY5Y7mX4TW+BHZQYo1A8flE5H20D3IPZBo= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us= +github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= +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/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= +github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +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/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/ashanbrown/forbidigo v1.2.0 h1:RMlEFupPCxQ1IogYOQUnIQwGEUGK8g5vAPMRyJoSxbc= +github.com/ashanbrown/forbidigo v1.2.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde h1:YOsoVXsZQPA9aOTy1g0lAJv5VzZUvwQuZqug8XPeqfM= +github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde/go.mod h1:oG9Dnez7/ESBqc4EdrdNlryeo7d0KcW1ftXHm7nU/UU= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/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/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blizzy78/varnamelen v0.3.0 h1:80mYO7Y5ppeEefg1Jzu+NBg16iwToOQVnDnNIoWSShs= +github.com/blizzy78/varnamelen v0.3.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= +github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= +github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/breml/bidichk v0.1.1 h1:Qpy8Rmgos9qdJxhka0K7ADEE5bQZX9PQUthkgggHpFM= +github.com/breml/bidichk v0.1.1/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= +github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= +github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= +github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20210405164556-e8a0a408d6af h1:spmv8nSH9h5oCQf40jt/ufBCt9j0/58u4G+rkeMqXGI= +github.com/chavacava/garif v0.0.0-20210405164556-e8a0a408d6af/go.mod h1:Qjyv4H3//PWVzTeCezG2b9IRn6myJxJSr4TD/xo6ojU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/daixiang0/gci v0.2.9 h1:iwJvwQpBZmMg31w+QQ6jsyZ54KEATn6/nfARbBNW294= +github.com/daixiang0/gci v0.2.9/go.mod h1:+4dZ7TISfSmqfAGv59ePaHfNzgGtIkHAhhdKggP1JAc= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denis-tingajkin/go-header v0.4.2 h1:jEeSF4sdv8/3cT/WY8AgDHUoItNSoEZ7qg9dX7pc218= +github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= +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/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/esimonov/ifshort v1.0.3 h1:JD6x035opqGec5fZ0TLjXeROD2p5H7oLGn8MKfy9HTM= +github.com/esimonov/ifshort v1.0.3/go.mod h1:yZqNJUrNn20K8Q9n2CrjTKYyVEmX209Hgu+M1LBpeZE= +github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= +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/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= +github.com/fzipp/gocyclo v0.3.1 h1:A9UeX3HJSXTBzvHzhqoYVuE0eAhe+aM8XBCCwsPMZOc= +github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-critic/go-critic v0.6.1 h1:lS8B9LH/VVsvQQP7Ao5TJyQqteVKVs3E4dXiHMyubtI= +github.com/go-critic/go-critic v0.6.1/go.mod h1:SdNCfU0yF3UBjtaZGw6586/WocupMOJuiqgom5DsQxM= +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-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-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0 h1:OMgl1b1MEpjFQ1m5ztEO06rz5CUd3oBv9RF7+DyvdG8= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.1 h1:JbSszi42Jiqu36Gnf363HWS9MTEAz67vTQLponh3Moc= +github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= +github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= +github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-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/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +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/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.43.0 h1:SLwZFEmDgopqZpfP495zCtV9REUf551JJlJ51Ql7NZA= +github.com/golangci/golangci-lint v1.43.0/go.mod h1:VIFlUqidx5ggxDfQagdvd9E67UjMXtTHBkBQ7sHoC5Q= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2 h1:SgM7GDZTxtTTQPU84heOxy34iG5Du7F2jcoZnvp+fXI= +github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +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/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= +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.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= +github.com/google/go-cmp v0.5.6/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/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +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-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.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/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254 h1:Nb2aRlC404yz7gQIfRZxX9/MLvQiqXyiBTJtgAy6yrI= +github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254/go.mod h1:M9mZEtGIsR1oDaZagNPNG9iq9n2HrhZ17dsXk73V3Lw= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= +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/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= +github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= +github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= +github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.0.0-20200621232751-01d4955beaa5 h1:rx8127mFPqXXsfPSo8BwnIU97MKFZc89WHAHt8PwDVY= +github.com/gostaticanalysis/forcetypeassert v0.0.0-20200621232751-01d4955beaa5/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +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/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +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-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +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-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +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.1/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/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= +github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= +github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= +github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= +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.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +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/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julz/importas v0.0.0-20210419104244-841f0c0fe66d h1:XeSMXURZPtUffuWAaq90o6kLgZdgu+QA8wk4MPC8ikI= +github.com/julz/importas v0.0.0-20210419104244-841f0c0fe66d/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.0 h1:YTDO4pNy7AUN/021p+JGHycQyYNIyMoenM1YDVK6RlY= +github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.4.0 h1:2Nx7XbdbE/BYZeoip2mURKUdtHQRuy6Ug+wR7K9ywNM= +github.com/kulti/thelper v0.4.0/go.mod h1:vMu2Cizjy/grP+jmsvOFDx1kYP6+PD1lqg4Yu5exl2U= +github.com/kunwardeep/paralleltest v1.0.3 h1:UdKIkImEAXjR1chUWLn+PNXqWUGs//7tzMeWuP7NhmI= +github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.2 h1:p9/sXuNFArS2RLc+UpYZSI4KQwGMEDWC/LbtF5OPFVg= +github.com/ldez/gomoddirectives v0.2.2/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.2.0 h1:693V8Bf1NdShJ8eu/s84QySA0J2VWBanVBa2WwXD/Wk= +github.com/ldez/tagliatelle v0.2.0/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/maratori/testpackage v1.0.1 h1:QtJ5ZjqapShm0w5DosRjg0PRlSdAdlx+W6cCKoALdbQ= +github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.11 h1:nQ+aFkoE2TMGc0b68U2OKSexC+eq46+XwZzWXHRmPYs= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +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.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +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-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +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/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 h1:zpIH83+oKzcpryru8ceC6BxnoG8TBrhgAvRg8obzup0= +github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.1.2 h1:MiYA/o9M7REjvOF20QN43U8OtXDDHQFKLCtJnxLGLog= +github.com/mgechev/revive v1.1.2/go.mod h1:bnXsMr+ZTH09V5rssEI+jHAZ4z+ZdyhgO/zsy3EhK+0= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +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/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +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/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= +github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= +github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= +github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/exhaustive v0.2.3 h1:+ANTMqRNrqwInnP9aszg/0jDo+zbXa4x66U19Bx/oTk= +github.com/nishanths/exhaustive v0.2.3/go.mod h1:bhIX678Nx8inLM9PbpvK1yv6oGtoP8BfaIeMzgBNKvc= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= +github.com/nishanths/predeclared v0.2.1 h1:1TXtjmy4f3YCFjTxRd8zcFHOmoUir+gp0ESzjFzG2sw= +github.com/nishanths/predeclared v0.2.1/go.mod h1:HvkGJcA3naj4lOwnFXFDkFxVtSqQMB9sbB1usJ+xjQE= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +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.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +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/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +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 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polyfloyd/go-errorlint v0.0.0-20210722154253-910bb7978349 h1:Kq/3kL0k033ds3tyez5lFPrfQ74fNJ+OqCclRipubwA= +github.com/polyfloyd/go-errorlint v0.0.0-20210722154253-910bb7978349/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= +github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.13 h1:O1G41cq1jUr3cJmqp7vOUT0SokqjzmS9aESWJuIDRaY= +github.com/quasilyte/go-ruleguard v0.3.13/go.mod h1:Ul8wwdqR6kBVOCt2dipDBkE+T6vAV/iixkrKuRTN1oQ= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.10/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20210428214800-545e0d2e0bf7/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryancurrah/gomodguard v1.2.3 h1:ww2fsjqocGCAFamzvv/b8IsRduuHHeK2MHTcTxZTQX8= +github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= +github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE= +github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= +github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec/v2 v2.9.1 h1:anHKLS/ApTYU6NZkKa/5cQqqcbKZURjvc+MtR++S4EQ= +github.com/securego/gosec/v2 v2.9.1/go.mod h1:oDcDLcatOJxkCGaCaq8lua1jTnYf6Sou4wdiJ1n4iHc= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/shirou/gopsutil/v3 v3.21.10/go.mod h1:t75NhzCZ/dYyPQjyQmrAYP6c8+LCdFANeBMdLPCNnew= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +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/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sivchari/tenv v1.4.7 h1:FdTpgRlTue5eb5nXIYgS/lyVXSjugU8UUVDwhP1NLU8= +github.com/sivchari/tenv v1.4.7/go.mod h1:5nF+bITvkebQVanjU6IuMbvIot/7ReNsUV7I5NbprB0= +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/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= +github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= +github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.9.0 h1:yR6EXjTp0y0cLN8OZg1CRZmOBdI88UcGkhgyJhu6nZk= +github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4= +github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= +github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/sylvia7788/contextcheck v1.0.4 h1:MsiVqROAdr0efZc/fOCt0c235qm9XJqHtWwM+2h2B04= +github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= +github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b h1:HxLVTlqcHhFAz3nWUcuvpH7WuOMv8LQoCWmruLfFH2U= +github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= +github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= +github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94 h1:ig99OeTyDwQWhPe2iw9lwfQVF1KB3Q4fpP3X7/2VBG8= +github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= +github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck/v2 v2.4.0 h1:mU4H9KsqqPZUALOUbVOpjy8qNQbWLoLI9fV68/1tq30= +github.com/tomarrell/wrapcheck/v2 v2.4.0/go.mod h1:68bQ/eJg55BROaRTbMjC7vuhL2OgfoG8bLp9ZyoBfyY= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/tommy-muehle/go-mnd/v2 v2.4.0 h1:1t0f8Uiaq+fqKteUR4N9Umr6E99R+lDnLnq7PwX2PPE= +github.com/tommy-muehle/go-mnd/v2 v2.4.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg= +github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +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/uudashr/gocognit v1.0.5 h1:rrSex7oHr3/pPLQ0xoWq108XMU8s678FJcQ+aSfOHa4= +github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= +github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yeya24/promlinter v0.1.0 h1:goWULN0jH5Yajmu/K+v1xCqIREeB+48OiJ2uu2ssc7U= +github.com/yeya24/promlinter v0.1.0/go.mod h1:rs5vtZzeBHqqMwXqFScncpCF6u06lezhZepno9AB1Oc= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +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/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +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.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +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-20181203042331-505ab145d0a9/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-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +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/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +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/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0 h1:UG21uOlmZabA4fW5i7ZX6bjw1xELEGg/ZLgZq9auk/Q= +golang.org/x/mod v0.5.0/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-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-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/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-20200421231249-e086a090c8fd/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-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-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/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-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/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-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-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-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/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-20191008105621-543471e840be/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-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-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-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-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/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-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/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-20210806184541-e5e7981a1069/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-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211013075003-97ac67df715c h1:taxlMj0D/1sOAuv/CbSD+MMDof2vbyPTqz5FNYKpXt8= +golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/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-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/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-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/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-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/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-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-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/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-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +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-20200117220505-0cba7a3a9ee9/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-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +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-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +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-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201114224030-61ea331ec02b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201118003311-bd56c0adb394/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210104081019-d8d6ddbec6ee/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +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.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.10.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/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/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/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/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-20200423170343-7949de9c1215/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-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +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/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 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/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28/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/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.63.2 h1:tGK/CyBg7SMzb60vP1M03vNZ3VDu3wGQJwn7Sxi9r3c= +gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +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.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.2.1 h1:/EPr//+UMMXwMTkXvCCoaJDq8cpjMO80Ou+L4PDo2mY= +honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= +mvdan.cc/gofumpt v0.1.1 h1:bi/1aS/5W00E2ny5q65w9SnKpWEF/UIOqDYBILpo9rA= +mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7 h1:HT3e4Krq+IE44tiN36RvVEb6tvqeIdtsVSsxmNPqlFU= +mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7/go.mod h1:hBpJkZE8H/sb+VRFvw2+rBpHNsTBcvSpk61hr8mzXZE= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= From c0a171cce0bbe76a9ed2a9ce853c9ae5f7e3cd62 Mon Sep 17 00:00:00 2001 From: Stephen Day Date: Thu, 2 Dec 2021 20:28:26 +0000 Subject: [PATCH 69/88] schema, specs-go: fix lint errors Signed-off-by: Stephen Day --- schema/backwards_compatibility_test.go | 2 +- schema/loader.go | 4 ++-- schema/schema.go | 2 +- schema/spec_test.go | 1 - specs-go/v1/index.go | 2 +- specs-go/v1/manifest.go | 2 +- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/schema/backwards_compatibility_test.go b/schema/backwards_compatibility_test.go index 00fb6afc9..ca17bbc04 100644 --- a/schema/backwards_compatibility_test.go +++ b/schema/backwards_compatibility_test.go @@ -21,7 +21,7 @@ import ( "github.com/opencontainers/go-digest" "github.com/opencontainers/image-spec/schema" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) var compatMap = map[string]string{ diff --git a/schema/loader.go b/schema/loader.go index f17176595..d6da9d89f 100644 --- a/schema/loader.go +++ b/schema/loader.go @@ -78,7 +78,7 @@ type fsLoader struct { } // JsonSource implements gojsonschema.JSONLoader.JsonSource. The "Json" capitalization needs to be maintained to conform to the interface. -func (l *fsLoader) JsonSource() interface{} { // nolint: golint +func (l *fsLoader) JsonSource() interface{} { // revive:disable-line:var-naming return l.source } @@ -117,7 +117,7 @@ func decodeJSONUsingNumber(r io.Reader) (interface{}, error) { } // JsonReference implements gojsonschema.JSONLoader.JsonReference. The "Json" capitalization needs to be maintained to conform to the interface. -func (l *fsLoader) JsonReference() (gojsonreference.JsonReference, error) { // nolint: golint +func (l *fsLoader) JsonReference() (gojsonreference.JsonReference, error) { // revive:disable-line:var-naming return gojsonreference.NewJsonReference(l.JsonSource().(string)) } diff --git a/schema/schema.go b/schema/schema.go index 239eefa24..746a0346d 100644 --- a/schema/schema.go +++ b/schema/schema.go @@ -17,7 +17,7 @@ package schema import ( "net/http" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) // Media types for the OCI image formats diff --git a/schema/spec_test.go b/schema/spec_test.go index 2d56627ab..df7242a79 100644 --- a/schema/spec_test.go +++ b/schema/spec_test.go @@ -95,7 +95,6 @@ func validate(t *testing.T, name string) { } for _, err := range errs { - // TOOD(stevvooe): This is nearly useless without file, line no. printFields(t, "invalid", example.Mediatype, example.Title) t.Error(err) fmt.Println(example.Body, "---") diff --git a/specs-go/v1/index.go b/specs-go/v1/index.go index 82da6c6a8..ed4a56e59 100644 --- a/specs-go/v1/index.go +++ b/specs-go/v1/index.go @@ -21,7 +21,7 @@ import "github.com/opencontainers/image-spec/specs-go" type Index struct { specs.Versioned - // MediaType specificies the type of this document data structure e.g. `application/vnd.oci.image.index.v1+json` + // MediaType specifies the type of this document data structure e.g. `application/vnd.oci.image.index.v1+json` MediaType string `json:"mediaType,omitempty"` // Manifests references platform specific manifests. diff --git a/specs-go/v1/manifest.go b/specs-go/v1/manifest.go index d72d15ce4..8212d520c 100644 --- a/specs-go/v1/manifest.go +++ b/specs-go/v1/manifest.go @@ -20,7 +20,7 @@ import "github.com/opencontainers/image-spec/specs-go" type Manifest struct { specs.Versioned - // MediaType specificies the type of this document data structure e.g. `application/vnd.oci.image.manifest.v1+json` + // MediaType specifies the type of this document data structure e.g. `application/vnd.oci.image.manifest.v1+json` MediaType string `json:"mediaType,omitempty"` // Config references a configuration object for a container, by digest. From e1f562f422bfe4f0400622e645789f4196a07c68 Mon Sep 17 00:00:00 2001 From: Stephen Day Date: Thu, 2 Dec 2021 20:46:28 +0000 Subject: [PATCH 70/88] .tool: remove lint tool, call linter directly Signed-off-by: Stephen Day --- .tool/lint | 7 ------- Makefile | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) delete mode 100755 .tool/lint diff --git a/.tool/lint b/.tool/lint deleted file mode 100755 index 0e8024c54..000000000 --- a/.tool/lint +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -set -o errexit -set -o nounset -set -o pipefail - -GO111MODULE=on golangci-lint run diff --git a/Makefile b/Makefile index e7b378592..7637ee4a0 100644 --- a/Makefile +++ b/Makefile @@ -94,7 +94,7 @@ check-license: lint: .install.lint @echo "checking lint" - @./.tool/lint + @GO111MODULE=on golangci-lint run test: schema/fs.go go test -race -cover $(shell go list ./... | grep -v /vendor/) From 5ebf4ca2bfc709eebb59921f5737d33c28fb2c77 Mon Sep 17 00:00:00 2001 From: Stephen Day Date: Thu, 2 Dec 2021 22:47:42 +0000 Subject: [PATCH 71/88] schema: use Go's embed package instead of esc Signed-off-by: Stephen Day --- Makefile | 12 +- go.mod | 6 +- go.sum | 1283 ------------------------------------------- schema/fs.go | 363 ------------ schema/gen.go | 21 - schema/schema.go | 6 +- schema/spec_test.go | 27 + schema/validator.go | 2 +- 8 files changed, 34 insertions(+), 1686 deletions(-) delete mode 100644 schema/fs.go delete mode 100644 schema/gen.go diff --git a/Makefile b/Makefile index 7637ee4a0..2d1e09cfb 100644 --- a/Makefile +++ b/Makefile @@ -49,7 +49,6 @@ help: @echo " * 'docs' - produce document in the $(OUTPUT_DIRNAME) directory" @echo " * 'fmt' - format the json with indentation" @echo " * 'validate-examples' - validate the examples in the specification markdown files" - @echo " * 'schema-fs' - regenerate the virtual schema http/FileSystem" @echo " * 'check-license' - check license headers in source files" @echo " * 'lint' - Execute the source code linter" @echo " * 'test' - Execute the unit tests" @@ -79,15 +78,9 @@ endif header.html: .tool/genheader.go specs-go/version.go go run .tool/genheader.go > $@ -validate-examples: schema/fs.go +validate-examples: schema/schema.go go test -run TestValidate ./schema -schema/fs.go: $(wildcard schema/*.json) schema/gen.go - cd schema && printf "%s\n\n%s\n" "$$(cat ../.header)" "$$(go generate)" > fs.go - -schema-fs: schema/fs.go - @echo "generating schema fs" - check-license: @echo "checking license headers" @./.tool/check-license @@ -117,9 +110,6 @@ install.tools: $(TOOLS:%=.install.%) .install.lint: go get github.com/golangci/golangci-lint/cmd/golangci-lint@latest -.install.esc: - go get -u github.com/mjibson/esc - .install.gitvalidation: go get -u github.com/vbatts/git-validation diff --git a/go.mod b/go.mod index f3ccf7e05..257431cf9 100644 --- a/go.mod +++ b/go.mod @@ -1,18 +1,14 @@ module github.com/opencontainers/image-spec -go 1.11 +go 1.16 require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/golangci/golangci-lint v1.43.0 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect github.com/opencontainers/go-digest v1.0.0 github.com/pkg/errors v0.9.1 github.com/russross/blackfriday v1.6.0 github.com/stretchr/testify v1.7.0 // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 github.com/xeipuuv/gojsonschema v1.2.0 - gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect ) diff --git a/go.sum b/go.sum index 32d2c0880..766d1071d 100644 --- a/go.sum +++ b/go.sum @@ -1,1308 +1,25 @@ -4d63.com/gochecknoglobals v0.1.0 h1:zeZSRqj5yCg28tCkIV/z/lWbwvNm5qnKVS15PI8nhD0= -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= -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.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= -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 v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU= -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/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= -cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= -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= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Antonboom/errname v0.1.5 h1:IM+A/gz0pDhKmlt5KSNTVAvfLMb+65RxavBXpRtCUEg= -github.com/Antonboom/errname v0.1.5/go.mod h1:DugbBstvPFQbv/5uLcRRzfrNqKE9tVdVCqWCLp6Cifo= -github.com/Antonboom/nilnil v0.1.0 h1:DLDavmg0a6G/F4Lt9t7Enrbgb3Oph6LnDE6YVsmTt74= -github.com/Antonboom/nilnil v0.1.0/go.mod h1:PhHLvRPSghY5Y7mX4TW+BHZQYo1A8flE5H20D3IPZBo= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw= -github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us= -github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -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/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= -github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -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/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/ashanbrown/forbidigo v1.2.0 h1:RMlEFupPCxQ1IogYOQUnIQwGEUGK8g5vAPMRyJoSxbc= -github.com/ashanbrown/forbidigo v1.2.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde h1:YOsoVXsZQPA9aOTy1g0lAJv5VzZUvwQuZqug8XPeqfM= -github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde/go.mod h1:oG9Dnez7/ESBqc4EdrdNlryeo7d0KcW1ftXHm7nU/UU= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/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/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blizzy78/varnamelen v0.3.0 h1:80mYO7Y5ppeEefg1Jzu+NBg16iwToOQVnDnNIoWSShs= -github.com/blizzy78/varnamelen v0.3.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= -github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/breml/bidichk v0.1.1 h1:Qpy8Rmgos9qdJxhka0K7ADEE5bQZX9PQUthkgggHpFM= -github.com/breml/bidichk v0.1.1/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= -github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= -github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20210405164556-e8a0a408d6af h1:spmv8nSH9h5oCQf40jt/ufBCt9j0/58u4G+rkeMqXGI= -github.com/chavacava/garif v0.0.0-20210405164556-e8a0a408d6af/go.mod h1:Qjyv4H3//PWVzTeCezG2b9IRn6myJxJSr4TD/xo6ojU= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/daixiang0/gci v0.2.9 h1:iwJvwQpBZmMg31w+QQ6jsyZ54KEATn6/nfARbBNW294= -github.com/daixiang0/gci v0.2.9/go.mod h1:+4dZ7TISfSmqfAGv59ePaHfNzgGtIkHAhhdKggP1JAc= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denis-tingajkin/go-header v0.4.2 h1:jEeSF4sdv8/3cT/WY8AgDHUoItNSoEZ7qg9dX7pc218= -github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= -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/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/esimonov/ifshort v1.0.3 h1:JD6x035opqGec5fZ0TLjXeROD2p5H7oLGn8MKfy9HTM= -github.com/esimonov/ifshort v1.0.3/go.mod h1:yZqNJUrNn20K8Q9n2CrjTKYyVEmX209Hgu+M1LBpeZE= -github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -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/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= -github.com/fzipp/gocyclo v0.3.1 h1:A9UeX3HJSXTBzvHzhqoYVuE0eAhe+aM8XBCCwsPMZOc= -github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-critic/go-critic v0.6.1 h1:lS8B9LH/VVsvQQP7Ao5TJyQqteVKVs3E4dXiHMyubtI= -github.com/go-critic/go-critic v0.6.1/go.mod h1:SdNCfU0yF3UBjtaZGw6586/WocupMOJuiqgom5DsQxM= -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-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-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.0 h1:OMgl1b1MEpjFQ1m5ztEO06rz5CUd3oBv9RF7+DyvdG8= -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.1 h1:JbSszi42Jiqu36Gnf363HWS9MTEAz67vTQLponh3Moc= -github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= -github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= -github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= -github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= -github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-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/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -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/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw= -github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.43.0 h1:SLwZFEmDgopqZpfP495zCtV9REUf551JJlJ51Ql7NZA= -github.com/golangci/golangci-lint v1.43.0/go.mod h1:VIFlUqidx5ggxDfQagdvd9E67UjMXtTHBkBQ7sHoC5Q= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2 h1:SgM7GDZTxtTTQPU84heOxy34iG5Du7F2jcoZnvp+fXI= -github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= -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/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= -github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= -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.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= -github.com/google/go-cmp v0.5.6/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/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -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-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= -github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.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/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254 h1:Nb2aRlC404yz7gQIfRZxX9/MLvQiqXyiBTJtgAy6yrI= -github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254/go.mod h1:M9mZEtGIsR1oDaZagNPNG9iq9n2HrhZ17dsXk73V3Lw= -github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= -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/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= -github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= -github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= -github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.0.0-20200621232751-01d4955beaa5 h1:rx8127mFPqXXsfPSo8BwnIU97MKFZc89WHAHt8PwDVY= -github.com/gostaticanalysis/forcetypeassert v0.0.0-20200621232751-01d4955beaa5/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= -github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= -github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= -github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -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/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= -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-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -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-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -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.1/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/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= -github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= -github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= -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.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -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/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julz/importas v0.0.0-20210419104244-841f0c0fe66d h1:XeSMXURZPtUffuWAaq90o6kLgZdgu+QA8wk4MPC8ikI= -github.com/julz/importas v0.0.0-20210419104244-841f0c0fe66d/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.0 h1:YTDO4pNy7AUN/021p+JGHycQyYNIyMoenM1YDVK6RlY= -github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.4.0 h1:2Nx7XbdbE/BYZeoip2mURKUdtHQRuy6Ug+wR7K9ywNM= -github.com/kulti/thelper v0.4.0/go.mod h1:vMu2Cizjy/grP+jmsvOFDx1kYP6+PD1lqg4Yu5exl2U= -github.com/kunwardeep/paralleltest v1.0.3 h1:UdKIkImEAXjR1chUWLn+PNXqWUGs//7tzMeWuP7NhmI= -github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/ldez/gomoddirectives v0.2.2 h1:p9/sXuNFArS2RLc+UpYZSI4KQwGMEDWC/LbtF5OPFVg= -github.com/ldez/gomoddirectives v0.2.2/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.2.0 h1:693V8Bf1NdShJ8eu/s84QySA0J2VWBanVBa2WwXD/Wk= -github.com/ldez/tagliatelle v0.2.0/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= -github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/maratori/testpackage v1.0.1 h1:QtJ5ZjqapShm0w5DosRjg0PRlSdAdlx+W6cCKoALdbQ= -github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.11 h1:nQ+aFkoE2TMGc0b68U2OKSexC+eq46+XwZzWXHRmPYs= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -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.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -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-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= -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/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 h1:zpIH83+oKzcpryru8ceC6BxnoG8TBrhgAvRg8obzup0= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.1.2 h1:MiYA/o9M7REjvOF20QN43U8OtXDDHQFKLCtJnxLGLog= -github.com/mgechev/revive v1.1.2/go.mod h1:bnXsMr+ZTH09V5rssEI+jHAZ4z+ZdyhgO/zsy3EhK+0= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= -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/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -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/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= -github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= -github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= -github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= -github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.2.3 h1:+ANTMqRNrqwInnP9aszg/0jDo+zbXa4x66U19Bx/oTk= -github.com/nishanths/exhaustive v0.2.3/go.mod h1:bhIX678Nx8inLM9PbpvK1yv6oGtoP8BfaIeMzgBNKvc= -github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= -github.com/nishanths/predeclared v0.2.1 h1:1TXtjmy4f3YCFjTxRd8zcFHOmoUir+gp0ESzjFzG2sw= -github.com/nishanths/predeclared v0.2.1/go.mod h1:HvkGJcA3naj4lOwnFXFDkFxVtSqQMB9sbB1usJ+xjQE= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -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.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -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/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= -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 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v0.0.0-20210722154253-910bb7978349 h1:Kq/3kL0k033ds3tyez5lFPrfQ74fNJ+OqCclRipubwA= -github.com/polyfloyd/go-errorlint v0.0.0-20210722154253-910bb7978349/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= -github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= -github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.13 h1:O1G41cq1jUr3cJmqp7vOUT0SokqjzmS9aESWJuIDRaY= -github.com/quasilyte/go-ruleguard v0.3.13/go.mod h1:Ul8wwdqR6kBVOCt2dipDBkE+T6vAV/iixkrKuRTN1oQ= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.10/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20210428214800-545e0d2e0bf7/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.2.3 h1:ww2fsjqocGCAFamzvv/b8IsRduuHHeK2MHTcTxZTQX8= -github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= -github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE= -github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/securego/gosec/v2 v2.9.1 h1:anHKLS/ApTYU6NZkKa/5cQqqcbKZURjvc+MtR++S4EQ= -github.com/securego/gosec/v2 v2.9.1/go.mod h1:oDcDLcatOJxkCGaCaq8lua1jTnYf6Sou4wdiJ1n4iHc= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil/v3 v3.21.10/go.mod h1:t75NhzCZ/dYyPQjyQmrAYP6c8+LCdFANeBMdLPCNnew= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -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/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sivchari/tenv v1.4.7 h1:FdTpgRlTue5eb5nXIYgS/lyVXSjugU8UUVDwhP1NLU8= -github.com/sivchari/tenv v1.4.7/go.mod h1:5nF+bITvkebQVanjU6IuMbvIot/7ReNsUV7I5NbprB0= -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/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= -github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.9.0 h1:yR6EXjTp0y0cLN8OZg1CRZmOBdI88UcGkhgyJhu6nZk= -github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4= -github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= -github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/sylvia7788/contextcheck v1.0.4 h1:MsiVqROAdr0efZc/fOCt0c235qm9XJqHtWwM+2h2B04= -github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= -github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b h1:HxLVTlqcHhFAz3nWUcuvpH7WuOMv8LQoCWmruLfFH2U= -github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= -github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= -github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94 h1:ig99OeTyDwQWhPe2iw9lwfQVF1KB3Q4fpP3X7/2VBG8= -github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= -github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.4.0 h1:mU4H9KsqqPZUALOUbVOpjy8qNQbWLoLI9fV68/1tq30= -github.com/tomarrell/wrapcheck/v2 v2.4.0/go.mod h1:68bQ/eJg55BROaRTbMjC7vuhL2OgfoG8bLp9ZyoBfyY= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/tommy-muehle/go-mnd/v2 v2.4.0 h1:1t0f8Uiaq+fqKteUR4N9Umr6E99R+lDnLnq7PwX2PPE= -github.com/tommy-muehle/go-mnd/v2 v2.4.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg= -github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -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/uudashr/gocognit v1.0.5 h1:rrSex7oHr3/pPLQ0xoWq108XMU8s678FJcQ+aSfOHa4= -github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= -github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yeya24/promlinter v0.1.0 h1:goWULN0jH5Yajmu/K+v1xCqIREeB+48OiJ2uu2ssc7U= -github.com/yeya24/promlinter v0.1.0/go.mod h1:rs5vtZzeBHqqMwXqFScncpCF6u06lezhZepno9AB1Oc= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -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/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -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.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -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-20181203042331-505ab145d0a9/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-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -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/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -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/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0 h1:UG21uOlmZabA4fW5i7ZX6bjw1xELEGg/ZLgZq9auk/Q= -golang.org/x/mod v0.5.0/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-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-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/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-20200421231249-e086a090c8fd/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-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-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/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-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/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-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-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-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/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-20191008105621-543471e840be/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-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-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-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-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/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-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/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-20210806184541-e5e7981a1069/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-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211013075003-97ac67df715c h1:taxlMj0D/1sOAuv/CbSD+MMDof2vbyPTqz5FNYKpXt8= -golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/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-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/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-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/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-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/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-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-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/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-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -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-20200117220505-0cba7a3a9ee9/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-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -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-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -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-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201114224030-61ea331ec02b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201118003311-bd56c0adb394/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210104081019-d8d6ddbec6ee/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.6/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -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.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.10.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/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/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/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/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-20200423170343-7949de9c1215/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-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -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/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 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/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.28/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/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.63.2 h1:tGK/CyBg7SMzb60vP1M03vNZ3VDu3wGQJwn7Sxi9r3c= -gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -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.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.2.1 h1:/EPr//+UMMXwMTkXvCCoaJDq8cpjMO80Ou+L4PDo2mY= -honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= -mvdan.cc/gofumpt v0.1.1 h1:bi/1aS/5W00E2ny5q65w9SnKpWEF/UIOqDYBILpo9rA= -mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7 h1:HT3e4Krq+IE44tiN36RvVEb6tvqeIdtsVSsxmNPqlFU= -mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7/go.mod h1:hBpJkZE8H/sb+VRFvw2+rBpHNsTBcvSpk61hr8mzXZE= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/schema/fs.go b/schema/fs.go deleted file mode 100644 index 9c6b29415..000000000 --- a/schema/fs.go +++ /dev/null @@ -1,363 +0,0 @@ -// Copyright 2016 The Linux Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by "esc -private -pkg=schema -include=.*\.json$ ."; DO NOT EDIT. - -package schema - -import ( - "bytes" - "compress/gzip" - "encoding/base64" - "fmt" - "io" - "io/ioutil" - "net/http" - "os" - "path" - "sync" - "time" -) - -type _escLocalFS struct{} - -var _escLocal _escLocalFS - -type _escStaticFS struct{} - -var _escStatic _escStaticFS - -type _escDirectory struct { - fs http.FileSystem - name string -} - -type _escFile struct { - compressed string - size int64 - modtime int64 - local string - isDir bool - - once sync.Once - data []byte - name string -} - -func (_escLocalFS) Open(name string) (http.File, error) { - f, present := _escData[path.Clean(name)] - if !present { - return nil, os.ErrNotExist - } - return os.Open(f.local) -} - -func (_escStaticFS) prepare(name string) (*_escFile, error) { - f, present := _escData[path.Clean(name)] - if !present { - return nil, os.ErrNotExist - } - var err error - f.once.Do(func() { - f.name = path.Base(name) - if f.size == 0 { - return - } - var gr *gzip.Reader - b64 := base64.NewDecoder(base64.StdEncoding, bytes.NewBufferString(f.compressed)) - gr, err = gzip.NewReader(b64) - if err != nil { - return - } - f.data, err = ioutil.ReadAll(gr) - }) - if err != nil { - return nil, err - } - return f, nil -} - -func (fs _escStaticFS) Open(name string) (http.File, error) { - f, err := fs.prepare(name) - if err != nil { - return nil, err - } - return f.File() -} - -func (dir _escDirectory) Open(name string) (http.File, error) { - return dir.fs.Open(dir.name + name) -} - -func (f *_escFile) File() (http.File, error) { - type httpFile struct { - *bytes.Reader - *_escFile - } - return &httpFile{ - Reader: bytes.NewReader(f.data), - _escFile: f, - }, nil -} - -func (f *_escFile) Close() error { - return nil -} - -func (f *_escFile) Readdir(count int) ([]os.FileInfo, error) { - if !f.isDir { - return nil, fmt.Errorf(" escFile.Readdir: '%s' is not directory", f.name) - } - - fis, ok := _escDirs[f.local] - if !ok { - return nil, fmt.Errorf(" escFile.Readdir: '%s' is directory, but we have no info about content of this dir, local=%s", f.name, f.local) - } - limit := count - if count <= 0 || limit > len(fis) { - limit = len(fis) - } - - if len(fis) == 0 && count > 0 { - return nil, io.EOF - } - - return fis[0:limit], nil -} - -func (f *_escFile) Stat() (os.FileInfo, error) { - return f, nil -} - -func (f *_escFile) Name() string { - return f.name -} - -func (f *_escFile) Size() int64 { - return f.size -} - -func (f *_escFile) Mode() os.FileMode { - return 0 -} - -func (f *_escFile) ModTime() time.Time { - return time.Unix(f.modtime, 0) -} - -func (f *_escFile) IsDir() bool { - return f.isDir -} - -func (f *_escFile) Sys() interface{} { - return f -} - -// _escFS returns a http.Filesystem for the embedded assets. If useLocal is true, -// the filesystem's contents are instead used. -func _escFS(useLocal bool) http.FileSystem { - if useLocal { - return _escLocal - } - return _escStatic -} - -// _escDir returns a http.Filesystem for the embedded assets on a given prefix dir. -// If useLocal is true, the filesystem's contents are instead used. -func _escDir(useLocal bool, name string) http.FileSystem { - if useLocal { - return _escDirectory{fs: _escLocal, name: name} - } - return _escDirectory{fs: _escStatic, name: name} -} - -// _escFSByte returns the named file from the embedded assets. If useLocal is -// true, the filesystem's contents are instead used. -func _escFSByte(useLocal bool, name string) ([]byte, error) { - if useLocal { - f, err := _escLocal.Open(name) - if err != nil { - return nil, err - } - b, err := ioutil.ReadAll(f) - _ = f.Close() - return b, err - } - f, err := _escStatic.prepare(name) - if err != nil { - return nil, err - } - return f.data, nil -} - -// _escFSMustByte is the same as _escFSByte, but panics if name is not present. -func _escFSMustByte(useLocal bool, name string) []byte { - b, err := _escFSByte(useLocal, name) - if err != nil { - panic(err) - } - return b -} - -// _escFSString is the string version of _escFSByte. -func _escFSString(useLocal bool, name string) (string, error) { - b, err := _escFSByte(useLocal, name) - return string(b), err -} - -// _escFSMustString is the string version of _escFSMustByte. -func _escFSMustString(useLocal bool, name string) string { - return string(_escFSMustByte(useLocal, name)) -} - -var _escData = map[string]*_escFile{ - - "/config-schema.json": { - name: "config-schema.json", - local: "config-schema.json", - size: 2969, - modtime: 1625865937, - compressed: ` -H4sIAAAAAAAC/+RWsW7bQAzd9RWCkjGJOnTymnYrkAJG2yEojLNE2Ux1xyuPMioU/vdCJzvx2SfZteEu -XSnyvcdHSuLvJE2zElzBaAXJZJM0e7JgHsmIQgOcPpKpcJFOLRRYYaF81l1XduuKJWjVlSxF7CTPXxyZ -+z76QLzIS1aV3L97n/exm74Oy22Jm+Q5WTDFls35sj47R60WkBeev6+U1kJXS/MXKKSPWSYLLAgum6Rd -O2maFQxKoHwN7JQ6YTQ9nI9XxFpJ96RUAveCGjL/bN2nZKqRJfEIVJjNxRIFCmkYTq1ZKUZl5NR0cqdn -PqyAXT/WUysqUJ34KIliVu2bdyigd/MGwNN0HZBsJhrB35mrj0dm6+NfHHAQGWR+ZfU5H39ZclB+Jha3 -X3/LUPk1gMo9dIt8k5dQocFu4V2ulZ165KdeYxzfrIZkhdYN2DfayNbGQ1Lh1hIGG9RP08BT19NzQBDS -jUockXlEaih3T/KoCtPUdYi0i/M9asGjLv/b3r9S3WhwZ/Z/7tZfu6tvxD/QLD7gWe/5JzWH+tqWTCOD -v6YlUyE7xYVR9cmWRD+/TCSVu+TzW2JVzbB0//5bt8kf6z6gBdPog4lntWqBXRZ3PNljzRh+Nsj+mniO -eLCvLtlF3Hq+RCfE7WX/1L3xDA8oegEdd2vsGoqs9+FldHyodxGNs3l7AQZpDQd/vr8AAG2lnfmNGAaZ -E9WgzMB+hm9ZsmE43JvwOHy75sL3Mul2Z538CQAA//9C38scmQsAAA== -`, - }, - - "/content-descriptor.json": { - name: "content-descriptor.json", - local: "content-descriptor.json", - size: 1079, - modtime: 1625865919, - compressed: ` -H4sIAAAAAAAC/5yTsW7cMAyGdz8F4QTIkos6BB2MIEu7d2i3ooNOok5Mz5JK8RBci7x7QcvX2G2RILfZ -xP+Rn2zqVwfQe6yOqQjl1A/QfyqYPuQklhIy6BMmgY9zKDN8LugokLMTca0tLquLOFrFo0gZjHmoOW1a -9Sbzzni2QTbvbk2rXTSO/AmpgzG5YHKnyXXCWtr4P9MbJ8eCSubtAzpptcK5IAth7QfQgwH0I3qyX1q4 -lf49r0SEKadNIQfQAmNAxuTQw2LGhF8yBuU8hrp5FrvRE18Yj4ESae9qnqdP7FNr0Vf6+ZqPRoASbI+C -9Y1O/xGhJO9v1xKedljlFQ3HxyJ5x7ZEcuAiuu/1MEJjT1rN5Vp19bVYEeQEV3d2v8tMEsf74U5/rEd/ -f3XOd5xdV/4H3tcX7C3sqSlqEALnER4juQgSqc7OMNojbBF8fkz7bD36c+wmk5WbTSnLdDtWim9fdrPs -dIbaEm+G3WzZM/44EKMqff37riz3dL0uHcC37qn7HQAA//9DKIMKNwQAAA== -`, - }, - - "/defs-descriptor.json": { - name: "defs-descriptor.json", - local: "defs-descriptor.json", - size: 844, - modtime: 1625865919, - compressed: ` -H4sIAAAAAAAC/5SST2/TTBDG7/kU826jt0DiOHBAqlWKKnrnUE6t0mi6O7aneP9od6IqVPnuaG03SYtA -cLC1+2jmefwbz9MEQBlKOnIQ9k5VoK6oZsf5liBgFNabDiOIh6+B3BfvBNlRhKuxzUe4DqS5Zo29x3ww -3buoCnIOgLJkGL9tA+0lAMUmp7YiIVVl6QM5/ZyRFj42ZdItWSzZYkOl2aeWB7f5s5cM3ipJZNcc9IAi -FHu8u9vL4gaLH8vibHU4/ncy/b+4Wy9mq6fl/P2Hj7vy78qmqo/YDUnKcENJjuleDVdaAh23QXwTMbSs -Qbekv6eNhaEXfA25yN8/kJY5sOuvIwCcnmPX+MjS2ovqPI/KkLk4/ccJjFyzN5+r29liXaz2ytt3VT5f -FjfL4uzTuljNXhFuYpf+wIfQ8QCRC6GO3sJjy7oFaTmNVGBxC/cExj+6zqMh8+v3Y4y4PcgsZI9zf08K -oGofLea/oDaR1ajvXmCgc17w5XoCqGmkOvcZqtPiIXl3Uh4tcmkxXPdpw3uczCQ/u8nPAAAA///5nDLG -TAMAAA== -`, - }, - - "/defs.json": { - name: "defs.json", - local: "defs.json", - size: 1670, - modtime: 1625865903, - compressed: ` -H4sIAAAAAAAC/7STza6bMBCF9zzFyO2S9oJtbGDb7hMpy6oLSiaJq2AjY6RWEe9e8RNChFuJKneRgGc8 -3zmeMbcAgByxKa2qnTKa5EC+4klp1a8aaBs8grtY054vpnXgLgi7GvUXo12hNFo41FiqkyqLoTwceTOA -5NBLABClXTqvAIj7XWOvprTDM9qhckhUSquqrUgOn2KaPsLFrykcUzkEu3Amx2IrmlEpfPA+vsIzuhVP -Yy55ygT3aczJlZDgW4UyShmTNGIiTbiUIooij6Jn15N0+x/T8enQJFlxN8/GBxZJwtbozXPxoTnNeCYk -zdb8zePw8eOUcyE5jySTUZYk1Nf8WOxNz7VLQaNxdyI5fJsCMKeG9EeLfZZ8eFt8cG9Ty+eNXeivvp9G -t9frYvf09t3Ti1c6FPy1DhtnlT5vd3jXGOtf66kq6sOAHf99V8n8+Imle9ykunAOrd5bU6N1CptFEQD5 -fIvD7in0ryMEy+fK1G6UfmdTE+tvpoL+1wV/AgAA//96IpqyhgYAAA== -`, - }, - - "/image-index-schema.json": { - name: "image-index-schema.json", - local: "image-index-schema.json", - size: 2993, - modtime: 1625865919, - compressed: ` -H4sIAAAAAAAC/6yWz0/jOhDH7/0rRgGJC5CnJ/QOFeLy9sJpD4v2suJg7EkybGNnx1Ogu+r/vrJN2qRJ -C4Te2rHnO5/vxL/+zAAyg14zNULOZnPIvjZo/3dWFFlkuK1ViXBrDb7AtwY1FaRVnHoeck+9rrBWIa8S -aeZ5/uidvUjRS8dlblgVcvHPVZ5iJymPTJvi53nuGrS6LeljWpqdUyifUyifEmXVYEh1D4+oJcUadg2y -EPpsDsESQJbyvyP7ZCuFh27vKvJQEC4M+GQPPUiFECtDrAxJDJ6SGigPygJZwRI5IkTlCZ7yPuZGqnU5 -qFGTpXpZZ3P4dxtTL20shtZpJKuVpQK9+K79Vlkxq1WHXbDuzvuwnbbYl9f2ui30+Fd7HWH8tSTGUOvH -Jhrg0ZC6C2nn3bCn3zsRQyV6yTah+474yMIYyPcHhgskrIU4O3gAV8TFwVggo9VoYGApipwyFiHbYOEv -zKYnl2F3nOQGC7IUKvh8S9JRWA9Nv4czTASy8LAS9JNYRwDJyn9X++Fe+/8ePM2rRlzJqqlIg65Q//TL -GpJCi5sYz4ON8LdRIsgWzq7VonRMUtU38+uwFg2am7Ppfd9dN7u+lrzwb7pSsKCEHqZDwa6G54p0BRLO -leQFarWCBwTjnu3CKYNmOnWk2svcLJQUjush98c280Znh3PvNj60leOYYl2RoJYl404eQOZ6nnp7+PA+ -HmoPxye7zw9Cd9rhhcmW2c6E9ZjNY+I5fxyoy6fBLXkMuI3scSALVOE7HLuFW90DmP3Lslt2cG2+2yTA -+k3bT4pJWRm3/EYPZ/v+9Y8MZa2T+KDznz01tgdX3lWdfNZ1RWZjXtpf696zZ9zRpNfZmI3PGAigEXN4 -VmZjL8HOE24GcD9bz/4GAAD//yCnv52xCwAA -`, - }, - - "/image-layout-schema.json": { - name: "image-layout-schema.json", - local: "image-layout-schema.json", - size: 439, - modtime: 1625865903, - compressed: ` -H4sIAAAAAAAC/2yPQUvEMBCF7/0VQ/Sg4DYVPOW6pwVhD4IX8VDTaTvLNonJVFik/12SaRXRU5g38+W9 -91kBqA6TjRSYvFMG1DGg23vHLTmMcJjaAeGxvfiZ4cmOOLXqLlPXSQYDamQORutT8m4nau3joLvY9rxr -HrRoV8JRtyHJaO0DOruZpYLJtaZsrM/FWEi+BMysfzuhXbUQfcDIhEkZyG2yQyYl8TPGJLVk97fth1yA -74FHhOP+8LvyDbmy8JZ2EgZ6OuNtsS8fbrESR3LDj45unpSBl3UGUPd1UzdqnV/Lu1QAS2kS8X2miN03 -8l+PKnNL9RUAAP//k31n5bcBAAA= -`, - }, - - "/image-manifest-schema.json": { - name: "image-manifest-schema.json", - local: "image-manifest-schema.json", - size: 921, - modtime: 1625865903, - compressed: ` -H4sIAAAAAAAC/5ySMW8iMRCF+/0VI0MJ+O501bZXUZxSJEoTpXB2x7uDWNsZmygo4r9HtnHAkCKifTvv -zTdv/dEAiB59x+QCWSNaEHcOzT9rgiKDDOtJDQj/lSGNPsC9w440dSpNL6J97rsRJxWtYwiulXLjrVlm -dWV5kD0rHZa//sqszbKP+mLxrZTWoenKVp9seVpSJJDTkSB7w95hdNuXDXZHzbF1yIHQixbiYQAiRzwi -+3xclq9vfhjJgybc9uDzheghjAhpOZTlkPPgLQeC8qAMkAk4ICeKFH7bZbKG/Uort16tmcjQtJtEC39O -mnovWpIO+YvorNE0nDcwZ9QxNqKhCcvSiOVV/H+ism/VHtmf2wuVYlb7imkdcIqjv099HJVi/ul2gENF -oYyxIb28CuXGus/TFpet9Kj9JdRM9qjJULJU9qawJlLB+Lojxoj19N07rP9JXXED8Nwcms8AAAD//7u3 -Dj+ZAwAA -`, - }, - - "/": { - name: "/", - local: `.`, - isDir: true, - }, -} - -var _escDirs = map[string][]os.FileInfo{ - - ".": { - _escData["/config-schema.json"], - _escData["/content-descriptor.json"], - _escData["/defs-descriptor.json"], - _escData["/defs.json"], - _escData["/image-index-schema.json"], - _escData["/image-layout-schema.json"], - _escData["/image-manifest-schema.json"], - }, -} diff --git a/schema/gen.go b/schema/gen.go deleted file mode 100644 index ae78604fd..000000000 --- a/schema/gen.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2016 The Linux Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package schema - -// Generates an embbedded http.FileSystem for all schema files -// using esc (https://github.com/mjibson/esc). - -// This should generally be invoked with `make schema-fs` -//go:generate esc -private -pkg=schema -include=.*\.json$ . diff --git a/schema/schema.go b/schema/schema.go index 746a0346d..7a338d8ee 100644 --- a/schema/schema.go +++ b/schema/schema.go @@ -15,6 +15,7 @@ package schema import ( + "embed" "net/http" v1 "github.com/opencontainers/image-spec/specs-go/v1" @@ -33,7 +34,8 @@ const ( var ( // fs stores the embedded http.FileSystem // having the OCI JSON schema files in root "/". - fs = _escFS(false) + //go:embed *.json + fs embed.FS // schemaNamespaces is a set of URI prefixes which are treated as containing the schema files of fs. // This is necessary because *.json schema files in this directory use "id" and "$ref" attributes which evaluate to such URIs, e.g. @@ -72,5 +74,5 @@ var ( // FileSystem returns an in-memory filesystem including the schema files. // The schema files are located at the root directory. func FileSystem() http.FileSystem { - return fs + return http.FS(fs) } diff --git a/schema/spec_test.go b/schema/spec_test.go index df7242a79..dd3295e37 100644 --- a/schema/spec_test.go +++ b/schema/spec_test.go @@ -21,6 +21,8 @@ import ( "io/ioutil" "net/url" "os" + "path/filepath" + "reflect" "strings" "testing" @@ -53,6 +55,31 @@ func TestValidateConfig(t *testing.T) { validate(t, "../config.md") } +func TestSchemaFS(t *testing.T) { + expectedSchemaFileNames, err := filepath.Glob("*.json") + if err != nil { + t.Error(err) + } + + dir, err := schema.FileSystem().Open("/") + if err != nil { + t.Fatal(err) + } + + files, err := dir.Readdir(-1) + if err != nil { + t.Fatal(err) + } + var schemaFileNames []string + for _, f := range files { + schemaFileNames = append(schemaFileNames, f.Name()) + } + + if !reflect.DeepEqual(schemaFileNames, expectedSchemaFileNames) { + t.Fatalf("got %v, expected %v", schemaFileNames, expectedSchemaFileNames) + } +} + // TODO(sur): include examples from all specification files func validate(t *testing.T, name string) { m, err := os.Open(name) diff --git a/schema/validator.go b/schema/validator.go index 8cd9ecfc3..bc7568a34 100644 --- a/schema/validator.go +++ b/schema/validator.go @@ -67,7 +67,7 @@ func (v Validator) Validate(src io.Reader) error { } } - sl := newFSLoaderFactory(schemaNamespaces, fs).New(specs[v]) + sl := newFSLoaderFactory(schemaNamespaces, FileSystem()).New(specs[v]) ml := gojsonschema.NewStringLoader(string(buf)) result, err := gojsonschema.Validate(sl, ml) From fee13fc3bb78a4c460a632b8f844260edceac6be Mon Sep 17 00:00:00 2001 From: sanshirookazaki Date: Wed, 15 Dec 2021 20:41:03 +0900 Subject: [PATCH 72/88] README.md: Remove link to OCI scope table The OCI scope table no-longer exists. Fixes #812 Signed-off-by: sanshirookazaki --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7557208c..c00ba7e26 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ To support this UX the OCI Image Format contains sufficient information to launc **Q: Why doesn't this project mention distribution?** -A: Distribution, for example using HTTP as both Docker v2.2 and AppC do today, is currently out of scope on the [OCI Scope Table](https://www.opencontainers.org/about/oci-scope-table). +A: Distribution, for example using HTTP as both Docker v2.2 and AppC do today, is currently out of scope. There has been [some discussion on the TOB mailing list](https://groups.google.com/a/opencontainers.org/d/msg/tob/A3JnmI-D-6Y/tLuptPDHAgAJ) to make distribution an optional layer, but this topic is a work in progress. **Q: What happens to AppC or Docker Image Formats?** From 0de10a15c770a3a30bb454d53daf98b5fe092ae7 Mon Sep 17 00:00:00 2001 From: Brandon Mitchell Date: Mon, 29 Nov 2021 20:42:05 -0500 Subject: [PATCH 73/88] Handle multiple matching index entries Signed-off-by: Brandon Mitchell --- image-index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/image-index.md b/image-index.md index c8e6e561a..ab8732e62 100644 --- a/image-index.md +++ b/image-index.md @@ -83,6 +83,8 @@ For the media type(s) that this document is compatible with, see the [matrix][ma This property is RESERVED for future versions of the specification. + If multiple manifests match a client or runtime's requirements, the first matching entry SHOULD be used. + - **`annotations`** *string-string map* This OPTIONAL property contains arbitrary metadata for the image index. From 1942942d2e22bbdb86530da006d8fd2a84dffc44 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Tue, 15 Feb 2022 22:03:03 -0500 Subject: [PATCH 74/88] implementations: adding the C and Rust libraries having seen #895, it's worth ensuring these other languages are listed implementations Signed-off-by: Vincent Batts --- implementations.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/implementations.md b/implementations.md index 786075cbe..90afcab93 100644 --- a/implementations.md +++ b/implementations.md @@ -15,6 +15,8 @@ Projects or Companies currently adopting the OCI Image Specification * [Containers](https://github.com/containers/) - [containers/build](https://github.com/containers/build) - [containers/image](https://github.com/containers/image) + - [containers/oci-spec-rs](https://github.com/containers/oci-spec-rs) + - [containers/libocispec](https://github.com/containers/libocispec) * [coreos/rkt](https://github.com/coreos/rkt) * [box-builder/box](https://github.com/box-builder/box) * [coolljt0725/docker2oci](https://github.com/coolljt0725/docker2oci) From 043e056b3dbb0ce8c08b42cef7d4bc3a7dd40a92 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Thu, 24 Feb 2022 18:55:23 +0000 Subject: [PATCH 75/88] implementations: point to krustlet/oci-distribution Signed-off-by: Vincent Batts --- implementations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/implementations.md b/implementations.md index 90afcab93..6b8bf8107 100644 --- a/implementations.md +++ b/implementations.md @@ -17,6 +17,7 @@ Projects or Companies currently adopting the OCI Image Specification - [containers/image](https://github.com/containers/image) - [containers/oci-spec-rs](https://github.com/containers/oci-spec-rs) - [containers/libocispec](https://github.com/containers/libocispec) +* [krustlet/oci-distribution](https://github.com/krustlet/oci-distribution) * [coreos/rkt](https://github.com/coreos/rkt) * [box-builder/box](https://github.com/box-builder/box) * [coolljt0725/docker2oci](https://github.com/coolljt0725/docker2oci) From 9dbb65435e460a8552cfba0aa70e4f6493e41949 Mon Sep 17 00:00:00 2001 From: Brandon Mitchell Date: Fri, 25 Feb 2022 15:30:27 -0500 Subject: [PATCH 76/88] Fixing charter link Signed-off-by: Brandon Mitchell --- GOVERNANCE.md | 2 +- RELEASES.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 92c860949..c780b12ef 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -67,4 +67,4 @@ For example: > [runtime-spec adopted]: Tag 0647920 as 1.0.0-rc (+6 -0 #3) -[charter]: https://www.opencontainers.org/about/governance +[charter]: https://github.com/opencontainers/tob/blob/main/CHARTER.md diff --git a/RELEASES.md b/RELEASES.md index e220042c8..22690cd1e 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -48,4 +48,4 @@ Specifications have a variety of different timelines in their lifecycle. For example if a breaking change is introduced in v1.0.0-rc2 then the series would end with v1.0.0-rc4 and v1.0.0. - Minor and patch releases SHOULD be made on an as-needed basis. -[charter]: https://www.opencontainers.org/about/governance +[charter]: https://github.com/opencontainers/tob/blob/main/CHARTER.md From c84fb83b00c498fe4aa93398d5a77d11adc4db57 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 3 Mar 2022 10:22:17 -0800 Subject: [PATCH 77/88] Add mediaType fields into example manifest & image index JSON references Signed-off-by: Michael Brown --- image-index.md | 1 + manifest.md | 1 + 2 files changed, 2 insertions(+) diff --git a/image-index.md b/image-index.md index ab8732e62..ab3dc4e9c 100644 --- a/image-index.md +++ b/image-index.md @@ -109,6 +109,7 @@ When the variant of the CPU is not listed in the table, values are implementatio ```json,title=Image%20Index&mediatype=application/vnd.oci.image.index.v1%2Bjson { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "application/vnd.oci.image.manifest.v1+json", diff --git a/manifest.md b/manifest.md index 29217dda8..c7e8ffe54 100644 --- a/manifest.md +++ b/manifest.md @@ -79,6 +79,7 @@ Unlike the [image index](image-index.md), which contains information about a set ```json,title=Manifest&mediatype=application/vnd.oci.image.manifest.v1%2Bjson { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "size": 7023, From ef80153f5042e1fb7bf1666f943ae8f85d164216 Mon Sep 17 00:00:00 2001 From: Josh Dolitsky Date: Fri, 29 Apr 2022 10:52:37 -0500 Subject: [PATCH 78/88] Move inactive maintainers to emeritus Signed-off-by: Josh Dolitsky --- CODEOWNERS | 2 +- EMERITUS.md | 2 ++ MAINTAINERS | 2 -- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index 3a867729b..3ce99b8a9 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1 @@ -* @brendandburns @jonjohnsonjr @jstarks @jonboulle @stevvooe @vbatts @cyphar +* @jonjohnsonjr @jonboulle @stevvooe @vbatts @cyphar diff --git a/EMERITUS.md b/EMERITUS.md index 52205517e..eef0b44fd 100644 --- a/EMERITUS.md +++ b/EMERITUS.md @@ -1,7 +1,9 @@ We would like to acknowledge previous OCI image spec maintainers and their huge contributions to our collective success: * Brandon Philips (@philips) +* Brendan Burns (@brendandburns) * Jason Bouzane (@jbouzane) +* John Starks (@jstarks) * Keyang Xie (@xiekeyang) We thank these members for their service to the OCI community. diff --git a/MAINTAINERS b/MAINTAINERS index 79b5bed60..8ac0c0974 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,6 +1,4 @@ -Brendan Burns (@brendandburns) Jon Johnson (@jonjohnsonjr) -John Starks (@jstarks) Jonathan Boulle (@jonboulle) Stephen Day (@stevvooe) Vincent Batts (@vbatts) From 63f7613fe2f172fdbce9445bd30ee8eb429db551 Mon Sep 17 00:00:00 2001 From: Josh Dolitsky Date: Wed, 4 May 2022 10:04:30 -0500 Subject: [PATCH 79/88] Add Sajay as maintainer Signed-off-by: Josh Dolitsky --- CODEOWNERS | 2 +- MAINTAINERS | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 3ce99b8a9..77d9ca9b5 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1 @@ -* @jonjohnsonjr @jonboulle @stevvooe @vbatts @cyphar +* @jonjohnsonjr @jonboulle @sajayantony @stevvooe @vbatts @cyphar diff --git a/MAINTAINERS b/MAINTAINERS index 8ac0c0974..20199fc30 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,5 +1,6 @@ Jon Johnson (@jonjohnsonjr) Jonathan Boulle (@jonboulle) +Sajay Antony (@sajayantony) Stephen Day (@stevvooe) Vincent Batts (@vbatts) Aleksa Sarai (@cyphar) From 133d99be1141440667dc516d9a29779752e5b4c6 Mon Sep 17 00:00:00 2001 From: Brandon Mitchell Date: Mon, 9 May 2022 15:53:24 -0400 Subject: [PATCH 80/88] Update URLs to https Signed-off-by: Brandon Mitchell --- HACKING.md | 2 +- README.md | 4 ++-- annotations.md | 2 +- considerations.md | 4 ++-- descriptor.md | 2 +- layer.md | 12 ++++++------ schema/config-schema.json | 2 +- schema/content-descriptor.json | 2 +- schema/image-index-schema.json | 2 +- schema/image-layout-schema.json | 2 +- schema/image-manifest-schema.json | 2 +- spec.md | 4 ++-- 12 files changed, 20 insertions(+), 20 deletions(-) diff --git a/HACKING.md b/HACKING.md index fd38866da..52dfb42b2 100644 --- a/HACKING.md +++ b/HACKING.md @@ -96,7 +96,7 @@ $ make clean This target generates PNG image files from DOT source files in the `img` directory. Prerequisites: -* [graphviz](http://www.graphviz.org/) +* [graphviz](https://www.graphviz.org/) Invocation: ``` diff --git a/README.md b/README.md index c00ba7e26..ce8308cdd 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ For example, this paragraph will span three lines in the Markdown source. ### Sign your work The sign-off is a simple line at the end of the explanation for the patch, which certifies that you wrote it or otherwise have the right to pass it on as an open-source patch. -The rules are pretty simple: if you can certify the below (from [developercertificate.org](http://developercertificate.org/)): +The rules are pretty simple: if you can certify the below (from [developercertificate.org](https://developercertificate.org/)): ``` Developer Certificate of Origin @@ -145,7 +145,7 @@ You can add the sign off when creating the git commit via `git commit -s`. ### Commit Style Simple house-keeping for clean git history. -Read more on [How to Write a Git Commit Message](http://chris.beams.io/posts/git-commit/) or the Discussion section of [`git-commit(1)`](http://git-scm.com/docs/git-commit). +Read more on [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/) or the Discussion section of [`git-commit(1)`](https://git-scm.com/docs/git-commit). 1. Separate the subject from body with a blank line 2. Limit the subject line to 50 characters diff --git a/annotations.md b/annotations.md index 907220796..8bf2d7a4d 100644 --- a/annotations.md +++ b/annotations.md @@ -24,7 +24,7 @@ This specification defines the following annotation keys, intended for but not l * **org.opencontainers.image.source** URL to get source code for building the image (string) * **org.opencontainers.image.version** version of the packaged software * The version MAY match a label or tag in the source code repository - * version MAY be [Semantic versioning-compatible](http://semver.org/) + * version MAY be [Semantic versioning-compatible](https://semver.org/) * **org.opencontainers.image.revision** Source control revision identifier for the packaged software. * **org.opencontainers.image.vendor** Name of the distributing entity, organization or individual. * **org.opencontainers.image.licenses** License(s) under which contained software is distributed as an [SPDX License Expression][spdx-license-expression]. diff --git a/considerations.md b/considerations.md index 7b53c3438..d176c511f 100644 --- a/considerations.md +++ b/considerations.md @@ -20,10 +20,10 @@ Implementations: * [Go][]: [github.com/docker/go][], which claims to implement [canonical JSON][canonical-json] except for Unicode normalization. -[canonical-json]: http://wiki.laptop.org/go/Canonical_JSON +[canonical-json]: https://wiki.laptop.org/go/Canonical_JSON [github.com/docker/go]: https://github.com/docker/go/ [Go]: https://golang.org/ -[JSON]: http://json.org/ +[JSON]: https://json.org/ # EBNF diff --git a/descriptor.md b/descriptor.md index 3e287604b..e8ca10326 100644 --- a/descriptor.md +++ b/descriptor.md @@ -59,7 +59,7 @@ Extended _Descriptor_ field additions proposed in other OCI specifications SHOUL ## Digests -The _digest_ property of a Descriptor acts as a content identifier, enabling [content addressability](http://en.wikipedia.org/wiki/Content-addressable_storage). +The _digest_ property of a Descriptor acts as a content identifier, enabling [content addressability](https://en.wikipedia.org/wiki/Content-addressable_storage). It uniquely identifies content by taking a [collision-resistant hash](https://en.wikipedia.org/wiki/Cryptographic_hash_function) of the bytes. If the _digest_ can be communicated in a secure manner, one can verify content from an insecure source by recalculating the digest independently, ensuring the content has not been modified. diff --git a/layer.md b/layer.md index 387c9cf8a..533a427cb 100644 --- a/layer.md +++ b/layer.md @@ -63,7 +63,7 @@ Where supported, MUST include file attributes for Additions and Modifications in #### Hardlinks -* Hardlinks are a [POSIX concept](http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html) for having one or more directory entries for the same file on the same device. +* Hardlinks are a [POSIX concept](https://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html) for having one or more directory entries for the same file on the same device. * Not all filesystems support hardlinks (e.g. [FAT](https://en.wikipedia.org/wiki/File_Allocation_Table)). * Hardlinks are possible with all [file types](#file-types) except `directories`. * Non-directory files are considered "hardlinked" when their link count is greater than 1. @@ -147,9 +147,9 @@ Entries for the following files: Create a new directory and initialize it with a copy or snapshot of the prior root filesystem. Example commands that can preserve [file attributes](#file-attributes) to make this copy are: -* [cp(1)](http://linux.die.net/man/1/cp): `cp -a rootfs-c9d-v1/ rootfs-c9d-v1.s1/` -* [rsync(1)](http://linux.die.net/man/1/rsync): `rsync -aHAX rootfs-c9d-v1/ rootfs-c9d-v1.s1/` -* [tar(1)](http://linux.die.net/man/1/tar): `mkdir rootfs-c9d-v1.s1 && tar --acls --xattrs -C rootfs-c9d-v1/ -c . | tar -C rootfs-c9d-v1.s1/ --acls --xattrs -x` (including `--selinux` where supported) +* [cp(1)](https://linux.die.net/man/1/cp): `cp -a rootfs-c9d-v1/ rootfs-c9d-v1.s1/` +* [rsync(1)](https://linux.die.net/man/1/rsync): `rsync -aHAX rootfs-c9d-v1/ rootfs-c9d-v1.s1/` +* [tar(1)](https://linux.die.net/man/1/tar): `mkdir rootfs-c9d-v1.s1 && tar --acls --xattrs -C rootfs-c9d-v1/ -c . | tar -C rootfs-c9d-v1.s1/ --acls --xattrs -x` (including `--selinux` where supported) Any [changes](#change-types) to the snapshot MUST NOT change or affect the directory it was copied from. @@ -235,7 +235,7 @@ This section specifies applying an entry from a layer changeset if the target pa If the entry and the existing path are both directories, then the existing path's attributes MUST be replaced by those of the entry in the changeset. In all other cases, the implementation MUST do the semantic equivalent of the following: -- removing the file path (e.g. [`unlink(2)`](http://linux.die.net/man/2/unlink) on Linux systems) +- removing the file path (e.g. [`unlink(2)`](https://linux.die.net/man/2/unlink) on Linux systems) - recreating the file path, based on the contents and attributes of the changeset entry ## Whiteouts @@ -333,7 +333,7 @@ Implementations SHOULD NOT upload layers tagged with this media type; however, s [Descriptors](descriptor.md) referencing non-distributable layers MAY include `urls` for downloading these layers directly; however, the presence of the `urls` field SHOULD NOT be used to determine whether or not a layer is non-distributable. [libarchive-tar]: https://github.com/libarchive/libarchive/wiki/ManPageTar5#POSIX_ustar_Archives -[gnu-tar-standard]: http://www.gnu.org/software/tar/manual/html_node/Standard.html +[gnu-tar-standard]: https://www.gnu.org/software/tar/manual/html_node/Standard.html [rfc1952_2]: https://tools.ietf.org/html/rfc1952 [tar-archive]: https://en.wikipedia.org/wiki/Tar_(computing) [rfc8478]: https://tools.ietf.org/html/rfc8478 diff --git a/schema/config-schema.json b/schema/config-schema.json index 9b3be97c5..f85f8cd4b 100644 --- a/schema/config-schema.json +++ b/schema/config-schema.json @@ -1,6 +1,6 @@ { "description": "OpenContainer Config Specification", - "$schema": "http://json-schema.org/draft-04/schema#", + "$schema": "https://json-schema.org/draft-04/schema#", "id": "https://opencontainers.org/schema/image/config", "type": "object", "properties": { diff --git a/schema/content-descriptor.json b/schema/content-descriptor.json index 9157e04a7..b64ca1313 100644 --- a/schema/content-descriptor.json +++ b/schema/content-descriptor.json @@ -1,6 +1,6 @@ { "description": "OpenContainer Content Descriptor Specification", - "$schema": "http://json-schema.org/draft-04/schema#", + "$schema": "https://json-schema.org/draft-04/schema#", "id": "https://opencontainers.org/schema/descriptor", "type": "object", "properties": { diff --git a/schema/image-index-schema.json b/schema/image-index-schema.json index 8a962aab2..00fcd3f46 100644 --- a/schema/image-index-schema.json +++ b/schema/image-index-schema.json @@ -1,6 +1,6 @@ { "description": "OpenContainer Image Index Specification", - "$schema": "http://json-schema.org/draft-04/schema#", + "$schema": "https://json-schema.org/draft-04/schema#", "id": "https://opencontainers.org/schema/image/index", "type": "object", "properties": { diff --git a/schema/image-layout-schema.json b/schema/image-layout-schema.json index 874d2174c..714ed82a2 100644 --- a/schema/image-layout-schema.json +++ b/schema/image-layout-schema.json @@ -1,6 +1,6 @@ { "description": "OpenContainer Image Layout Schema", - "$schema": "http://json-schema.org/draft-04/schema#", + "$schema": "https://json-schema.org/draft-04/schema#", "id": "https://opencontainers.org/schema/image/layout", "type": "object", "properties": { diff --git a/schema/image-manifest-schema.json b/schema/image-manifest-schema.json index ec00748e1..279abf8dc 100644 --- a/schema/image-manifest-schema.json +++ b/schema/image-manifest-schema.json @@ -1,6 +1,6 @@ { "description": "OpenContainer Image Manifest Specification", - "$schema": "http://json-schema.org/draft-04/schema#", + "$schema": "https://json-schema.org/draft-04/schema#", "id": "https://opencontainers.org/schema/image/manifest", "type": "object", "properties": { diff --git a/spec.md b/spec.md index 976ff7247..9250d9452 100644 --- a/spec.md +++ b/spec.md @@ -25,7 +25,7 @@ The goal of this specification is to enable the creation of interoperable tools ## Notational Conventions -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in [RFC 2119](http://tools.ietf.org/html/rfc2119) (Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997). +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119) (Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997). The key words "unspecified", "undefined", and "implementation-defined" are to be interpreted as described in the [rationale for the C99 standard][c99-unspecified]. @@ -64,5 +64,5 @@ Future versions of this specification may include the following OPTIONAL feature * Signatures that are based on signing image content address * Naming that is federated based on DNS and can be delegated -[c99-unspecified]: http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf#page=18 +[c99-unspecified]: https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf#page=18 [runtime-spec]: https://github.com/opencontainers/runtime-spec From 7e938c1d66321c07631b2bfc7f96036fa68ae794 Mon Sep 17 00:00:00 2001 From: Josh Dolitsky Date: Fri, 29 Apr 2022 08:12:41 -0500 Subject: [PATCH 81/88] Add Brandon as maintainer Signed-off-by: Josh Dolitsky --- CODEOWNERS | 2 +- MAINTAINERS | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 77d9ca9b5..6eb592ba8 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1 @@ -* @jonjohnsonjr @jonboulle @sajayantony @stevvooe @vbatts @cyphar +* @jonjohnsonjr @jonboulle @sajayantony @stevvooe @sudo-bmitch @vbatts @cyphar diff --git a/MAINTAINERS b/MAINTAINERS index 20199fc30..a28746615 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,3 +1,4 @@ +Brandon Mitchell (@sudo-bmitch) Jon Johnson (@jonjohnsonjr) Jonathan Boulle (@jonboulle) Sajay Antony (@sajayantony) From 12a895c9b55363b07f0d15318a1787d280be234d Mon Sep 17 00:00:00 2001 From: Brandon Mitchell Date: Tue, 10 May 2022 13:56:25 -0400 Subject: [PATCH 82/88] Pinning version of golangci-lint to support 1.16 Signed-off-by: Brandon Mitchell --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2d1e09cfb..4b083c8df 100644 --- a/Makefile +++ b/Makefile @@ -108,7 +108,7 @@ endif install.tools: $(TOOLS:%=.install.%) .install.lint: - go get github.com/golangci/golangci-lint/cmd/golangci-lint@latest + go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.45.2 .install.gitvalidation: go get -u github.com/vbatts/git-validation From 3692b98c4a8689e361cc8d3b3aa40321dddf74c1 Mon Sep 17 00:00:00 2001 From: nisha Date: Mon, 16 May 2022 09:50:08 -0700 Subject: [PATCH 83/88] Add maintainer nomination template This is a PR template to propose adding new maintainers Fixes #912 Signed-off-by: nisha --- .../maintainer_nomination.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE/maintainer_nomination.md diff --git a/.github/PULL_REQUEST_TEMPLATE/maintainer_nomination.md b/.github/PULL_REQUEST_TEMPLATE/maintainer_nomination.md new file mode 100644 index 000000000..6523d7a82 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/maintainer_nomination.md @@ -0,0 +1,21 @@ +# Nomination for a New Maintainer + +## Nominating Maintainer + +Name of the existing OCI maintainer with GitHub username + +## New Maintainer + +Name of the new maintainer with GitHub username + +## Justification + +Highlight any work contributed by the new maintainer. Examples of contributions may be: +- Community involvement in mailing lists and meetings +- Involvement in any OCI working groups +- Contributions to any of the OCI git repositories + +Other considerations may be: +- Diversity of organizations +- Time involved in the community +- Personal experience working with the new maintainer From 7a5c1f2f140578cb7204abdc5cf95b089ec28b7c Mon Sep 17 00:00:00 2001 From: Brandon Mitchell Date: Sun, 24 Jul 2022 15:36:05 -0400 Subject: [PATCH 84/88] Add regclient to implementations Signed-off-by: Brandon Mitchell --- implementations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/implementations.md b/implementations.md index 6b8bf8107..18dbe18e6 100644 --- a/implementations.md +++ b/implementations.md @@ -21,5 +21,6 @@ Projects or Companies currently adopting the OCI Image Specification * [coreos/rkt](https://github.com/coreos/rkt) * [box-builder/box](https://github.com/box-builder/box) * [coolljt0725/docker2oci](https://github.com/coolljt0725/docker2oci) +* [regclient/regclient](https://github.com/regclient/regclient) _(to add your project please open a [pull-request](https://github.com/opencontainers/image-spec/pulls))_ From e39541ab037966fd3960b699a64ac5a6e1010d1d Mon Sep 17 00:00:00 2001 From: Sajay Antony <1821104+sajayantony@users.noreply.github.com> Date: Thu, 25 Aug 2022 16:36:05 -0700 Subject: [PATCH 85/88] Update schema for mediaType validation (#933) Signed-off-by: Sajay Antony --- image-layout.md | 1 + schema/image-index-schema.json | 4 ++++ schema/image-manifest-schema.json | 4 ++++ schema/imageindex_test.go | 9 +++++++++ schema/manifest_test.go | 9 +++++++++ 5 files changed, 27 insertions(+) diff --git a/image-layout.md b/image-layout.md index 2ae591ab5..19f9a7dc3 100644 --- a/image-layout.md +++ b/image-layout.md @@ -162,6 +162,7 @@ Those tags will often be represented in an image-layout repository with matching ```json,title=Image%20Index&mediatype=application/vnd.oci.image.index.v1%2Bjson { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "application/vnd.oci.image.index.v1+json", diff --git a/schema/image-index-schema.json b/schema/image-index-schema.json index 00fcd3f46..e99131bf0 100644 --- a/schema/image-index-schema.json +++ b/schema/image-index-schema.json @@ -11,6 +11,10 @@ "minimum": 2, "maximum": 2 }, + "mediaType": { + "description": "the mediatype of the referenced object", + "$ref": "defs-descriptor.json#/definitions/mediaType" + }, "manifests": { "type": "array", "items": { diff --git a/schema/image-manifest-schema.json b/schema/image-manifest-schema.json index 279abf8dc..8286376eb 100644 --- a/schema/image-manifest-schema.json +++ b/schema/image-manifest-schema.json @@ -11,6 +11,10 @@ "minimum": 2, "maximum": 2 }, + "mediaType": { + "description": "the mediatype of the referenced object", + "$ref": "defs-descriptor.json#/definitions/mediaType" + }, "config": { "$ref": "content-descriptor.json" }, diff --git a/schema/imageindex_test.go b/schema/imageindex_test.go index e8ed82f0e..798fbbad0 100644 --- a/schema/imageindex_test.go +++ b/schema/imageindex_test.go @@ -31,6 +31,7 @@ func TestImageIndex(t *testing.T) { imageIndex: ` { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "invalid", @@ -52,6 +53,7 @@ func TestImageIndex(t *testing.T) { imageIndex: ` { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "application/vnd.oci.image.manifest.v1+json", @@ -73,6 +75,7 @@ func TestImageIndex(t *testing.T) { imageIndex: ` { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "application/vnd.oci.image.manifest.v1+json", @@ -93,6 +96,7 @@ func TestImageIndex(t *testing.T) { imageIndex: ` { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "application/vnd.oci.image.manifest.v1+json", @@ -113,6 +117,7 @@ func TestImageIndex(t *testing.T) { imageIndex: ` { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "invalid", @@ -134,6 +139,7 @@ func TestImageIndex(t *testing.T) { imageIndex: ` { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "", @@ -155,6 +161,7 @@ func TestImageIndex(t *testing.T) { imageIndex: ` { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "application/vnd.oci.image.manifest.v1+json", @@ -189,6 +196,7 @@ func TestImageIndex(t *testing.T) { imageIndex: ` { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "application/vnd.oci.image.manifest.v1+json", @@ -206,6 +214,7 @@ func TestImageIndex(t *testing.T) { imageIndex: ` { "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "application/customized.manifest+json", diff --git a/schema/manifest_test.go b/schema/manifest_test.go index 0af67a4d1..cfc43e973 100644 --- a/schema/manifest_test.go +++ b/schema/manifest_test.go @@ -31,6 +31,7 @@ func TestManifest(t *testing.T) { manifest: ` { "schemaVersion": 2, + "mediaType" : "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "invalid", "size": 1470, @@ -53,6 +54,8 @@ func TestManifest(t *testing.T) { manifest: ` { "schemaVersion": 2, + "mediaType" : "application/vnd.oci.image.manifest.v1+json", + "config": { "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "size": "1470", @@ -75,6 +78,7 @@ func TestManifest(t *testing.T) { manifest: ` { "schemaVersion": 2, + "mediaType" : "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "size": 1470, @@ -97,6 +101,7 @@ func TestManifest(t *testing.T) { manifest: ` { "schemaVersion": 2, + "mediaType" : "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "size": 1470, @@ -133,6 +138,7 @@ func TestManifest(t *testing.T) { manifest: ` { "schemaVersion": 2, + "mediaType" : "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "size": 1470, @@ -165,6 +171,7 @@ func TestManifest(t *testing.T) { manifest: ` { "schemaVersion": 2, + "mediaType" : "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "size": 1470, @@ -181,6 +188,7 @@ func TestManifest(t *testing.T) { manifest: ` { "schemaVersion": 2, + "mediaType" : "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "size": 1470, @@ -212,6 +220,7 @@ func TestManifest(t *testing.T) { manifest: ` { "schemaVersion": 2, + "mediaType" : "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "size": 1470, From 019e2ccec4a51300156e334a6e4b995521ec4e39 Mon Sep 17 00:00:00 2001 From: Austin Vazquez Date: Mon, 29 Aug 2022 23:37:31 +0000 Subject: [PATCH 86/88] Remove io/ioutil references io/ioutil is deprecated since Go 1.16 Signed-off-by: Austin Vazquez --- schema/loader.go | 3 +-- schema/spec_test.go | 3 +-- schema/validator.go | 11 +++++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/schema/loader.go b/schema/loader.go index d6da9d89f..d7737582c 100644 --- a/schema/loader.go +++ b/schema/loader.go @@ -19,7 +19,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "net/http" "strings" @@ -68,7 +67,7 @@ func (factory *fsLoaderFactory) refContents(ref gojsonreference.JsonReference) ( } defer f.Close() - return ioutil.ReadAll(f) + return io.ReadAll(f) } // fsLoader implements gojsonschema.JSONLoader by reading the document named by source from a fsLoaderFactory. diff --git a/schema/spec_test.go b/schema/spec_test.go index dd3295e37..e8dde99f0 100644 --- a/schema/spec_test.go +++ b/schema/spec_test.go @@ -18,7 +18,6 @@ import ( "bytes" "fmt" "io" - "io/ioutil" "net/url" "os" "path/filepath" @@ -183,7 +182,7 @@ func parseExample(lang, body string) (e example) { } func extractExamples(rd io.Reader) ([]example, error) { - p, err := ioutil.ReadAll(rd) + p, err := io.ReadAll(rd) if err != nil { return nil, err } diff --git a/schema/validator.go b/schema/validator.go index bc7568a34..e219d38c2 100644 --- a/schema/validator.go +++ b/schema/validator.go @@ -19,7 +19,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "regexp" digest "github.com/opencontainers/go-digest" @@ -52,7 +51,7 @@ func (e ValidationError) Error() string { // Validate validates the given reader against the schema of the wrapped media type. func (v Validator) Validate(src io.Reader) error { - buf, err := ioutil.ReadAll(src) + buf, err := io.ReadAll(src) if err != nil { return errors.Wrap(err, "unable to read the document file") } @@ -100,7 +99,7 @@ func (v unimplemented) Validate(src io.Reader) error { func validateManifest(r io.Reader) error { header := v1.Manifest{} - buf, err := ioutil.ReadAll(r) + buf, err := io.ReadAll(r) if err != nil { return errors.Wrapf(err, "error reading the io stream") } @@ -130,7 +129,7 @@ func validateManifest(r io.Reader) error { func validateDescriptor(r io.Reader) error { header := v1.Descriptor{} - buf, err := ioutil.ReadAll(r) + buf, err := io.ReadAll(r) if err != nil { return errors.Wrapf(err, "error reading the io stream") } @@ -152,7 +151,7 @@ func validateDescriptor(r io.Reader) error { func validateIndex(r io.Reader) error { header := v1.Index{} - buf, err := ioutil.ReadAll(r) + buf, err := io.ReadAll(r) if err != nil { return errors.Wrapf(err, "error reading the io stream") } @@ -179,7 +178,7 @@ func validateIndex(r io.Reader) error { func validateConfig(r io.Reader) error { header := v1.Image{} - buf, err := ioutil.ReadAll(r) + buf, err := io.ReadAll(r) if err != nil { return errors.Wrapf(err, "error reading the io stream") } From b352bf85a6f0e4303aa828689ca159dc88dcc1e1 Mon Sep 17 00:00:00 2001 From: Brandon Mitchell Date: Fri, 9 Sep 2022 16:32:15 -0400 Subject: [PATCH 87/88] Bump from Go 1.16 to 1.17 Signed-off-by: Brandon Mitchell --- .github/workflows/docs-and-linting.yml | 9 ++++----- go.mod | 4 +++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/docs-and-linting.yml b/.github/workflows/docs-and-linting.yml index 8190dacce..7e6dff468 100644 --- a/.github/workflows/docs-and-linting.yml +++ b/.github/workflows/docs-and-linting.yml @@ -9,17 +9,16 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - go: ['1.16', '1.17'] + go: ['1.17', '1.18', '1.19'] name: Documentation and Linting steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: path: go/src/github.com/opencontainers/image-spec - # commit for v1 release - - uses: actions/setup-go@0caeaed6fd66a828038c2da3c0f662a42862658f + - uses: actions/setup-go@v3 with: go-version: ${{ matrix.go }} @@ -40,7 +39,7 @@ jobs: make docs - name: documentation artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: oci-docs path: go/src/github.com/opencontainers/image-spec/output diff --git a/go.mod b/go.mod index 257431cf9..d2c12ecfd 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/opencontainers/image-spec -go 1.16 +go 1.17 require ( github.com/davecgh/go-spew v1.1.1 // indirect @@ -12,3 +12,5 @@ require ( github.com/xeipuuv/gojsonschema v1.2.0 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect ) + +require github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect From e90fb709ea26a3b9c464cc3a4b48769258f613c2 Mon Sep 17 00:00:00 2001 From: Brandon Mitchell Date: Fri, 9 Sep 2022 17:04:15 -0400 Subject: [PATCH 88/88] Use go install and full path to commands Signed-off-by: Brandon Mitchell --- Makefile | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 4b083c8df..0c763b199 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,8 @@ EPOCH_TEST_COMMIT ?= v0.2.0 DOCKER ?= $(shell command -v docker 2>/dev/null) PANDOC ?= $(shell command -v pandoc 2>/dev/null) +GOPATH:=$(shell go env GOPATH) + OUTPUT_DIRNAME ?= output DOC_FILENAME ?= oci-image-spec @@ -87,7 +89,7 @@ check-license: lint: .install.lint @echo "checking lint" - @GO111MODULE=on golangci-lint run + @GO111MODULE=on $(GOPATH)/bin/golangci-lint run test: schema/fs.go go test -race -cover $(shell go list ./... | grep -v /vendor/) @@ -100,18 +102,22 @@ img/%.png: img/%.dot .gitvalidation: @which git-validation > /dev/null 2>/dev/null || (echo "ERROR: git-validation not found. Consider 'make install.tools' target" && false) ifdef GITHUB_SHA - git-validation -q -run DCO,short-subject,dangling-whitespace -range $(GITHUB_SHA)..HEAD + $(GOPATH)/bin/git-validation -q -run DCO,short-subject,dangling-whitespace -range $(GITHUB_SHA)..HEAD else - git-validation -v -run DCO,short-subject,dangling-whitespace -range $(EPOCH_TEST_COMMIT)..HEAD + $(GOPATH)/bin/git-validation -v -run DCO,short-subject,dangling-whitespace -range $(EPOCH_TEST_COMMIT)..HEAD endif install.tools: $(TOOLS:%=.install.%) .install.lint: - go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.45.2 + case "$$(go env GOVERSION)" in \ + go1.17.*) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.47.3;; \ + go1.18.*) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.47.3;; \ + *) go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest;; \ + esac .install.gitvalidation: - go get -u github.com/vbatts/git-validation + go install github.com/vbatts/git-validation@latest clean: rm -rf *~ $(OUTPUT_DIRNAME) header.html