diff --git a/.gitignore b/.gitignore
index 6bc11ab..31f2f6e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
+# Idea files
+./idea
+
# Binaries for programs and plugins
*.exe
*.dll
@@ -21,3 +24,111 @@ bro/
*.gz
ui/__debug_bin
.DS_Store
+
+# Created by https://www.toptal.com/developers/gitignore/api/intellij
+# Edit at https://www.toptal.com/developers/gitignore?templates=intellij
+
+### Intellij ###
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# Generated files
+.idea/**/contentModel.xml
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn. Uncomment if using
+# auto-import.
+# .idea/artifacts
+# .idea/compiler.xml
+# .idea/jarRepositories.xml
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+# *.iml
+# *.ipr
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
+# Android studio 3.1+ serialized cache file
+.idea/caches/build_file_checksums.ser
+
+### Intellij Patch ###
+# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
+
+# *.iml
+# modules.xml
+# .idea/misc.xml
+# *.ipr
+
+# Sonarlint plugin
+# https://plugins.jetbrains.com/plugin/7973-sonarlint
+.idea/**/sonarlint/
+
+# SonarQube Plugin
+# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
+.idea/**/sonarIssues.xml
+
+# Markdown Navigator plugin
+# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
+.idea/**/markdown-navigator.xml
+.idea/**/markdown-navigator-enh.xml
+.idea/**/markdown-navigator/
+
+# Cache file creation bug
+# See https://youtrack.jetbrains.com/issue/JBR-2257
+.idea/$CACHE_FILE$
+
+# CodeStream plugin
+# https://plugins.jetbrains.com/plugin/12206-codestream
+.idea/codestream.xml
+
+# End of https://www.toptal.com/developers/gitignore/api/intellij
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..73f69e0
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/graboid.iml b/.idea/graboid.iml
new file mode 100644
index 0000000..c956989
--- /dev/null
+++ b/.idea/graboid.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..28a804d
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..172337e
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cmd/extract.go b/cmd/extract.go
index 673077d..9419927 100644
--- a/cmd/extract.go
+++ b/cmd/extract.go
@@ -32,7 +32,6 @@ import (
"github.com/apex/log"
"github.com/blacktop/graboid/pkg/image"
- // "github.com/dustin/go-humanize"
ui "github.com/gizak/termui/v3"
"github.com/gizak/termui/v3/widgets"
"github.com/spf13/cobra"
@@ -48,7 +47,7 @@ var extractCmd = &cobra.Command{
Args: cobra.MinimumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
- if Verbose {
+ if config.Verbose {
log.SetLevel(log.DebugLevel)
}
diff --git a/cmd/root.go b/cmd/root.go
index d81a2c3..d333770 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -38,23 +38,27 @@ import (
"github.com/apex/log"
clihander "github.com/apex/log/handlers/cli"
"github.com/blacktop/graboid/pkg/image"
- homedir "github.com/mitchellh/go-homedir"
+ "github.com/mitchellh/go-homedir"
"github.com/spf13/viper"
)
-var (
- cfgFile string
+var config struct {
+ File string
// Verbose boolean flag for verbose logging
Verbose bool
- // IndexDomain is the index domain
- IndexDomain string
+ // IndexUrl is the index domain
+ IndexUrl string
// RegistryDomain is the registry domain
RegistryDomain string
// ImageName is the docker image to pull
ImageName string
// ImageTag is the docker image tag to pull
ImageTag string
-)
+
+ // Registry Authentication
+ Username string
+ Password string
+}
func getFmtStr() string {
if runtime.GOOS == "windows" {
@@ -76,7 +80,7 @@ func createManifest(tempDir, confFile string, layerFiles []string) (string, erro
m := image.Manifest{
Config: confFile,
Layers: layerFiles,
- RepoTags: []string{ImageName + ":" + ImageTag},
+ RepoTags: []string{config.ImageName + ":" + config.ImageTag},
}
manifestArray = append(manifestArray, m)
mJSON, err := json.Marshal(manifestArray)
@@ -140,31 +144,31 @@ var rootCmd = &cobra.Command{
Args: cobra.MinimumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
- if Verbose {
+ if config.Verbose {
log.SetLevel(log.DebugLevel)
}
insecure, _ := cmd.Flags().GetBool("insecure")
if strings.Contains(args[0], ":") {
imageParts := strings.Split(args[0], ":")
- ImageName = imageParts[0]
- ImageTag = imageParts[1]
+ config.ImageName = imageParts[0]
+ config.ImageTag = imageParts[1]
} else {
- ImageName = args[0]
- ImageTag = "latest"
+ config.ImageName = args[0]
+ config.ImageTag = "latest"
}
- // test for official image name
- if !strings.Contains(ImageName, "/") {
- ImageName = "library/" + ImageName
+ // test for official image name (Docker Registry specific)
+ if !strings.Contains(config.ImageName, "/") && config.RegistryDomain == "" {
+ config.ImageName = "library/" + config.ImageName
}
// Get image manifest
log.WithFields(log.Fields{
- "image": ImageName,
+ "image": config.ImageName,
}).Infof(getFmtStr(), "Querying Registry")
- registry := initRegistry(ImageName, insecure)
+ registry := initRegistry(config.ImageName, insecure, config.Username, config.Password)
- mF, err := registry.ReposManifests(ImageName, ImageTag)
+ mF, err := registry.ReposManifests(config.ImageName, config.ImageTag)
if err != nil {
log.Fatal(err.Error())
}
@@ -176,13 +180,13 @@ var rootCmd = &cobra.Command{
defer os.RemoveAll(dir) // clean up
log.Infof(getFmtStr(), "GET CONFIG")
- cfile, err := registry.RepoGetConfig(dir, ImageName, mF)
+ cfile, err := registry.RepoGetConfig(dir, config.ImageName, mF)
if err != nil {
log.Fatal(err.Error())
}
log.Infof(getFmtStr(), "GET LAYERS")
- lfiles, err := registry.RepoGetLayers(dir, ImageName, mF)
+ lfiles, err := registry.RepoGetLayers(dir, config.ImageName, mF)
if err != nil {
log.Fatal(err.Error())
}
@@ -193,7 +197,11 @@ var rootCmd = &cobra.Command{
log.Fatal(err.Error())
}
- tarFile := fmt.Sprintf("%s_%s.tar.gz", strings.Replace(ImageName, "/", "_", 1), ImageTag)
+ tarFile := fmt.Sprintf("%s_%s.tar.gz",
+ strings.Replace(config.ImageName, "/", "_", 1),
+ config.ImageTag,
+ )
+
if runtime.GOOS == "windows" {
log.Infof("%s: %s", "CREATE docker image tarball", tarFile)
} else {
@@ -225,24 +233,22 @@ func init() {
// Cobra supports persistent flags, which, if defined here,
// will be global for your application.
- rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.graboid.yaml)")
-
- rootCmd.PersistentFlags().StringVar(&IndexDomain, "index", "https://index.docker.io", "override index endpoint")
- rootCmd.PersistentFlags().StringVar(&RegistryDomain, "registry", "", "override registry endpoint")
- rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "V", false, "verbose output")
+ rootCmd.PersistentFlags().StringVar(&config.File, "config", "", "config file (default is $HOME/.graboid.yaml)")
+ rootCmd.PersistentFlags().StringVar(&config.IndexUrl, "index", "", "override index endpoint")
+ rootCmd.PersistentFlags().StringVar(&config.RegistryDomain, "registry", "", "override registry endpoint")
+ rootCmd.PersistentFlags().StringVar(&config.Username, "username", "", "Username")
+ rootCmd.PersistentFlags().StringVar(&config.Password, "password", "", "Password")
+ rootCmd.PersistentFlags().BoolVarP(&config.Verbose, "verbose", "V", false, "verbose output")
- // Cobra also supports local flags, which will only run
- // when this action is called directly.
- // rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
rootCmd.Flags().String("proxy", "", "HTTP/HTTPS proxy")
rootCmd.Flags().Bool("insecure", false, "do not verify ssl certs")
}
// initConfig reads in config file and ENV variables if set.
func initConfig() {
- if cfgFile != "" {
+ if config.File != "" {
// Use config file from the flag.
- viper.SetConfigFile(cfgFile)
+ viper.SetConfigFile(config.File)
} else {
// Find home directory.
home, err := homedir.Dir()
@@ -251,15 +257,36 @@ func initConfig() {
os.Exit(1)
}
- // Search config in home directory with name ".graboid" (without extension).
+ // Search config in home directory with name ".graboid.{yml,json,yaml,...}".
viper.AddConfigPath(home)
viper.SetConfigName(".graboid")
}
- viper.AutomaticEnv() // read in environment variables that match
-
// If a config file is found, read it in.
- if err := viper.ReadInConfig(); err == nil {
+ err := viper.ReadInConfig(); if err == nil {
fmt.Println("Using config file:", viper.ConfigFileUsed())
}
+
+
+ // Set config entries from file, or defaults
+ if viper.GetString("index") == "" {
+ config.IndexUrl = "https://index.docker.io"
+ } else {
+ config.IndexUrl = viper.GetString("index")
+ }
+
+ if viper.GetString("registry") == "" {
+ config.RegistryDomain = "https://registry-1.docker.com"
+ } else {
+ config.RegistryDomain = viper.GetString("registry")
+ }
+
+ if viper.GetString("username") != "" {
+ config.Username = viper.GetString("username")
+ }
+
+ if viper.GetString("password") != "" {
+ config.Password = viper.GetString("password")
+ }
+
}
diff --git a/cmd/tags.go b/cmd/tags.go
index 6e34481..b29b4d4 100644
--- a/cmd/tags.go
+++ b/cmd/tags.go
@@ -30,29 +30,27 @@ import (
"github.com/spf13/cobra"
)
-func initRegistry(reposName string, insecure bool) *registry.Registry {
+func initRegistry(reposName string, insecure bool, username string, password string) *registry.Registry {
config := registry.Config{
- Endpoint: IndexDomain,
- RegistryDomain: RegistryDomain,
+ Endpoint: config.IndexUrl,
+ RegistryDomain: config.RegistryDomain,
Proxy: "",
// Proxy: Proxy,
Insecure: insecure,
RepoName: reposName,
- Username: "",
- Password: "",
- // Username: user,
- // Password: passwd,
+ Username: username,
+ Password: password,
}
- registry, err := registry.New(config)
+ reg, err := registry.New(config)
if err != nil {
log.Fatal(err.Error())
}
log.Debug("getting auth token")
- err = registry.GetToken()
+ err = reg.GetToken()
if err != nil {
log.Fatal(err.Error())
}
- return registry
+ return reg
}
// tagsCmd represents the tags command
@@ -62,12 +60,12 @@ var tagsCmd = &cobra.Command{
Args: cobra.MinimumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
- if Verbose {
+ if config.Verbose {
log.SetLevel(log.DebugLevel)
}
insecure, _ := cmd.Flags().GetBool("insecure")
- registry := initRegistry(strings.Split(args[0], ":")[0], insecure)
+ registry := initRegistry(strings.Split(args[0], ":")[0], insecure, config.Username, config.Password)
tags, err := registry.ReposTags(strings.Split(args[0], ":")[0])
if err != nil {
diff --git a/docs/graboid.go b/docs/graboid.go
index 2bd52c0..fb64448 100644
--- a/docs/graboid.go
+++ b/docs/graboid.go
@@ -27,7 +27,7 @@ var (
Version string
// BuildTime stores the plugin's build time
BuildTime string
- // IndexDomain is the index domain
+ // IndexUrl is the index domain
IndexDomain string
// RegistryDomain is the registry domain
RegistryDomain string
diff --git a/go.mod b/go.mod
index 1b12ce0..898e93e 100644
--- a/go.mod
+++ b/go.mod
@@ -1,25 +1,27 @@
module github.com/blacktop/graboid
+replace (
+ github.com/docker/distribution => github.com/docker/distribution v0.0.0-20200826222420-2800ab02245e
+ github.com/docker/docker => github.com/docker/docker v17.12.0-ce-rc1.0.20200913044305-bf6f0d82bc24+incompatible
+)
+
require (
github.com/apex/log v1.1.1
github.com/blacktop/ipsw v0.0.0-20190907012325-eda024ad7908
- github.com/docker/docker v1.13.1
+ github.com/docker/docker v17.12.0-ce-rc1.0.20200913044305-bf6f0d82bc24+incompatible
github.com/docker/go-units v0.4.0 // indirect
github.com/dustin/go-humanize v1.0.0
github.com/gizak/termui/v3 v3.1.0
- github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
github.com/mattn/go-isatty v0.0.9 // indirect
github.com/mattn/go-runewidth v0.0.4 // indirect
github.com/mitchellh/go-homedir v1.1.0
github.com/nsf/termbox-go v0.0.0-20190817171036-93860e161317 // indirect
- github.com/opencontainers/go-digest v1.0.0-rc1
+ github.com/opencontainers/go-digest v1.0.0
github.com/phayes/permbits v0.0.0-20190612203442-39d7c581d2ee // indirect
- github.com/sirupsen/logrus v1.4.2 // indirect
github.com/spf13/cobra v0.0.5
github.com/spf13/viper v1.4.0
- github.com/stretchr/testify v1.4.0 // indirect
- github.com/wagoodman/dive v0.8.1
- golang.org/x/sys v0.0.0-20190907184412-d223b2b6db03 // indirect
+ github.com/urfave/cli v1.22.4
+ github.com/wagoodman/dive v0.9.3-0.20200914104330-2db716d1919f
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/cheggaaa/pb.v1 v1.0.16
)
diff --git a/go.sum b/go.sum
index 4d65eb2..8137ee1 100644
--- a/go.sum
+++ b/go.sum
@@ -1,10 +1,14 @@
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=
github.com/AlecAivazis/survey/v2 v2.0.1/go.mod h1:WYBhg6f0y/fNYUuesWQc0PKbJcEliGcYHB9sNT3Bg74=
+github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
+github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Microsoft/go-winio v0.4.11 h1:zoIOcVf0xPN1tnMVbTtEdI+P8OofVk3NObnwOQ6nK2Q=
github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
+github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc=
github.com/Netflix/go-expect v0.0.0-20180928190340-9d1f4485533b/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc=
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=
@@ -12,6 +16,7 @@ github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/OpenPeeDeeP/depguard v0.0.0-20180806142446-a69c782687b2/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o=
github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg=
+github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@@ -23,12 +28,20 @@ github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy
github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
+github.com/aws/aws-sdk-go v1.34.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
github.com/blacktop/ipsw v0.0.0-20190907012325-eda024ad7908 h1:uq4i/2Sw9+qOJm5pd99tYfD4tph0X6OyP6zvI88bUPY=
github.com/blacktop/ipsw v0.0.0-20190907012325-eda024ad7908/go.mod h1:pF+DC7gVoNoeQX4ywXAB16aqTxEyy/+Liuvlua2ngfg=
github.com/blacktop/lzss v0.1.0/go.mod h1:v0Qp9FkNDSCRvsycRnyUojUBvbtaQBpjw/StLMzZ8Po=
+github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
+github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
+github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
+github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
+github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
@@ -38,25 +51,38 @@ github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8Nz
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
+github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
+github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
+github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
github.com/docker/cli v0.0.0-20190303104010-8ddde26af67f h1:avQULAD2yl7pQnDbjIxI/H5cwpRn8H/NeMNIbhnDtfI=
github.com/docker/cli v0.0.0-20190303104010-8ddde26af67f/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
+github.com/docker/cli v0.0.0-20190906153656-016a3232168d/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/distribution v0.0.0-20181126153310-93e082742a009850ac46962150b2f652a822c5ff h1:dtgxyWsA/HV5EbB2FO4YKoCKEjLwr8SXZQCGjA9mRx4=
github.com/docker/distribution v0.0.0-20181126153310-93e082742a009850ac46962150b2f652a822c5ff/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
+github.com/docker/distribution v0.0.0-20200826222420-2800ab02245e/go.mod h1:WT7YsGUvF6+xhY8u7G9zLnX1g5tNDLvXCOEGXmbIzLw=
github.com/docker/docker v0.0.0-20181126153310-0b7cb16dde4a20d024c7be59801d63bcfd18611b/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker v1.13.1 h1:IkZjBSIc8hBjLpqeAbeE5mca5mNgeatLHBy3GO78BWo=
github.com/docker/docker v1.13.1/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v17.12.0-ce-rc1.0.20200913044305-bf6f0d82bc24+incompatible h1:BTOAFQnB8/+zPTfOuDDxzTkTeOoiyMB/NR3fGAStvrk=
+github.com/docker/docker v17.12.0-ce-rc1.0.20200913044305-bf6f0d82bc24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
+github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
@@ -64,6 +90,7 @@ github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gizak/termui/v3 v3.1.0 h1:ZZmVDgwHl7gR7elfKf1xc4IudXZ5qqfDh4wExk4Iajc=
github.com/gizak/termui/v3 v3.1.0/go.mod h1:bXQEBkJpzxUAKf0+xq9MSWAvWZlE7c+aidmyFlkYTrY=
@@ -73,6 +100,7 @@ github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTD
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.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
+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-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4=
github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ=
@@ -90,6 +118,7 @@ github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
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/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E=
@@ -97,6 +126,7 @@ github.com/golang/mock v1.0.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
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/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4=
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk=
github.com/golangci/errcheck v0.0.0-20181003203344-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0=
@@ -116,11 +146,15 @@ github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunE
github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
+github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
@@ -137,14 +171,18 @@ github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NH
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0=
github.com/jroimartin/gocui v0.4.0 h1:52jnalstgmc25FmtGcWqa0tcbMEWS6RpFLsOIO+I+E8=
github.com/jroimartin/gocui v0.4.0/go.mod h1:7i7bbj99OgFHzo7kB2zPb8pXLqMBSQegY7azfqXMkyY=
+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/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v0.0.0-20161130080628-0de1eaf82fa3/go.mod h1:jxZFDH7ILpTPQTk+E2s+z4CUas9lVNjIuKR4c5/zKgM=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
@@ -154,6 +192,7 @@ github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo
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 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -164,12 +203,15 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e h1:9MlwzLdW7QSDrhDjFlsEYmxpFyIoXmYRon3dt0io31k=
github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
+github.com/logrusorgru/aurora v0.0.0-20190803045625-94edacc10f9b/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
github.com/lunixbochs/vtclean v0.0.0-20180621232353-2d01aacdc34a h1:weJVJJRzAJBFRlAiJQROKQs8oC9vOxvm4rZmBBk0ONw=
github.com/lunixbochs/vtclean v0.0.0-20180621232353-2d01aacdc34a/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
+github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
@@ -202,10 +244,17 @@ github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:F
github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
+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/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/mozilla/tls-observatory v0.0.0-20180409132520-8791a200eb40/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nbutton23/zxcvbn-go v0.0.0-20160627004424-a22cb81b2ecd/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
+github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
github.com/nsf/termbox-go v0.0.0-20181027232701-60ab7e3d12ed/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ=
github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d h1:x3S6kxmy49zXVVyhcnrFqxvNVCBPb2KZ9hV2RBdS840=
github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ=
@@ -219,6 +268,9 @@ github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+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/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
@@ -231,33 +283,50 @@ github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
github.com/prometheus/client_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/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
github.com/rakyll/statik v0.1.6/go.mod h1:OEi9wJV/fMUAGx1eNjq75DKDsJVuEv1U0oYdX6GX8Zs=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
+github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
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 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs=
@@ -284,6 +353,8 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn
github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
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.0.2/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=
github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
@@ -297,6 +368,8 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/timakin/bodyclose v0.0.0-20190407043127-4a873e97b2bb/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk=
github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0=
github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0=
@@ -305,6 +378,8 @@ github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKw
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/urfave/cli v1.22.4 h1:u7tSpNPPswAFymm8IehJhy4uJMlUuU/GmqSkvJ1InXA=
+github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s=
github.com/valyala/quicktemplate v1.1.1/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4=
@@ -312,10 +387,16 @@ github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV
github.com/vbauerster/mpb/v4 v4.8.4/go.mod h1:MxQf3eHZgvVuUmfdEO8DId0YhjNqqFQBEwrzZa06BH4=
github.com/wagoodman/dive v0.8.1 h1:nae9GNZAdHw5kvQLvip3Fa7EEPBwR5eJudEV6dHN++0=
github.com/wagoodman/dive v0.8.1/go.mod h1:HhIt9UoKgpFdAakN/wdKcxgeBtGQv68tlQsXvCwYhwg=
+github.com/wagoodman/dive v0.9.2 h1:E9XUj7PNJYhTpoUzIYeJ4PAt+vKzS50RBg/E9XFaywo=
+github.com/wagoodman/dive v0.9.3-0.20200914104330-2db716d1919f h1:Csjm1JmcqNzHVrTfRBTjJPFkGTsRuyCWt4nQbOs5oIo=
+github.com/wagoodman/dive v0.9.3-0.20200914104330-2db716d1919f/go.mod h1:hu9HrOOsKpEUdZppz6M0hoBbi/c6newSg8jqdCnRssw=
github.com/wagoodman/keybinding v0.0.0-20181213133715-6a824da6df05 h1:YMcRwVDe8DLDZ/vrhuImCfqjjG/+gZs6SF61DDQkL/8=
github.com/wagoodman/keybinding v0.0.0-20181213133715-6a824da6df05/go.mod h1:gXFkc2sM2o06uzn5Lgo6Ql76uweGdxNfeAlFyKiHAdk=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
+github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
+github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
+github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
@@ -327,24 +408,34 @@ golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
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-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+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-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-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 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -363,12 +454,16 @@ golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190530182044-ad28b68e88f1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190907184412-d223b2b6db03 h1:b3JiLYVaG9kHjTcOQIoUh978YMCO7oVTQQBLudU47zY=
golang.org/x/sys v0.0.0-20190907184412-d223b2b6db03/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 h1:sfkvUWPNGwSV+8/fNqctR5lS2AqCSqYwXdrjCxp/dXo=
+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/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.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
@@ -379,22 +474,31 @@ golang.org/x/tools v0.0.0-20170915040203-e531a2a1c15f/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/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-20190121143147-24cd39ecf745/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
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/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190620144150-6af8c5fc6601/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
+google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/pkg/image/image.go b/pkg/image/image.go
index e55d89d..1c4a507 100644
--- a/pkg/image/image.go
+++ b/pkg/image/image.go
@@ -13,7 +13,7 @@ import (
"github.com/dustin/go-humanize"
"github.com/gizak/termui/v3/widgets"
- "github.com/wagoodman/dive/filetree"
+ "github.com/wagoodman/dive/dive/filetree"
)
// Parse parses an image tar.gz file
@@ -148,7 +148,7 @@ func (i *Tar) getFileList(r io.Reader) ([]filetree.FileInfo, error) {
case tar.TypeXHeader:
return nil, fmt.Errorf("unexptected tar file (XHeader): type=%v name=%s", header.Typeflag, name)
default:
- files = append(files, filetree.NewFileInfo(tr, header, name))
+ files = append(files, filetree.NewFileInfoFromTarHeader(tr, header, name))
}
}
diff --git a/pkg/image/layer.go b/pkg/image/layer.go
index d74caf4..cf5ef90 100644
--- a/pkg/image/layer.go
+++ b/pkg/image/layer.go
@@ -5,7 +5,7 @@ import (
"strings"
"github.com/dustin/go-humanize"
- "github.com/wagoodman/dive/filetree"
+ "github.com/wagoodman/dive/dive/filetree"
)
const (
diff --git a/pkg/image/types.go b/pkg/image/types.go
index 381ea6a..4784a35 100644
--- a/pkg/image/types.go
+++ b/pkg/image/types.go
@@ -7,7 +7,7 @@ import (
"github.com/docker/docker/api/types/container"
"github.com/opencontainers/go-digest"
- "github.com/wagoodman/dive/filetree"
+ "github.com/wagoodman/dive/dive/filetree"
)
type diffID digest.Digest
diff --git a/pkg/registry/registry.go b/pkg/registry/registry.go
index af7a83d..3b73c89 100644
--- a/pkg/registry/registry.go
+++ b/pkg/registry/registry.go
@@ -2,6 +2,7 @@ package registry
import (
"crypto/tls"
+ "encoding/base64"
"encoding/json"
"fmt"
"io"
@@ -10,6 +11,7 @@ import (
"net/url"
"os"
"path/filepath"
+ "regexp"
"strings"
"time"
@@ -43,7 +45,7 @@ type auth struct {
Token string `json:"token,omitempty"`
AccessToken string `json:"access_token,omitempty"`
ExpiresIn int `json:"expires_in,omitempty"`
- IssuedAt time.Time `json:"issued_at,omitempty"`
+ IssuedAt *time.Time `json:"issued_at,omitempty"`
}
// Tags is the image tags struct
@@ -85,7 +87,10 @@ func getProxy(proxy string) func(*http.Request) (*url.URL, error) {
// TokenExpired returns wheither or not an auth token has expired
func (reg *Registry) TokenExpired() bool {
- duration := time.Since(reg.Auth.IssuedAt)
+ if reg.Auth.IssuedAt == nil {
+ return false
+ }
+ duration := time.Since(*reg.Auth.IssuedAt)
if int(duration.Seconds()) > reg.Auth.ExpiresIn {
log.Warn("auth token expired")
return true
@@ -129,9 +134,49 @@ func New(rc Config) (*Registry, error) {
Config: rc}, nil
}
-// GetToken retrives a docker registry API pull token
+// GetToken retrieves a docker registry API pull token
func (reg *Registry) GetToken() error {
- u := fmt.Sprintf("https://auth.docker.io/token?service=registry.docker.io&scope=repository:%s:pull", reg.Config.RepoName)
+ baseUrl, err := reg.getUrl("/v2/")
+ if err != nil {
+ return err
+ }
+
+ req, err := http.NewRequest("GET", baseUrl.String(), nil)
+ if err != nil {
+ return err
+ }
+
+ res, err := reg.client.Do(req)
+ if err != nil {
+ return err
+ }
+
+ if res.StatusCode == http.StatusUnauthorized {
+ // Authentication failed
+ // Log-in to specified realm
+
+ unableToAuth := func(err error) error {
+ return fmt.Errorf("unable to authenticate with %s: %v", baseUrl, err)
+ }
+
+ wwwAuthHeader := getWwwAuthHeader(res)
+
+ if wwwAuthHeader == "" {
+ return unableToAuth(fmt.Errorf("WWW-Authenticate header is missing"))
+ }
+
+ authHeader, err := parseAuthHeader(wwwAuthHeader)
+ if err != nil {
+ return unableToAuth(err)
+ }
+
+ err = reg.authenticate(authHeader.Scheme, authHeader.Realm)
+ if err != nil {
+ return unableToAuth(err)
+ }
+ }
+
+ /*u := fmt.Sprintf("https://auth.docker.io/token?service=registry.docker.io&scope=repository:%s:pull", reg.Config.RepoName)
req, err := http.NewRequest("GET", u, nil)
if err != nil {
return err
@@ -161,11 +206,55 @@ func (reg *Registry) GetToken() error {
}
reg.Auth = *a
- log.WithField("token", a.Token).Debugf("got token")
+ log.WithField("token", a.Token).Debugf("got token")*/
return nil
}
+func getWwwAuthHeader(res *http.Response) string {
+ var wwwAuthHeader string
+ for k, v := range res.Header {
+ if strings.ToLower(k) == strings.ToLower("WWW-Authenticate") {
+ wwwAuthHeader = v[0]
+ break
+ }
+ }
+ return wwwAuthHeader
+}
+
+type AuthHeader struct {
+ Scheme string
+ Realm string
+ Other map[string]string
+}
+
+func parseAuthHeader(header string) (*AuthHeader, error) {
+ authHeaderRegex := regexp.MustCompile("^(\\S+) realm=\"(.*?)\"(?:,(.*)|)$")
+ if !authHeaderRegex.MatchString(header) {
+ return nil, fmt.Errorf("invalid WWW-Authenticate header")
+ }
+
+
+
+ matches := authHeaderRegex.FindAllStringSubmatch(header, -1)
+ other := strings.Split(matches[0][3], ",")
+
+ var splitOthers = map[string]string{}
+
+ for _, v := range other {
+ split := strings.Split(v, "=")
+ if len(split) == 2 {
+ splitOthers[split[0]] = split[1]
+ }
+ }
+
+ return &AuthHeader{
+ Scheme: matches[0][1],
+ Realm: matches[0][2],
+ Other: splitOthers,
+ }, nil
+}
+
func (reg *Registry) doGet(url string, headers map[string]string) (*http.Response, error) {
req, err := http.NewRequest("GET", url, nil)
if err != nil {
@@ -189,18 +278,33 @@ func (reg *Registry) doGet(url string, headers map[string]string) (*http.Respons
return res, nil
}
+// getUrl returns an url using the registry URL
+func (reg *Registry) getUrl(path string) (*url.URL, error) {
+ requestUri, err := url.ParseRequestURI(path)
+ if err != nil {
+ return nil, err
+ }
+ return reg.URL.ResolveReference(requestUri), nil
+}
+
// ReposTags gets a list of the docker image tags
func (reg *Registry) ReposTags(reposName string) (*Tags, error) {
- url := fmt.Sprintf("https://registry-1.docker.io/v2/%s/tags/list", reposName)
+ tagsListUrl, err := reg.getUrl(fmt.Sprintf("/v2/%s/tags/list", reposName))
+ if err != nil {
+ return nil, err
+ }
if reg.TokenExpired() {
- reg.GetToken()
+ err = reg.GetToken()
+ if err != nil {
+ return nil, err
+ }
}
log.WithFields(log.Fields{
- "url": url,
+ "regUrl": tagsListUrl.String(),
}).Debug("downloading tags")
- res, err := reg.doGet(url, nil)
+ res, err := reg.doGet(tagsListUrl.String(), nil)
if err != nil {
return nil, err
}
@@ -222,20 +326,27 @@ func (reg *Registry) ReposTags(reposName string) (*Tags, error) {
// ReposManifests gets docker image manifest for name:tag
func (reg *Registry) ReposManifests(reposName, repoTag string) (*Manifests, error) {
headers := make(map[string]string)
- url := fmt.Sprintf("%s/v2/%s/manifests/%s", reg.Host, reposName, repoTag)
+ manifestUrl, err := reg.getUrl(fmt.Sprintf("/v2/%s/manifests/%s", reposName, repoTag))
+ if err != nil {
+ return nil, err
+ }
+
headers["Accept"] = "application/vnd.docker.distribution.manifest.v2+json"
log.WithFields(log.Fields{
- "url": url,
+ "manifestUrl": manifestUrl,
"headers": headers,
"image": reposName,
"tag": repoTag,
}).Debug("get manifests")
if reg.TokenExpired() {
- reg.GetToken()
+ err := reg.GetToken()
+ if err != nil {
+ return nil, err
+ }
}
- res, err := reg.doGet(url, headers)
+ res, err := reg.doGet(manifestUrl.String(), headers)
if err != nil {
return nil, err
}
@@ -332,3 +443,55 @@ func (reg *Registry) RepoGetLayers(tempDir, reposName string, manifest *Manifest
return layerFiles, nil
}
+
+func (reg *Registry) authenticate(scheme string, realm string) error {
+
+ if scheme != "Bearer" && scheme != "Basic" {
+ return fmt.Errorf("unable to authenticate, sorry, scheme %s is not supported yet", scheme)
+ }
+
+ req, err := http.NewRequest("GET", realm, nil)
+ if err != nil {
+ return err
+ }
+
+ userColonPassword := fmt.Sprintf("%s:%s", reg.Config.Username, reg.Config.Password)
+ cred := base64.StdEncoding.EncodeToString([]byte(userColonPassword))
+ req.Header.Add("Authorization", scheme + " " + cred)
+
+ res, err := reg.client.Do(req)
+ if err != nil {
+ return err
+ }
+
+ if res.StatusCode == http.StatusUnauthorized {
+ // Artifactory?
+ wwwAuthHeader := getWwwAuthHeader(res)
+ if wwwAuthHeader == "" {
+ return fmt.Errorf("unable to authenticate, got Unauthorized after sending the credentials")
+ }
+
+ authHeader, err := parseAuthHeader(wwwAuthHeader)
+ if err != nil {
+ return fmt.Errorf("unable to parse WWW-Authenticate: %v", err)
+ }
+
+ if authHeader.Scheme == "Basic" && authHeader.Scheme != scheme {
+ // Yes, this is Artifactory
+ return reg.authenticate(authHeader.Scheme, realm)
+ } else {
+ return fmt.Errorf("unable to authenticate, got scheme %v", authHeader.Scheme)
+ }
+ }
+
+ // Response
+
+ jsonDec := json.NewDecoder(res.Body)
+
+ var authResponse auth
+ err = jsonDec.Decode(&authResponse)
+ reg.Auth = authResponse
+
+ return err
+
+}
diff --git a/vendor/github.com/apex/log/.gitignore b/vendor/github.com/apex/log/.gitignore
deleted file mode 100644
index 7a6353d..0000000
--- a/vendor/github.com/apex/log/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-.envrc
diff --git a/vendor/github.com/apex/log/History.md b/vendor/github.com/apex/log/History.md
deleted file mode 100644
index c88be39..0000000
--- a/vendor/github.com/apex/log/History.md
+++ /dev/null
@@ -1,12 +0,0 @@
-
-v1.1.1 / 2019-06-24
-===================
-
- * add go.mod
- * add rough pass at apexlogs handler
-
-v1.1.0 / 2018-10-11
-===================
-
- * fix: cli handler to show non-string fields appropriately
- * fix: cli using fatih/color to better support windows
diff --git a/vendor/github.com/apex/log/LICENSE b/vendor/github.com/apex/log/LICENSE
deleted file mode 100644
index af71800..0000000
--- a/vendor/github.com/apex/log/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2015 TJ Holowaychuk tj@tjholowaychuk.com
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/github.com/apex/log/Makefile b/vendor/github.com/apex/log/Makefile
deleted file mode 100644
index f948e88..0000000
--- a/vendor/github.com/apex/log/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-
-include github.com/tj/make/golang
diff --git a/vendor/github.com/apex/log/Readme.md b/vendor/github.com/apex/log/Readme.md
deleted file mode 100644
index 4a48b67..0000000
--- a/vendor/github.com/apex/log/Readme.md
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-Package log implements a simple structured logging API inspired by Logrus, designed with centralization in mind. Read more on [Medium](https://medium.com/@tjholowaychuk/apex-log-e8d9627f4a9a#.rav8yhkud).
-
-## Handlers
-
-- __cli__ – human-friendly CLI output
-- __discard__ – discards all logs
-- __es__ – Elasticsearch handler
-- __graylog__ – Graylog handler
-- __json__ – JSON output handler
-- __kinesis__ – AWS Kinesis handler
-- __level__ – level filter handler
-- __logfmt__ – logfmt plain-text formatter
-- __memory__ – in-memory handler for tests
-- __multi__ – fan-out to multiple handlers
-- __papertrail__ – Papertrail handler
-- __text__ – human-friendly colored output
-- __delta__ – outputs the delta between log calls and spinner
-
----
-
-[](https://semaphoreci.com/tj/log)
-[](https://godoc.org/github.com/apex/log)
-
-
-
-
diff --git a/vendor/github.com/apex/log/default.go b/vendor/github.com/apex/log/default.go
deleted file mode 100644
index 2213486..0000000
--- a/vendor/github.com/apex/log/default.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package log
-
-import (
- "bytes"
- "fmt"
- "log"
- "sort"
-)
-
-// field used for sorting.
-type field struct {
- Name string
- Value interface{}
-}
-
-// by sorts fields by name.
-type byName []field
-
-func (a byName) Len() int { return len(a) }
-func (a byName) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
-func (a byName) Less(i, j int) bool { return a[i].Name < a[j].Name }
-
-// handleStdLog outpouts to the stlib log.
-func handleStdLog(e *Entry) error {
- level := levelNames[e.Level]
-
- var fields []field
-
- for k, v := range e.Fields {
- fields = append(fields, field{k, v})
- }
-
- sort.Sort(byName(fields))
-
- var b bytes.Buffer
- fmt.Fprintf(&b, "%5s %-25s", level, e.Message)
-
- for _, f := range fields {
- fmt.Fprintf(&b, " %s=%v", f.Name, f.Value)
- }
-
- log.Println(b.String())
-
- return nil
-}
diff --git a/vendor/github.com/apex/log/doc.go b/vendor/github.com/apex/log/doc.go
deleted file mode 100644
index 0331e8e..0000000
--- a/vendor/github.com/apex/log/doc.go
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
-Package log implements a simple structured logging API designed with few assumptions. Designed for
-centralized logging solutions such as Kinesis which require encoding and decoding before fanning-out
-to handlers.
-
-You may use this package with inline handlers, much like Logrus, however a centralized solution
-is recommended so that apps do not need to be re-deployed to add or remove logging service
-providers.
-*/
-package log
diff --git a/vendor/github.com/apex/log/entry.go b/vendor/github.com/apex/log/entry.go
deleted file mode 100644
index 9f0a5e1..0000000
--- a/vendor/github.com/apex/log/entry.go
+++ /dev/null
@@ -1,172 +0,0 @@
-package log
-
-import (
- "fmt"
- "os"
- "strings"
- "time"
-)
-
-// assert interface compliance.
-var _ Interface = (*Entry)(nil)
-
-// Now returns the current time.
-var Now = time.Now
-
-// Entry represents a single log entry.
-type Entry struct {
- Logger *Logger `json:"-"`
- Fields Fields `json:"fields"`
- Level Level `json:"level"`
- Timestamp time.Time `json:"timestamp"`
- Message string `json:"message"`
- start time.Time
- fields []Fields
-}
-
-// NewEntry returns a new entry for `log`.
-func NewEntry(log *Logger) *Entry {
- return &Entry{
- Logger: log,
- }
-}
-
-// WithFields returns a new entry with `fields` set.
-func (e *Entry) WithFields(fields Fielder) *Entry {
- f := []Fields{}
- f = append(f, e.fields...)
- f = append(f, fields.Fields())
- return &Entry{
- Logger: e.Logger,
- fields: f,
- }
-}
-
-// WithField returns a new entry with the `key` and `value` set.
-func (e *Entry) WithField(key string, value interface{}) *Entry {
- return e.WithFields(Fields{key: value})
-}
-
-// WithError returns a new entry with the "error" set to `err`.
-//
-// The given error may implement .Fielder, if it does the method
-// will add all its `.Fields()` into the returned entry.
-func (e *Entry) WithError(err error) *Entry {
- ctx := e.WithField("error", err.Error())
-
- if s, ok := err.(stackTracer); ok {
- frame := s.StackTrace()[0]
-
- name := fmt.Sprintf("%n", frame)
- file := fmt.Sprintf("%+s", frame)
- line := fmt.Sprintf("%d", frame)
-
- parts := strings.Split(file, "\n\t")
- if len(parts) > 1 {
- file = parts[1]
- }
-
- ctx = ctx.WithField("source", fmt.Sprintf("%s: %s:%s", name, file, line))
- }
-
- if f, ok := err.(Fielder); ok {
- ctx = ctx.WithFields(f.Fields())
- }
-
- return ctx
-}
-
-// Debug level message.
-func (e *Entry) Debug(msg string) {
- e.Logger.log(DebugLevel, e, msg)
-}
-
-// Info level message.
-func (e *Entry) Info(msg string) {
- e.Logger.log(InfoLevel, e, msg)
-}
-
-// Warn level message.
-func (e *Entry) Warn(msg string) {
- e.Logger.log(WarnLevel, e, msg)
-}
-
-// Error level message.
-func (e *Entry) Error(msg string) {
- e.Logger.log(ErrorLevel, e, msg)
-}
-
-// Fatal level message, followed by an exit.
-func (e *Entry) Fatal(msg string) {
- e.Logger.log(FatalLevel, e, msg)
- os.Exit(1)
-}
-
-// Debugf level formatted message.
-func (e *Entry) Debugf(msg string, v ...interface{}) {
- e.Debug(fmt.Sprintf(msg, v...))
-}
-
-// Infof level formatted message.
-func (e *Entry) Infof(msg string, v ...interface{}) {
- e.Info(fmt.Sprintf(msg, v...))
-}
-
-// Warnf level formatted message.
-func (e *Entry) Warnf(msg string, v ...interface{}) {
- e.Warn(fmt.Sprintf(msg, v...))
-}
-
-// Errorf level formatted message.
-func (e *Entry) Errorf(msg string, v ...interface{}) {
- e.Error(fmt.Sprintf(msg, v...))
-}
-
-// Fatalf level formatted message, followed by an exit.
-func (e *Entry) Fatalf(msg string, v ...interface{}) {
- e.Fatal(fmt.Sprintf(msg, v...))
-}
-
-// Trace returns a new entry with a Stop method to fire off
-// a corresponding completion log, useful with defer.
-func (e *Entry) Trace(msg string) *Entry {
- e.Info(msg)
- v := e.WithFields(e.Fields)
- v.Message = msg
- v.start = time.Now()
- return v
-}
-
-// Stop should be used with Trace, to fire off the completion message. When
-// an `err` is passed the "error" field is set, and the log level is error.
-func (e *Entry) Stop(err *error) {
- if err == nil || *err == nil {
- e.WithField("duration", time.Since(e.start)).Info(e.Message)
- } else {
- e.WithField("duration", time.Since(e.start)).WithError(*err).Error(e.Message)
- }
-}
-
-// mergedFields returns the fields list collapsed into a single map.
-func (e *Entry) mergedFields() Fields {
- f := Fields{}
-
- for _, fields := range e.fields {
- for k, v := range fields {
- f[k] = v
- }
- }
-
- return f
-}
-
-// finalize returns a copy of the Entry with Fields merged.
-func (e *Entry) finalize(level Level, msg string) *Entry {
- return &Entry{
- Logger: e.Logger,
- Fields: e.mergedFields(),
- Level: level,
- Message: msg,
- Timestamp: Now(),
- }
-}
diff --git a/vendor/github.com/apex/log/go.mod b/vendor/github.com/apex/log/go.mod
deleted file mode 100644
index efc674b..0000000
--- a/vendor/github.com/apex/log/go.mod
+++ /dev/null
@@ -1,25 +0,0 @@
-module github.com/apex/log
-
-go 1.12
-
-require (
- github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a
- github.com/aphistic/sweet v0.2.0 // indirect
- github.com/aws/aws-sdk-go v1.20.6
- github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59
- github.com/fatih/color v1.7.0
- github.com/go-logfmt/logfmt v0.4.0
- github.com/google/uuid v1.1.1 // indirect
- github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 // indirect
- github.com/mattn/go-colorable v0.1.2
- github.com/pkg/errors v0.8.1
- github.com/rogpeppe/fastuuid v1.1.0
- github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 // indirect
- github.com/smartystreets/gunit v1.0.0 // indirect
- github.com/stretchr/testify v1.3.0
- github.com/tj/assert v0.0.0-20171129193455-018094318fb0
- github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2
- github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b
- github.com/tj/go-spin v1.1.0
- golang.org/x/net v0.0.0-20190620200207-3b0461eec859 // indirect
-)
diff --git a/vendor/github.com/apex/log/go.sum b/vendor/github.com/apex/log/go.sum
deleted file mode 100644
index 972a66d..0000000
--- a/vendor/github.com/apex/log/go.sum
+++ /dev/null
@@ -1,90 +0,0 @@
-github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a h1:2KLQMJ8msqoPHIPDufkxVcoTtcmE5+1sL9950m4R9Pk=
-github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE=
-github.com/aphistic/sweet v0.2.0 h1:I4z+fAUqvKfvZV/CHi5dV0QuwbmIvYYFDjG0Ss5QpAs=
-github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys=
-github.com/aws/aws-sdk-go v1.20.6 h1:kmy4Gvdlyez1fV4kw5RYxZzWKVyuHZHgPWeU/YvRsV4=
-github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo=
-github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
-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/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
-github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
-github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=
-github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
-github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
-github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
-github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
-github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 h1:K//n/AqR5HjG3qxbrBCL4vJPW0MVFSs9CPK1OOJdRME=
-github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
-github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
-github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
-github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
-github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
-github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
-github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
-github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo=
-github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
-github.com/pkg/errors v0.8.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/rogpeppe/fastuuid v1.1.0 h1:INyGLmTCMGFr6OVIb977ghJvABML2CMVjPoRfNDdYDo=
-github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
-github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
-github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
-github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8=
-github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
-github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 h1:hp2CYQUINdZMHdvTdXtPOY2ainKl4IoMcpAXEf2xj3Q=
-github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
-github.com/smartystreets/gunit v1.0.0 h1:RyPDUFcJbvtXlhJPk7v+wnxZRY2EUokhEYl2EJOPToI=
-github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs=
-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/tj/assert v0.0.0-20171129193455-018094318fb0 h1:Rw8kxzWo1mr6FSaYXjQELRe88y2KdfynXdnK72rdjtA=
-github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0=
-github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 h1:eGaGNxrtoZf/mBURsnNQKDR7u50Klgcf2eFDQEnc8Bc=
-github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0=
-github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b h1:m74UWYy+HBs+jMFR9mdZU6shPewugMyH5+GV6LNgW8w=
-github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao=
-github.com/tj/go-spin v1.1.0 h1:lhdWZsvImxvZ3q1C5OIB7d72DuOwP4O2NdBg9PyzNds=
-github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734 h1:p/H982KKEjUnLJkM3tt/LemDnOc1GiZL5FCVlORJ5zo=
-golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/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 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8=
-golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
-gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/vendor/github.com/apex/log/handlers/cli/cli.go b/vendor/github.com/apex/log/handlers/cli/cli.go
deleted file mode 100644
index 10d4858..0000000
--- a/vendor/github.com/apex/log/handlers/cli/cli.go
+++ /dev/null
@@ -1,85 +0,0 @@
-// Package cli implements a colored text handler suitable for command-line interfaces.
-package cli
-
-import (
- "fmt"
- "io"
- "os"
- "sync"
- "time"
-
- "github.com/apex/log"
- "github.com/fatih/color"
- colorable "github.com/mattn/go-colorable"
-)
-
-// Default handler outputting to stderr.
-var Default = New(os.Stderr)
-
-// start time.
-var start = time.Now()
-
-var bold = color.New(color.Bold)
-
-// Colors mapping.
-var Colors = [...]*color.Color{
- log.DebugLevel: color.New(color.FgWhite),
- log.InfoLevel: color.New(color.FgBlue),
- log.WarnLevel: color.New(color.FgYellow),
- log.ErrorLevel: color.New(color.FgRed),
- log.FatalLevel: color.New(color.FgRed),
-}
-
-// Strings mapping.
-var Strings = [...]string{
- log.DebugLevel: "•",
- log.InfoLevel: "•",
- log.WarnLevel: "•",
- log.ErrorLevel: "⨯",
- log.FatalLevel: "⨯",
-}
-
-// Handler implementation.
-type Handler struct {
- mu sync.Mutex
- Writer io.Writer
- Padding int
-}
-
-// New handler.
-func New(w io.Writer) *Handler {
- if f, ok := w.(*os.File); ok {
- return &Handler{
- Writer: colorable.NewColorable(f),
- Padding: 3,
- }
- }
-
- return &Handler{
- Writer: w,
- Padding: 3,
- }
-}
-
-// HandleLog implements log.Handler.
-func (h *Handler) HandleLog(e *log.Entry) error {
- color := Colors[e.Level]
- level := Strings[e.Level]
- names := e.Fields.Names()
-
- h.mu.Lock()
- defer h.mu.Unlock()
-
- color.Fprintf(h.Writer, "%s %-25s", bold.Sprintf("%*s", h.Padding+1, level), e.Message)
-
- for _, name := range names {
- if name == "source" {
- continue
- }
- fmt.Fprintf(h.Writer, " %s=%v", color.Sprint(name), e.Fields.Get(name))
- }
-
- fmt.Fprintln(h.Writer)
-
- return nil
-}
diff --git a/vendor/github.com/apex/log/interface.go b/vendor/github.com/apex/log/interface.go
deleted file mode 100644
index c92ebea..0000000
--- a/vendor/github.com/apex/log/interface.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package log
-
-// Interface represents the API of both Logger and Entry.
-type Interface interface {
- WithFields(fields Fielder) *Entry
- WithField(key string, value interface{}) *Entry
- WithError(err error) *Entry
- Debug(msg string)
- Info(msg string)
- Warn(msg string)
- Error(msg string)
- Fatal(msg string)
- Debugf(msg string, v ...interface{})
- Infof(msg string, v ...interface{})
- Warnf(msg string, v ...interface{})
- Errorf(msg string, v ...interface{})
- Fatalf(msg string, v ...interface{})
- Trace(msg string) *Entry
-}
diff --git a/vendor/github.com/apex/log/levels.go b/vendor/github.com/apex/log/levels.go
deleted file mode 100644
index 7d43a43..0000000
--- a/vendor/github.com/apex/log/levels.go
+++ /dev/null
@@ -1,81 +0,0 @@
-package log
-
-import (
- "bytes"
- "errors"
- "strings"
-)
-
-// ErrInvalidLevel is returned if the severity level is invalid.
-var ErrInvalidLevel = errors.New("invalid level")
-
-// Level of severity.
-type Level int
-
-// Log levels.
-const (
- InvalidLevel Level = iota - 1
- DebugLevel
- InfoLevel
- WarnLevel
- ErrorLevel
- FatalLevel
-)
-
-var levelNames = [...]string{
- DebugLevel: "debug",
- InfoLevel: "info",
- WarnLevel: "warn",
- ErrorLevel: "error",
- FatalLevel: "fatal",
-}
-
-var levelStrings = map[string]Level{
- "debug": DebugLevel,
- "info": InfoLevel,
- "warn": WarnLevel,
- "warning": WarnLevel,
- "error": ErrorLevel,
- "fatal": FatalLevel,
-}
-
-// String implementation.
-func (l Level) String() string {
- return levelNames[l]
-}
-
-// MarshalJSON implementation.
-func (l Level) MarshalJSON() ([]byte, error) {
- return []byte(`"` + l.String() + `"`), nil
-}
-
-// UnmarshalJSON implementation.
-func (l *Level) UnmarshalJSON(b []byte) error {
- v, err := ParseLevel(string(bytes.Trim(b, `"`)))
- if err != nil {
- return err
- }
-
- *l = v
- return nil
-}
-
-// ParseLevel parses level string.
-func ParseLevel(s string) (Level, error) {
- l, ok := levelStrings[strings.ToLower(s)]
- if !ok {
- return InvalidLevel, ErrInvalidLevel
- }
-
- return l, nil
-}
-
-// MustParseLevel parses level string or panics.
-func MustParseLevel(s string) Level {
- l, err := ParseLevel(s)
- if err != nil {
- panic("invalid log level")
- }
-
- return l
-}
diff --git a/vendor/github.com/apex/log/logger.go b/vendor/github.com/apex/log/logger.go
deleted file mode 100644
index 1755747..0000000
--- a/vendor/github.com/apex/log/logger.go
+++ /dev/null
@@ -1,149 +0,0 @@
-package log
-
-import (
- stdlog "log"
- "sort"
-)
-
-// assert interface compliance.
-var _ Interface = (*Logger)(nil)
-
-// Fielder is an interface for providing fields to custom types.
-type Fielder interface {
- Fields() Fields
-}
-
-// Fields represents a map of entry level data used for structured logging.
-type Fields map[string]interface{}
-
-// Fields implements Fielder.
-func (f Fields) Fields() Fields {
- return f
-}
-
-// Get field value by name.
-func (f Fields) Get(name string) interface{} {
- return f[name]
-}
-
-// Names returns field names sorted.
-func (f Fields) Names() (v []string) {
- for k := range f {
- v = append(v, k)
- }
-
- sort.Strings(v)
- return
-}
-
-// The HandlerFunc type is an adapter to allow the use of ordinary functions as
-// log handlers. If f is a function with the appropriate signature,
-// HandlerFunc(f) is a Handler object that calls f.
-type HandlerFunc func(*Entry) error
-
-// HandleLog calls f(e).
-func (f HandlerFunc) HandleLog(e *Entry) error {
- return f(e)
-}
-
-// Handler is used to handle log events, outputting them to
-// stdio or sending them to remote services. See the "handlers"
-// directory for implementations.
-//
-// It is left up to Handlers to implement thread-safety.
-type Handler interface {
- HandleLog(*Entry) error
-}
-
-// Logger represents a logger with configurable Level and Handler.
-type Logger struct {
- Handler Handler
- Level Level
-}
-
-// WithFields returns a new entry with `fields` set.
-func (l *Logger) WithFields(fields Fielder) *Entry {
- return NewEntry(l).WithFields(fields.Fields())
-}
-
-// WithField returns a new entry with the `key` and `value` set.
-//
-// Note that the `key` should not have spaces in it - use camel
-// case or underscores
-func (l *Logger) WithField(key string, value interface{}) *Entry {
- return NewEntry(l).WithField(key, value)
-}
-
-// WithError returns a new entry with the "error" set to `err`.
-func (l *Logger) WithError(err error) *Entry {
- return NewEntry(l).WithError(err)
-}
-
-// Debug level message.
-func (l *Logger) Debug(msg string) {
- NewEntry(l).Debug(msg)
-}
-
-// Info level message.
-func (l *Logger) Info(msg string) {
- NewEntry(l).Info(msg)
-}
-
-// Warn level message.
-func (l *Logger) Warn(msg string) {
- NewEntry(l).Warn(msg)
-}
-
-// Error level message.
-func (l *Logger) Error(msg string) {
- NewEntry(l).Error(msg)
-}
-
-// Fatal level message, followed by an exit.
-func (l *Logger) Fatal(msg string) {
- NewEntry(l).Fatal(msg)
-}
-
-// Debugf level formatted message.
-func (l *Logger) Debugf(msg string, v ...interface{}) {
- NewEntry(l).Debugf(msg, v...)
-}
-
-// Infof level formatted message.
-func (l *Logger) Infof(msg string, v ...interface{}) {
- NewEntry(l).Infof(msg, v...)
-}
-
-// Warnf level formatted message.
-func (l *Logger) Warnf(msg string, v ...interface{}) {
- NewEntry(l).Warnf(msg, v...)
-}
-
-// Errorf level formatted message.
-func (l *Logger) Errorf(msg string, v ...interface{}) {
- NewEntry(l).Errorf(msg, v...)
-}
-
-// Fatalf level formatted message, followed by an exit.
-func (l *Logger) Fatalf(msg string, v ...interface{}) {
- NewEntry(l).Fatalf(msg, v...)
-}
-
-// Trace returns a new entry with a Stop method to fire off
-// a corresponding completion log, useful with defer.
-func (l *Logger) Trace(msg string) *Entry {
- return NewEntry(l).Trace(msg)
-}
-
-// log the message, invoking the handler. We clone the entry here
-// to bypass the overhead in Entry methods when the level is not
-// met.
-func (l *Logger) log(level Level, e *Entry, msg string) {
- if level < l.Level {
- return
- }
-
- if err := l.Handler.HandleLog(e.finalize(level, msg)); err != nil {
- stdlog.Printf("error logging: %s", err)
- }
-}
diff --git a/vendor/github.com/apex/log/pkg.go b/vendor/github.com/apex/log/pkg.go
deleted file mode 100644
index 9bf51dc..0000000
--- a/vendor/github.com/apex/log/pkg.go
+++ /dev/null
@@ -1,100 +0,0 @@
-package log
-
-// singletons ftw?
-var Log Interface = &Logger{
- Handler: HandlerFunc(handleStdLog),
- Level: InfoLevel,
-}
-
-// SetHandler sets the handler. This is not thread-safe.
-// The default handler outputs to the stdlib log.
-func SetHandler(h Handler) {
- if logger, ok := Log.(*Logger); ok {
- logger.Handler = h
- }
-}
-
-// SetLevel sets the log level. This is not thread-safe.
-func SetLevel(l Level) {
- if logger, ok := Log.(*Logger); ok {
- logger.Level = l
- }
-}
-
-// SetLevelFromString sets the log level from a string, panicing when invalid. This is not thread-safe.
-func SetLevelFromString(s string) {
- if logger, ok := Log.(*Logger); ok {
- logger.Level = MustParseLevel(s)
- }
-}
-
-// WithFields returns a new entry with `fields` set.
-func WithFields(fields Fielder) *Entry {
- return Log.WithFields(fields)
-}
-
-// WithField returns a new entry with the `key` and `value` set.
-func WithField(key string, value interface{}) *Entry {
- return Log.WithField(key, value)
-}
-
-// WithError returns a new entry with the "error" set to `err`.
-func WithError(err error) *Entry {
- return Log.WithError(err)
-}
-
-// Debug level message.
-func Debug(msg string) {
- Log.Debug(msg)
-}
-
-// Info level message.
-func Info(msg string) {
- Log.Info(msg)
-}
-
-// Warn level message.
-func Warn(msg string) {
- Log.Warn(msg)
-}
-
-// Error level message.
-func Error(msg string) {
- Log.Error(msg)
-}
-
-// Fatal level message, followed by an exit.
-func Fatal(msg string) {
- Log.Fatal(msg)
-}
-
-// Debugf level formatted message.
-func Debugf(msg string, v ...interface{}) {
- Log.Debugf(msg, v...)
-}
-
-// Infof level formatted message.
-func Infof(msg string, v ...interface{}) {
- Log.Infof(msg, v...)
-}
-
-// Warnf level formatted message.
-func Warnf(msg string, v ...interface{}) {
- Log.Warnf(msg, v...)
-}
-
-// Errorf level formatted message.
-func Errorf(msg string, v ...interface{}) {
- Log.Errorf(msg, v...)
-}
-
-// Fatalf level formatted message, followed by an exit.
-func Fatalf(msg string, v ...interface{}) {
- Log.Fatalf(msg, v...)
-}
-
-// Trace returns a new entry with a Stop method to fire off
-// a corresponding completion log, useful with defer.
-func Trace(msg string) *Entry {
- return Log.Trace(msg)
-}
diff --git a/vendor/github.com/apex/log/stack.go b/vendor/github.com/apex/log/stack.go
deleted file mode 100644
index 57efe32..0000000
--- a/vendor/github.com/apex/log/stack.go
+++ /dev/null
@@ -1,8 +0,0 @@
-package log
-
-import "github.com/pkg/errors"
-
-// stackTracer interface.
-type stackTracer interface {
- StackTrace() errors.StackTrace
-}
diff --git a/vendor/github.com/blacktop/ipsw/LICENSE b/vendor/github.com/blacktop/ipsw/LICENSE
deleted file mode 100644
index e41d80b..0000000
--- a/vendor/github.com/blacktop/ipsw/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2018 blacktop
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/github.com/blacktop/ipsw/utils/LZFSE.bt b/vendor/github.com/blacktop/ipsw/utils/LZFSE.bt
deleted file mode 100644
index 0276645..0000000
--- a/vendor/github.com/blacktop/ipsw/utils/LZFSE.bt
+++ /dev/null
@@ -1,207 +0,0 @@
-//------------------------------------------------
-//--- 010 Editor v9.0.1 Binary Template
-//
-// File: LZFSE.bt
-// Authors: blacktop
-// Version: 1.0
-// Purpose: Parse LZFSE archive files.
-// Category: Archive
-// File Mask:
-// ID Bytes: 62 76 78 6E //bvxn
-// History:
-//------------------------------------------------
-
-#define LZFSE_NO_BLOCK_MAGIC 0x00000000 // 0 (invalid)
-#define LZFSE_ENDOFSTREAM_BLOCK_MAGIC 0x24787662 // bvx$ (end of stream)
-#define LZFSE_UNCOMPRESSED_BLOCK_MAGIC 0x2d787662 // bvx- (raw data)
-#define LZFSE_COMPRESSEDV1_BLOCK_MAGIC 0x31787662 // bvx1 (lzfse compressed, uncompressed tables)
-#define LZFSE_COMPRESSEDV2_BLOCK_MAGIC 0x32787662 // bvx2 (lzfse compressed, compressed tables)
-#define LZFSE_COMPRESSEDLZVN_BLOCK_MAGIC 0x6e787662 // bvxn (lzvn compressed)
-
-#define LZFSE_ENCODE_L_SYMBOLS 20
-#define LZFSE_ENCODE_M_SYMBOLS 20
-#define LZFSE_ENCODE_D_SYMBOLS 64
-#define LZFSE_ENCODE_LITERAL_SYMBOLS 256
-#define LZFSE_ENCODE_L_STATES 64
-#define LZFSE_ENCODE_M_STATES 64
-#define LZFSE_ENCODE_D_STATES 256
-#define LZFSE_ENCODE_LITERAL_STATES 1024
-#define LZFSE_MATCHES_PER_BLOCK 10000
-
-typedef struct {
- // Magic number, always LZFSE_COMPRESSEDV1_BLOCK_MAGIC.
- char magic[4] ;
- // Number of decoded (output) bytes in block.
- uint n_raw_bytes;
- // Number of encoded (source) bytes in block.
- uint n_payload_bytes;
- // Number of literal bytes output by block (*not* the number of literals).
- uint n_literals;
- // Number of matches in block (which is also the number of literals).
- uint n_matches;
- // Number of bytes used to encode literals.
- uint n_literal_payload_bytes;
- // Number of bytes used to encode matches.
- uint n_lmd_payload_bytes;
-
- // Final encoder states for the block, which will be the initial states for
- // the decoder:
- // Final accum_nbits for literals stream.
- int literal_bits;
- // There are four interleaved streams of literals, so there are four final
- // states.
- ushort literal_state[4];
- // accum_nbits for the l, m, d stream.
- int lmd_bits;
- // Final L (literal length) state.
- ushort l_state;
- // Final M (match length) state.
- ushort m_state;
- // Final D (match distance) state.
- ushort d_state;
-
- // Normalized frequency tables for each stream. Sum of values in each
- // array is the number of states.
- ushort l_freq[LZFSE_ENCODE_L_SYMBOLS];
- ushort m_freq[LZFSE_ENCODE_M_SYMBOLS];
- ushort d_freq[LZFSE_ENCODE_D_SYMBOLS];
- ushort literal_freq[LZFSE_ENCODE_LITERAL_SYMBOLS];
-} lzfse_compressed_block_header_v1;
-
-typedef struct {
- BitfieldDisablePadding();
- BitfieldLeftToRight();
- // 0 20 n_literals
- uint n_literals : 20;
- // 20 20 n_literal_payload_bytes
- uint n_literal_payload_bytes : 20;
- // 40 20 n_matches
- uint n_matches : 20;
- // 60 3
- int literal_bits : 3;
- // 63 1 --- unused ---
- uint : 1;
-} field1 ;
-
-typedef struct {
- // 0 10 literal_state[0]
- ushort literal_state0 : 10;
- // 10 10 literal_state[1]
- ushort literal_state1 : 10;
- // 20 10 literal_state[2]
- ushort literal_state2 : 10;
- // 30 10 literal_state[3]
- ushort literal_state3 : 10;
- // 40 20 n_lmd_payload_bytes
- uint n_lmd_payload_bytes : 20;
- // 60 3 lmd_bits
- int lmd_bits : 3;
- // 63 1 --- unused ---
- uint : 1;
-} field2 ;
-
-typedef struct {
- BitfieldDisablePadding();
- BitfieldLeftToRight();
- // 0 32 header_size (total header size in bytes; this does not
- // correspond to a field in the uncompressed header version,
- // but is required; we wouldn't know the size of the
- // compresssed header otherwise.
- uint header_size : 32;
- // 32 10 l_state
- ushort l_state : 10;
- // 42 10 m_state
- ushort m_state : 10;
- // 52 10 d_state
- ushort d_state : 10;
- // 62 2 --- unused ---
- uint : 2;
-} field3 ;
-
-typedef struct {
- // Magic number, always LZFSE_COMPRESSEDV2_BLOCK_MAGIC.
- char magic[4] ;
- // Number of decoded (output) bytes in block.
- uint n_raw_bytes;
- // The fields n_payload_bytes ... d_state from the
- // lzfse_compressed_block_header_v1 object are packed into three 64-bit
- // fields in the compressed header, as follows:
- //
- // offset bits value
- // 0 20 n_literals
- // 20 20 n_literal_payload_bytes
- // 40 20 n_matches
- // 60 3 literal_bits
- // 63 1 --- unused ---
- //
- // 0 10 literal_state[0]
- // 10 10 literal_state[1]
- // 20 10 literal_state[2]
- // 30 10 literal_state[3]
- // 40 20 n_lmd_payload_bytes
- // 60 3 lmd_bits
- // 63 1 --- unused ---
- //
- // 0 32 header_size (total header size in bytes; this does not
- // correspond to a field in the uncompressed header version,
- // but is required; we wouldn't know the size of the
- // compresssed header otherwise.
- // 32 10 l_state
- // 42 10 m_state
- // 52 10 d_state
- // 62 2 --- unused ---
- field1 Characteristics ;
- field2 Characteristics2 ;
- field3 Characteristics3 ;
- // Variable size freq tables, using a Huffman-style fixed encoding.
- // Size allocated here is an upper bound (all values stored on 16 bits).
- uchar freq[2 * (LZFSE_ENCODE_L_SYMBOLS + LZFSE_ENCODE_M_SYMBOLS +
- LZFSE_ENCODE_D_SYMBOLS + LZFSE_ENCODE_LITERAL_SYMBOLS)] ;
- //Printf( "Characteristics.n_literal_payload_bytes='%d'\n", Characteristics.n_literal_payload_bytes );
- uchar payload[Characteristics.n_literal_payload_bytes + Characteristics2.n_lmd_payload_bytes] ;
- char endMagic[4] ;
-} lzfse_compressed_block_header_v2;
-
-typedef struct {
- char magic[4] ;
- uint n_raw_bytes;
- uint n_payload_bytes;
- uchar payload[n_payload_bytes] ;
- char endMagic[4] ;
-} LZVN_COMPRESSED_BLOCK_HEADER;
-
-//--------------------------------------------
-
-// Define the file
-local uint magic;
-LittleEndian();
-while( !FEof() )
-{
- // Read a magic
- magic = ReadUInt( FTell() );
-
- // Read data depending upon magic - should start with 'bvxn'.
- // Note that when duplicate variables are defined, they
- // are made into an array (see 'Using Templates and Structs'
- // in the help file).
- if( magic == LZFSE_COMPRESSEDLZVN_BLOCK_MAGIC )
- {
- //SetBackColor( cLtGray );
- LZVN_COMPRESSED_BLOCK_HEADER record;
- }
- else if( magic == LZFSE_COMPRESSEDV1_BLOCK_MAGIC )
- {
- SetBackColor( cLtGreen );
- lzfse_compressed_block_header_v1 lzfse_c1;
- }
- else if( magic == LZFSE_COMPRESSEDV2_BLOCK_MAGIC )
- {
- SetBackColor( cLtGreen );
- lzfse_compressed_block_header_v2 lzfse_c2;
- }
- else
- {
- Warning( "Unknown LZFSE magic encountered. Template stopped." );
- return -1;
- }
-}
\ No newline at end of file
diff --git a/vendor/github.com/blacktop/ipsw/utils/parse.go b/vendor/github.com/blacktop/ipsw/utils/parse.go
deleted file mode 100644
index 2143a6b..0000000
--- a/vendor/github.com/blacktop/ipsw/utils/parse.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package utils
-
-import (
- "bytes"
- "fmt"
- "io/ioutil"
- "log"
-
- "howett.net/plist"
-)
-
-type buildManifest struct {
- BuildIdentities interface{} `plist:"BuildIdentities,omitempty"`
- ManifestVersion uint64 `plist:"ManifestVersion,omitempty"`
- ProductBuildVersion string `plist:"ProductBuildVersion,omitempty"`
- ProductVersion string `plist:"ProductVersion,omitempty"`
- SupportedProductTypes []string `plist:"SupportedProductTypes,omitempty"`
-}
-
-func parseBuildManifest() {
- dat, err := ioutil.ReadFile("BuildManifest.plist")
- if err != nil {
- log.Fatal(err)
- }
- var data buildManifest
- decoder := plist.NewDecoder(bytes.NewReader(dat))
- err = decoder.Decode(&data)
- if err != nil {
- fmt.Println(err)
- }
- fmt.Println("===> PARSING BuildManifest.plist")
- // fmt.Println("BuildIdentities: ", data.BuildIdentities)
- // fmt.Println("ManifestVersion: ", data.ManifestVersion)
- fmt.Println("ProductVersion: ", data.ProductVersion)
- fmt.Println("ProductBuildVersion: ", data.ProductBuildVersion)
- fmt.Println("SupportedProductTypes: ")
- for _, prodType := range data.SupportedProductTypes {
- fmt.Println(" - ", prodType)
- }
-}
diff --git a/vendor/github.com/blacktop/ipsw/utils/utils.go b/vendor/github.com/blacktop/ipsw/utils/utils.go
deleted file mode 100644
index 0d817bc..0000000
--- a/vendor/github.com/blacktop/ipsw/utils/utils.go
+++ /dev/null
@@ -1,148 +0,0 @@
-package utils
-
-import (
- "archive/zip"
- "crypto/sha1"
- "fmt"
- "io"
- "os"
- "path"
- "path/filepath"
- "runtime"
- "strings"
-
- "github.com/apex/log"
- "github.com/apex/log/handlers/cli"
-)
-
-var normalPadding = cli.Default.Padding
-
-// Indent indents apex log line to supplied level
-func Indent(f func(s string), level int) func(string) {
- return func(s string) {
- cli.Default.Padding = normalPadding * level
- f(s)
- cli.Default.Padding = normalPadding
- }
-}
-
-func getFmtStr() string {
- if runtime.GOOS == "windows" {
- return "%s"
- }
- return "\033[1m%s\033[0m"
-}
-
-// StrSliceContains returns true if string slice contains given string
-func StrSliceContains(slice []string, item string) bool {
- for _, s := range slice {
- if strings.Contains(strings.ToLower(item), strings.ToLower(s)) {
- return true
- }
- }
- return false
-}
-
-// Unique returns a slice with only unique strings
-func Unique(s []string) []string {
- unique := make(map[string]bool, len(s))
- us := make([]string, len(unique))
- for _, elem := range s {
- if len(elem) != 0 {
- if !unique[elem] {
- us = append(us, elem)
- unique[elem] = true
- }
- }
- }
-
- return us
-}
-
-// Verify verifies the downloaded against it's hash
-func Verify(sha1sum, name string) (bool, error) {
- Indent(log.Info, 1)("verifying sha1sum...")
- f, err := os.Open(name)
- if err != nil {
- return false, err
- }
- defer f.Close()
-
- h := sha1.New()
- if _, err := io.Copy(h, f); err != nil {
- return false, err
- }
-
- Indent(log.WithFields(log.Fields{
- "api": sha1sum,
- "file": fmt.Sprintf("%x", h.Sum(nil)),
- }).Debug, 1)("sha1 hashes")
- return strings.EqualFold(sha1sum, fmt.Sprintf("%x", h.Sum(nil))), nil
-}
-
-// Unzip - https://stackoverflow.com/a/24792688
-func Unzip(src, dest string, filter func(f *zip.File) bool) ([]string, error) {
-
- var fNames []string
-
- r, err := zip.OpenReader(src)
- if err != nil {
- return nil, err
- }
- defer func() {
- if err := r.Close(); err != nil {
- panic(err)
- }
- }()
-
- os.MkdirAll(dest, 0755)
-
- // Closure to address file descriptors issue with all the deferred .Close() methods
- extractAndWriteFile := func(f *zip.File) error {
- rc, err := f.Open()
- if err != nil {
- return err
- }
- defer func() {
- if err := rc.Close(); err != nil {
- panic(err)
- }
- }()
-
- path := filepath.Join(dest, f.Name)
-
- if f.FileInfo().IsDir() {
- os.MkdirAll(path, f.Mode())
- } else {
- // TODO: add the ability to preserve folder structure if user wants
- // os.MkdirAll(filepath.Dir(path), f.Mode())
- f, err := os.OpenFile(filepath.Base(path), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
- if err != nil {
- return err
- }
- defer func() {
- if err := f.Close(); err != nil {
- panic(err)
- }
- }()
-
- _, err = io.Copy(f, rc)
- if err != nil {
- return err
- }
- }
- return nil
- }
-
- for _, f := range r.File {
- if filter(f) {
- fNames = append(fNames, path.Base(f.Name))
- err := extractAndWriteFile(f)
- if err != nil {
- return nil, err
- }
- }
- }
-
- return fNames, nil
-}
diff --git a/vendor/github.com/cespare/xxhash/LICENSE.txt b/vendor/github.com/cespare/xxhash/LICENSE.txt
deleted file mode 100644
index 24b5306..0000000
--- a/vendor/github.com/cespare/xxhash/LICENSE.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) 2016 Caleb Spare
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/github.com/cespare/xxhash/README.md b/vendor/github.com/cespare/xxhash/README.md
deleted file mode 100644
index 0982fd2..0000000
--- a/vendor/github.com/cespare/xxhash/README.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# xxhash
-
-[](https://godoc.org/github.com/cespare/xxhash)
-
-xxhash is a Go implementation of the 64-bit
-[xxHash](http://cyan4973.github.io/xxHash/) algorithm, XXH64. This is a
-high-quality hashing algorithm that is much faster than anything in the Go
-standard library.
-
-The API is very small, taking its cue from the other hashing packages in the
-standard library:
-
- $ go doc github.com/cespare/xxhash !
- package xxhash // import "github.com/cespare/xxhash"
-
- Package xxhash implements the 64-bit variant of xxHash (XXH64) as described
- at http://cyan4973.github.io/xxHash/.
-
- func New() hash.Hash64
- func Sum64(b []byte) uint64
- func Sum64String(s string) uint64
-
-This implementation provides a fast pure-Go implementation and an even faster
-assembly implementation for amd64.
-
-## Benchmarks
-
-Here are some quick benchmarks comparing the pure-Go and assembly
-implementations of Sum64 against another popular Go XXH64 implementation,
-[github.com/OneOfOne/xxhash](https://github.com/OneOfOne/xxhash):
-
-| input size | OneOfOne | cespare (purego) | cespare |
-| --- | --- | --- | --- |
-| 5 B | 416 MB/s | 720 MB/s | 872 MB/s |
-| 100 B | 3980 MB/s | 5013 MB/s | 5252 MB/s |
-| 4 KB | 12727 MB/s | 12999 MB/s | 13026 MB/s |
-| 10 MB | 9879 MB/s | 10775 MB/s | 10913 MB/s |
-
-These numbers were generated with:
-
-```
-$ go test -benchtime 10s -bench '/OneOfOne,'
-$ go test -tags purego -benchtime 10s -bench '/xxhash,'
-$ go test -benchtime 10s -bench '/xxhash,'
-```
-
-## Projects using this package
-
-- [InfluxDB](https://github.com/influxdata/influxdb)
-- [Prometheus](https://github.com/prometheus/prometheus)
diff --git a/vendor/github.com/cespare/xxhash/go.mod b/vendor/github.com/cespare/xxhash/go.mod
deleted file mode 100644
index 10605a6..0000000
--- a/vendor/github.com/cespare/xxhash/go.mod
+++ /dev/null
@@ -1,6 +0,0 @@
-module github.com/cespare/xxhash
-
-require (
- github.com/OneOfOne/xxhash v1.2.2
- github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72
-)
diff --git a/vendor/github.com/cespare/xxhash/go.sum b/vendor/github.com/cespare/xxhash/go.sum
deleted file mode 100644
index f6b5542..0000000
--- a/vendor/github.com/cespare/xxhash/go.sum
+++ /dev/null
@@ -1,4 +0,0 @@
-github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
-github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
-github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
diff --git a/vendor/github.com/cespare/xxhash/rotate.go b/vendor/github.com/cespare/xxhash/rotate.go
deleted file mode 100644
index f3eac5e..0000000
--- a/vendor/github.com/cespare/xxhash/rotate.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// +build !go1.9
-
-package xxhash
-
-// TODO(caleb): After Go 1.10 comes out, remove this fallback code.
-
-func rol1(x uint64) uint64 { return (x << 1) | (x >> (64 - 1)) }
-func rol7(x uint64) uint64 { return (x << 7) | (x >> (64 - 7)) }
-func rol11(x uint64) uint64 { return (x << 11) | (x >> (64 - 11)) }
-func rol12(x uint64) uint64 { return (x << 12) | (x >> (64 - 12)) }
-func rol18(x uint64) uint64 { return (x << 18) | (x >> (64 - 18)) }
-func rol23(x uint64) uint64 { return (x << 23) | (x >> (64 - 23)) }
-func rol27(x uint64) uint64 { return (x << 27) | (x >> (64 - 27)) }
-func rol31(x uint64) uint64 { return (x << 31) | (x >> (64 - 31)) }
diff --git a/vendor/github.com/cespare/xxhash/rotate19.go b/vendor/github.com/cespare/xxhash/rotate19.go
deleted file mode 100644
index b99612b..0000000
--- a/vendor/github.com/cespare/xxhash/rotate19.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// +build go1.9
-
-package xxhash
-
-import "math/bits"
-
-func rol1(x uint64) uint64 { return bits.RotateLeft64(x, 1) }
-func rol7(x uint64) uint64 { return bits.RotateLeft64(x, 7) }
-func rol11(x uint64) uint64 { return bits.RotateLeft64(x, 11) }
-func rol12(x uint64) uint64 { return bits.RotateLeft64(x, 12) }
-func rol18(x uint64) uint64 { return bits.RotateLeft64(x, 18) }
-func rol23(x uint64) uint64 { return bits.RotateLeft64(x, 23) }
-func rol27(x uint64) uint64 { return bits.RotateLeft64(x, 27) }
-func rol31(x uint64) uint64 { return bits.RotateLeft64(x, 31) }
diff --git a/vendor/github.com/cespare/xxhash/xxhash.go b/vendor/github.com/cespare/xxhash/xxhash.go
deleted file mode 100644
index f896bd2..0000000
--- a/vendor/github.com/cespare/xxhash/xxhash.go
+++ /dev/null
@@ -1,168 +0,0 @@
-// Package xxhash implements the 64-bit variant of xxHash (XXH64) as described
-// at http://cyan4973.github.io/xxHash/.
-package xxhash
-
-import (
- "encoding/binary"
- "hash"
-)
-
-const (
- prime1 uint64 = 11400714785074694791
- prime2 uint64 = 14029467366897019727
- prime3 uint64 = 1609587929392839161
- prime4 uint64 = 9650029242287828579
- prime5 uint64 = 2870177450012600261
-)
-
-// NOTE(caleb): I'm using both consts and vars of the primes. Using consts where
-// possible in the Go code is worth a small (but measurable) performance boost
-// by avoiding some MOVQs. Vars are needed for the asm and also are useful for
-// convenience in the Go code in a few places where we need to intentionally
-// avoid constant arithmetic (e.g., v1 := prime1 + prime2 fails because the
-// result overflows a uint64).
-var (
- prime1v = prime1
- prime2v = prime2
- prime3v = prime3
- prime4v = prime4
- prime5v = prime5
-)
-
-type xxh struct {
- v1 uint64
- v2 uint64
- v3 uint64
- v4 uint64
- total int
- mem [32]byte
- n int // how much of mem is used
-}
-
-// New creates a new hash.Hash64 that implements the 64-bit xxHash algorithm.
-func New() hash.Hash64 {
- var x xxh
- x.Reset()
- return &x
-}
-
-func (x *xxh) Reset() {
- x.n = 0
- x.total = 0
- x.v1 = prime1v + prime2
- x.v2 = prime2
- x.v3 = 0
- x.v4 = -prime1v
-}
-
-func (x *xxh) Size() int { return 8 }
-func (x *xxh) BlockSize() int { return 32 }
-
-// Write adds more data to x. It always returns len(b), nil.
-func (x *xxh) Write(b []byte) (n int, err error) {
- n = len(b)
- x.total += len(b)
-
- if x.n+len(b) < 32 {
- // This new data doesn't even fill the current block.
- copy(x.mem[x.n:], b)
- x.n += len(b)
- return
- }
-
- if x.n > 0 {
- // Finish off the partial block.
- copy(x.mem[x.n:], b)
- x.v1 = round(x.v1, u64(x.mem[0:8]))
- x.v2 = round(x.v2, u64(x.mem[8:16]))
- x.v3 = round(x.v3, u64(x.mem[16:24]))
- x.v4 = round(x.v4, u64(x.mem[24:32]))
- b = b[32-x.n:]
- x.n = 0
- }
-
- if len(b) >= 32 {
- // One or more full blocks left.
- b = writeBlocks(x, b)
- }
-
- // Store any remaining partial block.
- copy(x.mem[:], b)
- x.n = len(b)
-
- return
-}
-
-func (x *xxh) Sum(b []byte) []byte {
- s := x.Sum64()
- return append(
- b,
- byte(s>>56),
- byte(s>>48),
- byte(s>>40),
- byte(s>>32),
- byte(s>>24),
- byte(s>>16),
- byte(s>>8),
- byte(s),
- )
-}
-
-func (x *xxh) Sum64() uint64 {
- var h uint64
-
- if x.total >= 32 {
- v1, v2, v3, v4 := x.v1, x.v2, x.v3, x.v4
- h = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4)
- h = mergeRound(h, v1)
- h = mergeRound(h, v2)
- h = mergeRound(h, v3)
- h = mergeRound(h, v4)
- } else {
- h = x.v3 + prime5
- }
-
- h += uint64(x.total)
-
- i, end := 0, x.n
- for ; i+8 <= end; i += 8 {
- k1 := round(0, u64(x.mem[i:i+8]))
- h ^= k1
- h = rol27(h)*prime1 + prime4
- }
- if i+4 <= end {
- h ^= uint64(u32(x.mem[i:i+4])) * prime1
- h = rol23(h)*prime2 + prime3
- i += 4
- }
- for i < end {
- h ^= uint64(x.mem[i]) * prime5
- h = rol11(h) * prime1
- i++
- }
-
- h ^= h >> 33
- h *= prime2
- h ^= h >> 29
- h *= prime3
- h ^= h >> 32
-
- return h
-}
-
-func u64(b []byte) uint64 { return binary.LittleEndian.Uint64(b) }
-func u32(b []byte) uint32 { return binary.LittleEndian.Uint32(b) }
-
-func round(acc, input uint64) uint64 {
- acc += input * prime2
- acc = rol31(acc)
- acc *= prime1
- return acc
-}
-
-func mergeRound(acc, val uint64) uint64 {
- val = round(0, val)
- acc ^= val
- acc = acc*prime1 + prime4
- return acc
-}
diff --git a/vendor/github.com/cespare/xxhash/xxhash_amd64.go b/vendor/github.com/cespare/xxhash/xxhash_amd64.go
deleted file mode 100644
index d617652..0000000
--- a/vendor/github.com/cespare/xxhash/xxhash_amd64.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// +build !appengine
-// +build gc
-// +build !purego
-
-package xxhash
-
-// Sum64 computes the 64-bit xxHash digest of b.
-//
-//go:noescape
-func Sum64(b []byte) uint64
-
-func writeBlocks(x *xxh, b []byte) []byte
diff --git a/vendor/github.com/cespare/xxhash/xxhash_amd64.s b/vendor/github.com/cespare/xxhash/xxhash_amd64.s
deleted file mode 100644
index 757f201..0000000
--- a/vendor/github.com/cespare/xxhash/xxhash_amd64.s
+++ /dev/null
@@ -1,233 +0,0 @@
-// +build !appengine
-// +build gc
-// +build !purego
-
-#include "textflag.h"
-
-// Register allocation:
-// AX h
-// CX pointer to advance through b
-// DX n
-// BX loop end
-// R8 v1, k1
-// R9 v2
-// R10 v3
-// R11 v4
-// R12 tmp
-// R13 prime1v
-// R14 prime2v
-// R15 prime4v
-
-// round reads from and advances the buffer pointer in CX.
-// It assumes that R13 has prime1v and R14 has prime2v.
-#define round(r) \
- MOVQ (CX), R12 \
- ADDQ $8, CX \
- IMULQ R14, R12 \
- ADDQ R12, r \
- ROLQ $31, r \
- IMULQ R13, r
-
-// mergeRound applies a merge round on the two registers acc and val.
-// It assumes that R13 has prime1v, R14 has prime2v, and R15 has prime4v.
-#define mergeRound(acc, val) \
- IMULQ R14, val \
- ROLQ $31, val \
- IMULQ R13, val \
- XORQ val, acc \
- IMULQ R13, acc \
- ADDQ R15, acc
-
-// func Sum64(b []byte) uint64
-TEXT ·Sum64(SB), NOSPLIT, $0-32
- // Load fixed primes.
- MOVQ ·prime1v(SB), R13
- MOVQ ·prime2v(SB), R14
- MOVQ ·prime4v(SB), R15
-
- // Load slice.
- MOVQ b_base+0(FP), CX
- MOVQ b_len+8(FP), DX
- LEAQ (CX)(DX*1), BX
-
- // The first loop limit will be len(b)-32.
- SUBQ $32, BX
-
- // Check whether we have at least one block.
- CMPQ DX, $32
- JLT noBlocks
-
- // Set up initial state (v1, v2, v3, v4).
- MOVQ R13, R8
- ADDQ R14, R8
- MOVQ R14, R9
- XORQ R10, R10
- XORQ R11, R11
- SUBQ R13, R11
-
- // Loop until CX > BX.
-blockLoop:
- round(R8)
- round(R9)
- round(R10)
- round(R11)
-
- CMPQ CX, BX
- JLE blockLoop
-
- MOVQ R8, AX
- ROLQ $1, AX
- MOVQ R9, R12
- ROLQ $7, R12
- ADDQ R12, AX
- MOVQ R10, R12
- ROLQ $12, R12
- ADDQ R12, AX
- MOVQ R11, R12
- ROLQ $18, R12
- ADDQ R12, AX
-
- mergeRound(AX, R8)
- mergeRound(AX, R9)
- mergeRound(AX, R10)
- mergeRound(AX, R11)
-
- JMP afterBlocks
-
-noBlocks:
- MOVQ ·prime5v(SB), AX
-
-afterBlocks:
- ADDQ DX, AX
-
- // Right now BX has len(b)-32, and we want to loop until CX > len(b)-8.
- ADDQ $24, BX
-
- CMPQ CX, BX
- JG fourByte
-
-wordLoop:
- // Calculate k1.
- MOVQ (CX), R8
- ADDQ $8, CX
- IMULQ R14, R8
- ROLQ $31, R8
- IMULQ R13, R8
-
- XORQ R8, AX
- ROLQ $27, AX
- IMULQ R13, AX
- ADDQ R15, AX
-
- CMPQ CX, BX
- JLE wordLoop
-
-fourByte:
- ADDQ $4, BX
- CMPQ CX, BX
- JG singles
-
- MOVL (CX), R8
- ADDQ $4, CX
- IMULQ R13, R8
- XORQ R8, AX
-
- ROLQ $23, AX
- IMULQ R14, AX
- ADDQ ·prime3v(SB), AX
-
-singles:
- ADDQ $4, BX
- CMPQ CX, BX
- JGE finalize
-
-singlesLoop:
- MOVBQZX (CX), R12
- ADDQ $1, CX
- IMULQ ·prime5v(SB), R12
- XORQ R12, AX
-
- ROLQ $11, AX
- IMULQ R13, AX
-
- CMPQ CX, BX
- JL singlesLoop
-
-finalize:
- MOVQ AX, R12
- SHRQ $33, R12
- XORQ R12, AX
- IMULQ R14, AX
- MOVQ AX, R12
- SHRQ $29, R12
- XORQ R12, AX
- IMULQ ·prime3v(SB), AX
- MOVQ AX, R12
- SHRQ $32, R12
- XORQ R12, AX
-
- MOVQ AX, ret+24(FP)
- RET
-
-// writeBlocks uses the same registers as above except that it uses AX to store
-// the x pointer.
-
-// func writeBlocks(x *xxh, b []byte) []byte
-TEXT ·writeBlocks(SB), NOSPLIT, $0-56
- // Load fixed primes needed for round.
- MOVQ ·prime1v(SB), R13
- MOVQ ·prime2v(SB), R14
-
- // Load slice.
- MOVQ b_base+8(FP), CX
- MOVQ CX, ret_base+32(FP) // initialize return base pointer; see NOTE below
- MOVQ b_len+16(FP), DX
- LEAQ (CX)(DX*1), BX
- SUBQ $32, BX
-
- // Load vN from x.
- MOVQ x+0(FP), AX
- MOVQ 0(AX), R8 // v1
- MOVQ 8(AX), R9 // v2
- MOVQ 16(AX), R10 // v3
- MOVQ 24(AX), R11 // v4
-
- // We don't need to check the loop condition here; this function is
- // always called with at least one block of data to process.
-blockLoop:
- round(R8)
- round(R9)
- round(R10)
- round(R11)
-
- CMPQ CX, BX
- JLE blockLoop
-
- // Copy vN back to x.
- MOVQ R8, 0(AX)
- MOVQ R9, 8(AX)
- MOVQ R10, 16(AX)
- MOVQ R11, 24(AX)
-
- // Construct return slice.
- // NOTE: It's important that we don't construct a slice that has a base
- // pointer off the end of the original slice, as in Go 1.7+ this will
- // cause runtime crashes. (See discussion in, for example,
- // https://github.com/golang/go/issues/16772.)
- // Therefore, we calculate the length/cap first, and if they're zero, we
- // keep the old base. This is what the compiler does as well if you
- // write code like
- // b = b[len(b):]
-
- // New length is 32 - (CX - BX) -> BX+32 - CX.
- ADDQ $32, BX
- SUBQ CX, BX
- JZ afterSetBase
-
- MOVQ CX, ret_base+32(FP)
-
-afterSetBase:
- MOVQ BX, ret_len+40(FP)
- MOVQ BX, ret_cap+48(FP) // set cap == len
-
- RET
diff --git a/vendor/github.com/cespare/xxhash/xxhash_other.go b/vendor/github.com/cespare/xxhash/xxhash_other.go
deleted file mode 100644
index c68d13f..0000000
--- a/vendor/github.com/cespare/xxhash/xxhash_other.go
+++ /dev/null
@@ -1,75 +0,0 @@
-// +build !amd64 appengine !gc purego
-
-package xxhash
-
-// Sum64 computes the 64-bit xxHash digest of b.
-func Sum64(b []byte) uint64 {
- // A simpler version would be
- // x := New()
- // x.Write(b)
- // return x.Sum64()
- // but this is faster, particularly for small inputs.
-
- n := len(b)
- var h uint64
-
- if n >= 32 {
- v1 := prime1v + prime2
- v2 := prime2
- v3 := uint64(0)
- v4 := -prime1v
- for len(b) >= 32 {
- v1 = round(v1, u64(b[0:8:len(b)]))
- v2 = round(v2, u64(b[8:16:len(b)]))
- v3 = round(v3, u64(b[16:24:len(b)]))
- v4 = round(v4, u64(b[24:32:len(b)]))
- b = b[32:len(b):len(b)]
- }
- h = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4)
- h = mergeRound(h, v1)
- h = mergeRound(h, v2)
- h = mergeRound(h, v3)
- h = mergeRound(h, v4)
- } else {
- h = prime5
- }
-
- h += uint64(n)
-
- i, end := 0, len(b)
- for ; i+8 <= end; i += 8 {
- k1 := round(0, u64(b[i:i+8:len(b)]))
- h ^= k1
- h = rol27(h)*prime1 + prime4
- }
- if i+4 <= end {
- h ^= uint64(u32(b[i:i+4:len(b)])) * prime1
- h = rol23(h)*prime2 + prime3
- i += 4
- }
- for ; i < end; i++ {
- h ^= uint64(b[i]) * prime5
- h = rol11(h) * prime1
- }
-
- h ^= h >> 33
- h *= prime2
- h ^= h >> 29
- h *= prime3
- h ^= h >> 32
-
- return h
-}
-
-func writeBlocks(x *xxh, b []byte) []byte {
- v1, v2, v3, v4 := x.v1, x.v2, x.v3, x.v4
- for len(b) >= 32 {
- v1 = round(v1, u64(b[0:8:len(b)]))
- v2 = round(v2, u64(b[8:16:len(b)]))
- v3 = round(v3, u64(b[16:24:len(b)]))
- v4 = round(v4, u64(b[24:32:len(b)]))
- b = b[32:len(b):len(b)]
- }
- x.v1, x.v2, x.v3, x.v4 = v1, v2, v3, v4
- return b
-}
diff --git a/vendor/github.com/cespare/xxhash/xxhash_safe.go b/vendor/github.com/cespare/xxhash/xxhash_safe.go
deleted file mode 100644
index dfa15ab..0000000
--- a/vendor/github.com/cespare/xxhash/xxhash_safe.go
+++ /dev/null
@@ -1,10 +0,0 @@
-// +build appengine
-
-// This file contains the safe implementations of otherwise unsafe-using code.
-
-package xxhash
-
-// Sum64String computes the 64-bit xxHash digest of s.
-func Sum64String(s string) uint64 {
- return Sum64([]byte(s))
-}
diff --git a/vendor/github.com/cespare/xxhash/xxhash_unsafe.go b/vendor/github.com/cespare/xxhash/xxhash_unsafe.go
deleted file mode 100644
index d2b64e8..0000000
--- a/vendor/github.com/cespare/xxhash/xxhash_unsafe.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build !appengine
-
-// This file encapsulates usage of unsafe.
-// xxhash_safe.go contains the safe implementations.
-
-package xxhash
-
-import (
- "reflect"
- "unsafe"
-)
-
-// Sum64String computes the 64-bit xxHash digest of s.
-// It may be faster than Sum64([]byte(s)) by avoiding a copy.
-//
-// TODO(caleb): Consider removing this if an optimization is ever added to make
-// it unnecessary: https://golang.org/issue/2205.
-//
-// TODO(caleb): We still have a function call; we could instead write Go/asm
-// copies of Sum64 for strings to squeeze out a bit more speed.
-func Sum64String(s string) uint64 {
- // See https://groups.google.com/d/msg/golang-nuts/dcjzJy-bSpw/tcZYBzQqAQAJ
- // for some discussion about this unsafe conversion.
- var b []byte
- bh := (*reflect.SliceHeader)(unsafe.Pointer(&b))
- bh.Data = (*reflect.StringHeader)(unsafe.Pointer(&s)).Data
- bh.Len = len(s)
- bh.Cap = len(s)
- return Sum64(b)
-}
diff --git a/vendor/github.com/docker/docker/AUTHORS b/vendor/github.com/docker/docker/AUTHORS
deleted file mode 100644
index 246e2a3..0000000
--- a/vendor/github.com/docker/docker/AUTHORS
+++ /dev/null
@@ -1,1652 +0,0 @@
-# This file lists all individuals having contributed content to the repository.
-# For how it is generated, see `hack/generate-authors.sh`.
-
-Aanand Prasad
-Aaron Davidson
-Aaron Feng
-Aaron Huslage
-Aaron Lehmann
-Aaron Welch
-Abel Muiño
-Abhijeet Kasurde
-Abhinav Ajgaonkar
-Abhishek Chanda
-Abin Shahab
-Adam Avilla
-Adam Kunk
-Adam Miller
-Adam Mills
-Adam Singer
-Adam Walz
-Aditi Rajagopal
-Aditya
-Adolfo Ochagavía
-Adria Casas
-Adrian Moisey
-Adrian Mouat
-Adrian Oprea
-Adrien Folie
-Adrien Gallouët
-Ahmed Kamal
-Ahmet Alp Balkan
-Aidan Feldman
-Aidan Hobson Sayers
-AJ Bowen
-Ajey Charantimath
-ajneu
-Akihiro Suda
-Al Tobey
-alambike
-Alan Scherger
-Alan Thompson
-Albert Callarisa
-Albert Zhang
-Aleksa Sarai
-Aleksandrs Fadins
-Alena Prokharchyk
-Alessandro Boch
-Alessio Biancalana
-Alex Chan
-Alex Coventry
-Alex Crawford
-Alex Ellis
-Alex Gaynor
-Alex Olshansky
-Alex Samorukov
-Alex Warhawk
-Alexander Artemenko
-Alexander Boyd
-Alexander Larsson
-Alexander Morozov
-Alexander Shopov
-Alexandre Beslic
-Alexandre González
-Alexandru Sfirlogea
-Alexey Guskov
-Alexey Kotlyarov
-Alexey Shamrin
-Alexis THOMAS
-Ali Dehghani
-Allen Madsen
-Allen Sun
-almoehi
-Alvaro Saurin
-Alvin Richards
-amangoel
-Amen Belayneh
-Amit Bakshi
-Amit Krishnan
-Amit Shukla
-Amy Lindburg
-Anand Patil
-AnandkumarPatel
-Anatoly Borodin
-Anchal Agrawal
-Anders Janmyr
-Andre Dublin <81dublin@gmail.com>
-Andre Granovsky
-Andrea Luzzardi
-Andrea Turli
-Andreas Köhler
-Andreas Savvides
-Andreas Tiefenthaler
-Andrei Gherzan
-Andrew C. Bodine
-Andrew Clay Shafer
-Andrew Duckworth
-Andrew France
-Andrew Gerrand
-Andrew Guenther
-Andrew Kuklewicz
-Andrew Macgregor
-Andrew Macpherson
-Andrew Martin
-Andrew Munsell
-Andrew Po
-Andrew Weiss
-Andrew Williams
-Andrews Medina
-Andrey Petrov
-Andrey Stolbovsky
-André Martins
-andy
-Andy Chambers
-andy diller
-Andy Goldstein
-Andy Kipp
-Andy Rothfusz
-Andy Smith
-Andy Wilson
-Anes Hasicic
-Anil Belur
-Anil Madhavapeddy
-Ankush Agarwal
-Anonmily
-Anthon van der Neut
-Anthony Baire
-Anthony Bishopric
-Anthony Dahanne
-Anton Löfgren
-Anton Nikitin
-Anton Polonskiy
-Anton Tiurin
-Antonio Murdaca
-Antonis Kalipetis
-Antony Messerli
-Anuj Bahuguna
-Anusha Ragunathan
-apocas
-ArikaChen
-Arnaud Lefebvre
-Arnaud Porterie
-Arthur Barr
-Arthur Gautier
-Artur Meyster
-Arun Gupta
-Asbjørn Enge
-averagehuman
-Avi Das
-Avi Miller
-Avi Vaid
-ayoshitake
-Azat Khuyiyakhmetov
-Bardia Keyoumarsi
-Barnaby Gray
-Barry Allard
-Bartłomiej Piotrowski
-Bastiaan Bakker
-bdevloed
-Ben Firshman
-Ben Golub
-Ben Hall
-Ben Sargent
-Ben Severson
-Ben Toews
-Ben Wiklund
-Benjamin Atkin
-Benoit Chesneau
-Bernerd Schaefer
-Bert Goethals
-Bharath Thiruveedula
-Bhiraj Butala
-Bilal Amarni
-Bill W
-bin liu
-Blake Geno
-Boaz Shuster
-bobby abbott
-boucher
-Bouke Haarsma
-Boyd Hemphill
-boynux
-Bradley Cicenas
-Bradley Wright
-Brandon Liu
-Brandon Philips
-Brandon Rhodes
-Brendan Dixon
-Brent Salisbury
-Brett Higgins
-Brett Kochendorfer
-Brian (bex) Exelbierd
-Brian Bland
-Brian DeHamer
-Brian Dorsey
-Brian Flad
-Brian Goff
-Brian McCallister
-Brian Olsen
-Brian Shumate
-Brian Torres-Gil
-Brian Trump
-Brice Jaglin
-Briehan Lombaard
-Bruno Bigras
-Bruno Binet
-Bruno Gazzera
-Bruno Renié
-Bryan Bess
-Bryan Boreham
-Bryan Matsuo
-Bryan Murphy
-buddhamagnet
-Burke Libbey
-Byung Kang
-Caleb Spare
-Calen Pennington
-Cameron Boehmer
-Cameron Spear
-Campbell Allen
-Candid Dauth
-Cao Weiwei
-Carl Henrik Lunde
-Carl Loa Odin
-Carl X. Su
-Carlos Alexandro Becker
-Carlos Sanchez
-Carol Fager-Higgins
-Cary
-Casey Bisson
-Cedric Davies
-Cezar Sa Espinola
-Chad Swenson
-Chance Zibolski
-Chander G
-Charles Chan
-Charles Hooper
-Charles Law
-Charles Lindsay
-Charles Merriam
-Charles Sarrazin
-Charles Smith
-Charlie Lewis
-Chase Bolt
-ChaYoung You
-Chen Chao