{"algorithm":"levels","about":["The levels of a directed graph without cycles are waves of work. The first level holds the vertices with no incoming edges. Each later level holds the vertices whose incoming edges all come from earlier levels, so the vertices of one level have no edges between them and can all run at once.","dag.Levels works like Kahn's topological sort. It counts the incoming edges of each vertex, and each time it removes the edges out of a vertex, a vertex left with none gets the level after the deepest vertex that pointed to it. The level of a vertex is the length of the longest path to it, levels[0] holds the vertices with no incoming edges, and the vertices of each level keep the graph's vertex order. It costs O(V+E).","The number of levels is the fewest rounds the work can take, and the widest level is the most workers a round can use. A round waits for its slowest task, though. To start each task as soon as its own dependencies finish, use the ready-set tracker. Levels returns ErrDAGHasCycle for a graph with a cycle and ErrNotDirected for an undirected one."],"template":{"id":"go-mod-graph","name":"Go module graph","description":"The module graph of github.com/gin-gonic/gin v1.9.1, as go mod graph prints it. Each edge points from a module to a module version it requires.","family":"dag","directed":true,"weighted":false,"acyclic":true,"vertices":[{"id":"github.com/gin-gonic/gin","x":41,"y":509},{"id":"github.com/bytedance/sonic@v1.9.1","x":143,"y":552},{"id":"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","x":245,"y":652},{"id":"github.com/davecgh/go-spew@v1.1.1","x":755,"y":603},{"id":"github.com/gabriel-vasile/mimetype@v1.4.2","x":245,"y":346},{"id":"github.com/gin-contrib/sse@v0.1.0","x":653,"y":815},{"id":"github.com/go-playground/locales@v0.14.1","x":347,"y":42},{"id":"github.com/go-playground/universal-translator@v0.18.1","x":245,"y":142},{"id":"github.com/go-playground/validator/v10@v10.14.0","x":143,"y":144},{"id":"github.com/goccy/go-json@v0.10.2","x":143,"y":654},{"id":"github.com/json-iterator/go@v1.1.12","x":143,"y":858},{"id":"github.com/klauspost/cpuid/v2@v2.2.4","x":143,"y":450},{"id":"github.com/leodido/go-urn@v1.2.4","x":245,"y":448},{"id":"github.com/mattn/go-isatty@v0.0.19","x":143,"y":42},{"id":"github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","x":143,"y":246},{"id":"github.com/modern-go/reflect2@v1.0.2","x":245,"y":856},{"id":"github.com/pelletier/go-toml/v2@v2.0.8","x":143,"y":348},{"id":"github.com/pmezard/go-difflib@v1.0.0","x":857,"y":457},{"id":"github.com/stretchr/testify@v1.8.3","x":347,"y":348},{"id":"github.com/twitchyliquid64/golang-asm@v0.15.1","x":449,"y":348},{"id":"github.com/ugorji/go/codec@v1.2.11","x":653,"y":917},{"id":"golang.org/x/arch@v0.3.0","x":449,"y":654},{"id":"golang.org/x/crypto@v0.9.0","x":143,"y":756},{"id":"golang.org/x/net@v0.10.0","x":245,"y":754},{"id":"golang.org/x/sys@v0.8.0","x":347,"y":654},{"id":"golang.org/x/text@v0.9.0","x":347,"y":858},{"id":"google.golang.org/protobuf@v1.30.0","x":143,"y":960},{"id":"gopkg.in/yaml.v3@v3.0.1","x":653,"y":323},{"id":"github.com/klauspost/cpuid/v2@v2.0.9","x":551,"y":507},{"id":"github.com/stretchr/testify@v1.8.1","x":347,"y":450},{"id":"golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","x":449,"y":552},{"id":"github.com/bytedance/sonic@v1.5.0","x":347,"y":552},{"id":"golang.org/x/net@v0.8.0","x":347,"y":144},{"id":"github.com/stretchr/testify@v1.3.0","x":755,"y":909},{"id":"golang.org/x/text@v0.3.8","x":551,"y":43},{"id":"github.com/go-playground/assert/v2@v2.2.0","x":245,"y":244},{"id":"golang.org/x/crypto@v0.7.0","x":551,"y":147},{"id":"golang.org/x/text@v0.8.0","x":653,"y":153},{"id":"golang.org/x/sys@v0.6.0","x":245,"y":40},{"id":"github.com/google/gofuzz@v1.0.0","x":755,"y":807},{"id":"github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","x":959,"y":960},{"id":"golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","x":245,"y":550},{"id":"github.com/stretchr/testify@v1.8.2","x":347,"y":246},{"id":"github.com/stretchr/objx@v0.5.0","x":449,"y":246},{"id":"rsc.io/pdf@v0.1.1","x":551,"y":609},{"id":"golang.org/x/term@v0.8.0","x":347,"y":756},{"id":"golang.org/x/tools@v0.6.0","x":653,"y":713},{"id":"golang.org/x/mod@v0.8.0","x":449,"y":858},{"id":"golang.org/x/sys@v0.5.0","x":449,"y":756},{"id":"github.com/golang/protobuf@v1.5.0","x":245,"y":960},{"id":"github.com/google/go-cmp@v0.5.5","x":449,"y":960},{"id":"gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405","x":959,"y":438},{"id":"github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","x":449,"y":450},{"id":"github.com/stretchr/testify@v1.7.0","x":755,"y":705},{"id":"github.com/davecgh/go-spew@v1.1.0","x":857,"y":763},{"id":"github.com/stretchr/objx@v0.1.0","x":857,"y":661},{"id":"github.com/stretchr/testify@v1.8.0","x":551,"y":392},{"id":"google.golang.org/protobuf@v1.26.0-rc.1","x":347,"y":960},{"id":"golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543","x":551,"y":960},{"id":"gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c","x":857,"y":559},{"id":"github.com/stretchr/objx@v0.4.0","x":653,"y":499},{"id":"github.com/stretchr/testify@v1.7.1","x":755,"y":501}],"edges":[{"from":"github.com/gin-gonic/gin","to":"github.com/bytedance/sonic@v1.9.1"},{"from":"github.com/gin-gonic/gin","to":"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311"},{"from":"github.com/gin-gonic/gin","to":"github.com/davecgh/go-spew@v1.1.1"},{"from":"github.com/gin-gonic/gin","to":"github.com/gabriel-vasile/mimetype@v1.4.2"},{"from":"github.com/gin-gonic/gin","to":"github.com/gin-contrib/sse@v0.1.0"},{"from":"github.com/gin-gonic/gin","to":"github.com/go-playground/locales@v0.14.1"},{"from":"github.com/gin-gonic/gin","to":"github.com/go-playground/universal-translator@v0.18.1"},{"from":"github.com/gin-gonic/gin","to":"github.com/go-playground/validator/v10@v10.14.0"},{"from":"github.com/gin-gonic/gin","to":"github.com/goccy/go-json@v0.10.2"},{"from":"github.com/gin-gonic/gin","to":"github.com/json-iterator/go@v1.1.12"},{"from":"github.com/gin-gonic/gin","to":"github.com/klauspost/cpuid/v2@v2.2.4"},{"from":"github.com/gin-gonic/gin","to":"github.com/leodido/go-urn@v1.2.4"},{"from":"github.com/gin-gonic/gin","to":"github.com/mattn/go-isatty@v0.0.19"},{"from":"github.com/gin-gonic/gin","to":"github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd"},{"from":"github.com/gin-gonic/gin","to":"github.com/modern-go/reflect2@v1.0.2"},{"from":"github.com/gin-gonic/gin","to":"github.com/pelletier/go-toml/v2@v2.0.8"},{"from":"github.com/gin-gonic/gin","to":"github.com/pmezard/go-difflib@v1.0.0"},{"from":"github.com/gin-gonic/gin","to":"github.com/stretchr/testify@v1.8.3"},{"from":"github.com/gin-gonic/gin","to":"github.com/twitchyliquid64/golang-asm@v0.15.1"},{"from":"github.com/gin-gonic/gin","to":"github.com/ugorji/go/codec@v1.2.11"},{"from":"github.com/gin-gonic/gin","to":"golang.org/x/arch@v0.3.0"},{"from":"github.com/gin-gonic/gin","to":"golang.org/x/crypto@v0.9.0"},{"from":"github.com/gin-gonic/gin","to":"golang.org/x/net@v0.10.0"},{"from":"github.com/gin-gonic/gin","to":"golang.org/x/sys@v0.8.0"},{"from":"github.com/gin-gonic/gin","to":"golang.org/x/text@v0.9.0"},{"from":"github.com/gin-gonic/gin","to":"google.golang.org/protobuf@v1.30.0"},{"from":"github.com/gin-gonic/gin","to":"gopkg.in/yaml.v3@v3.0.1"},{"from":"github.com/bytedance/sonic@v1.9.1","to":"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311"},{"from":"github.com/bytedance/sonic@v1.9.1","to":"github.com/davecgh/go-spew@v1.1.1"},{"from":"github.com/bytedance/sonic@v1.9.1","to":"github.com/klauspost/cpuid/v2@v2.0.9"},{"from":"github.com/bytedance/sonic@v1.9.1","to":"github.com/stretchr/testify@v1.8.1"},{"from":"github.com/bytedance/sonic@v1.9.1","to":"github.com/twitchyliquid64/golang-asm@v0.15.1"},{"from":"github.com/bytedance/sonic@v1.9.1","to":"golang.org/x/arch@v0.0.0-20210923205945-b76863e36670"},{"from":"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","to":"github.com/bytedance/sonic@v1.5.0"},{"from":"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","to":"github.com/davecgh/go-spew@v1.1.1"},{"from":"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","to":"github.com/klauspost/cpuid/v2@v2.0.9"},{"from":"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","to":"github.com/stretchr/testify@v1.8.1"},{"from":"github.com/gabriel-vasile/mimetype@v1.4.2","to":"golang.org/x/net@v0.8.0"},{"from":"github.com/gin-contrib/sse@v0.1.0","to":"github.com/stretchr/testify@v1.3.0"},{"from":"github.com/go-playground/locales@v0.14.1","to":"golang.org/x/text@v0.3.8"},{"from":"github.com/go-playground/universal-translator@v0.18.1","to":"github.com/go-playground/locales@v0.14.1"},{"from":"github.com/go-playground/validator/v10@v10.14.0","to":"github.com/gabriel-vasile/mimetype@v1.4.2"},{"from":"github.com/go-playground/validator/v10@v10.14.0","to":"github.com/go-playground/assert/v2@v2.2.0"},{"from":"github.com/go-playground/validator/v10@v10.14.0","to":"github.com/go-playground/locales@v0.14.1"},{"from":"github.com/go-playground/validator/v10@v10.14.0","to":"github.com/go-playground/universal-translator@v0.18.1"},{"from":"github.com/go-playground/validator/v10@v10.14.0","to":"github.com/leodido/go-urn@v1.2.4"},{"from":"github.com/go-playground/validator/v10@v10.14.0","to":"golang.org/x/crypto@v0.7.0"},{"from":"github.com/go-playground/validator/v10@v10.14.0","to":"golang.org/x/text@v0.8.0"},{"from":"github.com/go-playground/validator/v10@v10.14.0","to":"golang.org/x/net@v0.8.0"},{"from":"github.com/go-playground/validator/v10@v10.14.0","to":"golang.org/x/sys@v0.6.0"},{"from":"github.com/json-iterator/go@v1.1.12","to":"github.com/davecgh/go-spew@v1.1.1"},{"from":"github.com/json-iterator/go@v1.1.12","to":"github.com/google/gofuzz@v1.0.0"},{"from":"github.com/json-iterator/go@v1.1.12","to":"github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421"},{"from":"github.com/json-iterator/go@v1.1.12","to":"github.com/modern-go/reflect2@v1.0.2"},{"from":"github.com/json-iterator/go@v1.1.12","to":"github.com/stretchr/testify@v1.3.0"},{"from":"github.com/klauspost/cpuid/v2@v2.2.4","to":"golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e"},{"from":"github.com/leodido/go-urn@v1.2.4","to":"github.com/stretchr/testify@v1.8.2"},{"from":"github.com/mattn/go-isatty@v0.0.19","to":"golang.org/x/sys@v0.6.0"},{"from":"github.com/pelletier/go-toml/v2@v2.0.8","to":"github.com/stretchr/testify@v1.8.3"},{"from":"github.com/stretchr/testify@v1.8.3","to":"github.com/davecgh/go-spew@v1.1.1"},{"from":"github.com/stretchr/testify@v1.8.3","to":"github.com/pmezard/go-difflib@v1.0.0"},{"from":"github.com/stretchr/testify@v1.8.3","to":"github.com/stretchr/objx@v0.5.0"},{"from":"github.com/stretchr/testify@v1.8.3","to":"gopkg.in/yaml.v3@v3.0.1"},{"from":"golang.org/x/arch@v0.3.0","to":"rsc.io/pdf@v0.1.1"},{"from":"golang.org/x/crypto@v0.9.0","to":"golang.org/x/net@v0.10.0"},{"from":"golang.org/x/crypto@v0.9.0","to":"golang.org/x/sys@v0.8.0"},{"from":"golang.org/x/crypto@v0.9.0","to":"golang.org/x/term@v0.8.0"},{"from":"golang.org/x/crypto@v0.9.0","to":"golang.org/x/text@v0.9.0"},{"from":"golang.org/x/net@v0.10.0","to":"golang.org/x/sys@v0.8.0"},{"from":"golang.org/x/net@v0.10.0","to":"golang.org/x/term@v0.8.0"},{"from":"golang.org/x/net@v0.10.0","to":"golang.org/x/text@v0.9.0"},{"from":"golang.org/x/text@v0.9.0","to":"golang.org/x/tools@v0.6.0"},{"from":"golang.org/x/text@v0.9.0","to":"golang.org/x/mod@v0.8.0"},{"from":"golang.org/x/text@v0.9.0","to":"golang.org/x/sys@v0.5.0"},{"from":"google.golang.org/protobuf@v1.30.0","to":"github.com/golang/protobuf@v1.5.0"},{"from":"google.golang.org/protobuf@v1.30.0","to":"github.com/google/go-cmp@v0.5.5"},{"from":"gopkg.in/yaml.v3@v3.0.1","to":"gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405"},{"from":"github.com/stretchr/testify@v1.8.1","to":"github.com/davecgh/go-spew@v1.1.1"},{"from":"github.com/stretchr/testify@v1.8.1","to":"github.com/pmezard/go-difflib@v1.0.0"},{"from":"github.com/stretchr/testify@v1.8.1","to":"github.com/stretchr/objx@v0.5.0"},{"from":"github.com/stretchr/testify@v1.8.1","to":"gopkg.in/yaml.v3@v3.0.1"},{"from":"golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","to":"rsc.io/pdf@v0.1.1"},{"from":"github.com/bytedance/sonic@v1.5.0","to":"github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06"},{"from":"github.com/bytedance/sonic@v1.5.0","to":"github.com/davecgh/go-spew@v1.1.1"},{"from":"github.com/bytedance/sonic@v1.5.0","to":"github.com/klauspost/cpuid/v2@v2.0.9"},{"from":"github.com/bytedance/sonic@v1.5.0","to":"github.com/stretchr/testify@v1.7.0"},{"from":"github.com/bytedance/sonic@v1.5.0","to":"github.com/twitchyliquid64/golang-asm@v0.15.1"},{"from":"github.com/bytedance/sonic@v1.5.0","to":"golang.org/x/arch@v0.0.0-20210923205945-b76863e36670"},{"from":"github.com/stretchr/testify@v1.3.0","to":"github.com/davecgh/go-spew@v1.1.0"},{"from":"github.com/stretchr/testify@v1.3.0","to":"github.com/pmezard/go-difflib@v1.0.0"},{"from":"github.com/stretchr/testify@v1.3.0","to":"github.com/stretchr/objx@v0.1.0"},{"from":"github.com/stretchr/testify@v1.8.2","to":"github.com/davecgh/go-spew@v1.1.1"},{"from":"github.com/stretchr/testify@v1.8.2","to":"github.com/pmezard/go-difflib@v1.0.0"},{"from":"github.com/stretchr/testify@v1.8.2","to":"github.com/stretchr/objx@v0.5.0"},{"from":"github.com/stretchr/testify@v1.8.2","to":"gopkg.in/yaml.v3@v3.0.1"},{"from":"github.com/stretchr/objx@v0.5.0","to":"github.com/stretchr/testify@v1.8.0"},{"from":"github.com/golang/protobuf@v1.5.0","to":"github.com/google/go-cmp@v0.5.5"},{"from":"github.com/golang/protobuf@v1.5.0","to":"google.golang.org/protobuf@v1.26.0-rc.1"},{"from":"github.com/google/go-cmp@v0.5.5","to":"golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543"},{"from":"github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","to":"github.com/klauspost/cpuid/v2@v2.0.9"},{"from":"github.com/stretchr/testify@v1.7.0","to":"github.com/davecgh/go-spew@v1.1.0"},{"from":"github.com/stretchr/testify@v1.7.0","to":"github.com/pmezard/go-difflib@v1.0.0"},{"from":"github.com/stretchr/testify@v1.7.0","to":"github.com/stretchr/objx@v0.1.0"},{"from":"github.com/stretchr/testify@v1.7.0","to":"gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c"},{"from":"github.com/stretchr/testify@v1.8.0","to":"github.com/davecgh/go-spew@v1.1.1"},{"from":"github.com/stretchr/testify@v1.8.0","to":"github.com/pmezard/go-difflib@v1.0.0"},{"from":"github.com/stretchr/testify@v1.8.0","to":"github.com/stretchr/objx@v0.4.0"},{"from":"github.com/stretchr/testify@v1.8.0","to":"gopkg.in/yaml.v3@v3.0.1"},{"from":"google.golang.org/protobuf@v1.26.0-rc.1","to":"github.com/google/go-cmp@v0.5.5"},{"from":"gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c","to":"gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405"},{"from":"github.com/stretchr/objx@v0.4.0","to":"github.com/davecgh/go-spew@v1.1.1"},{"from":"github.com/stretchr/objx@v0.4.0","to":"github.com/stretchr/testify@v1.7.1"},{"from":"github.com/stretchr/testify@v1.7.1","to":"github.com/davecgh/go-spew@v1.1.0"},{"from":"github.com/stretchr/testify@v1.7.1","to":"github.com/pmezard/go-difflib@v1.0.0"},{"from":"github.com/stretchr/testify@v1.7.1","to":"github.com/stretchr/objx@v0.1.0"},{"from":"github.com/stretchr/testify@v1.7.1","to":"gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c"}],"source":"go mod graph of github.com/gin-gonic/gin v1.9.1, https://github.com/gin-gonic/gin/tree/v1.9.1","details":{"vertices":62,"edges":116,"directed":true,"weighted":false,"acyclic":true,"negativeWeights":false,"density":0.030671602326811213,"inDegree":{"min":0,"avg":1.8709677419354838,"max":10},"outDegree":{"min":0,"avg":1.8709677419354838,"max":27},"selfLoops":0,"components":1}},"problem":"Which modules can be built at the same time, each round needing only modules an earlier round built?","params":{},"result":{"kind":"groups","groups":[["github.com/gin-gonic/gin"],["github.com/bytedance/sonic@v1.9.1","github.com/gin-contrib/sse@v0.1.0","github.com/go-playground/validator/v10@v10.14.0","github.com/goccy/go-json@v0.10.2","github.com/json-iterator/go@v1.1.12","github.com/klauspost/cpuid/v2@v2.2.4","github.com/mattn/go-isatty@v0.0.19","github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","github.com/pelletier/go-toml/v2@v2.0.8","github.com/ugorji/go/codec@v1.2.11","golang.org/x/arch@v0.3.0","golang.org/x/crypto@v0.9.0","google.golang.org/protobuf@v1.30.0"],["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/gabriel-vasile/mimetype@v1.4.2","github.com/go-playground/assert/v2@v2.2.0","github.com/go-playground/universal-translator@v0.18.1","github.com/golang/protobuf@v1.5.0","github.com/google/gofuzz@v1.0.0","github.com/leodido/go-urn@v1.2.4","github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","github.com/modern-go/reflect2@v1.0.2","github.com/stretchr/testify@v1.3.0","github.com/stretchr/testify@v1.8.3","golang.org/x/crypto@v0.7.0","golang.org/x/net@v0.10.0","golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","golang.org/x/sys@v0.6.0","golang.org/x/text@v0.8.0"],["github.com/bytedance/sonic@v1.5.0","github.com/go-playground/locales@v0.14.1","github.com/stretchr/testify@v1.8.1","github.com/stretchr/testify@v1.8.2","golang.org/x/net@v0.8.0","golang.org/x/sys@v0.8.0","golang.org/x/term@v0.8.0","golang.org/x/text@v0.9.0","google.golang.org/protobuf@v1.26.0-rc.1"],["github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","github.com/google/go-cmp@v0.5.5","github.com/stretchr/objx@v0.5.0","github.com/stretchr/testify@v1.7.0","github.com/twitchyliquid64/golang-asm@v0.15.1","golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","golang.org/x/mod@v0.8.0","golang.org/x/sys@v0.5.0","golang.org/x/text@v0.3.8","golang.org/x/tools@v0.6.0"],["github.com/klauspost/cpuid/v2@v2.0.9","github.com/stretchr/testify@v1.8.0","golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543","rsc.io/pdf@v0.1.1"],["github.com/stretchr/objx@v0.4.0","gopkg.in/yaml.v3@v3.0.1"],["github.com/davecgh/go-spew@v1.1.1","github.com/stretchr/testify@v1.7.1"],["github.com/davecgh/go-spew@v1.1.0","github.com/pmezard/go-difflib@v1.0.0","github.com/stretchr/objx@v0.1.0","gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c"],["gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405"]]},"answer":"The 62 vertices fall into 10 levels, so the work takes at least 10 rounds. The widest is level 3, with 16 vertices that can run at the same time: github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311, github.com/gabriel-vasile/mimetype@v1.4.2, github.com/go-playground/assert/v2@v2.2.0, github.com/go-playground/universal-translator@v0.18.1 and 12 more.","legend":{"vertex":[{"id":"idle","label":"Has incoming edges left","color":"#64748B","shape":"hollow"},{"id":"waiting","label":"No incoming edges left, next level","color":"#E69F00","shape":"dashed-square"},{"id":"component-2","label":"Level 2, 13 vertices","color":"#56B4E9","shape":"filled"},{"id":"component-3","label":"Level 3, 16 vertices","color":"#CC79A7","shape":"dashed-square"},{"id":"component-4","label":"Level 4, 9 vertices","color":"#E69F00","shape":"filled"},{"id":"component-5","label":"Level 5, 10 vertices","color":"#F0E442","shape":"dashed-square"},{"id":"component-6","label":"Level 6, 4 vertices","color":"#D55E00","shape":"filled"},{"id":"component-7","label":"Level 7, 2 vertices","color":"#56B4E9","shape":"dashed-square"},{"id":"component-8","label":"Level 8, 2 vertices","color":"#CC79A7","shape":"filled"},{"id":"component-9","label":"Level 9, 4 vertices","color":"#009E73","shape":"dashed-square"},{"id":"single","label":"A level of one vertex","color":"#CBD5E1","shape":"hollow"}],"edge":[{"id":"idle","label":"Edge","color":"#475569","shape":"line"},{"id":"removed","label":"Removed, its start has a level","color":"#CC79A7","shape":"dashed"}],"panels":[{"id":"indegree","title":"In-degree left","kind":"table"},{"id":"levels","title":"Levels","kind":"groups"}]},"steps":[{"say":"Count the incoming edges of each vertex. A vertex with none waits for nothing, so it can go in the first level.","ops":[{"panel":"indegree","set":{"github.com/gin-gonic/gin":"0"}},{"panel":"indegree","set":{"github.com/bytedance/sonic@v1.9.1":"1"}},{"panel":"indegree","set":{"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311":"2"}},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.1":"10"}},{"panel":"indegree","set":{"github.com/gabriel-vasile/mimetype@v1.4.2":"2"}},{"panel":"indegree","set":{"github.com/gin-contrib/sse@v0.1.0":"1"}},{"panel":"indegree","set":{"github.com/go-playground/locales@v0.14.1":"3"}},{"panel":"indegree","set":{"github.com/go-playground/universal-translator@v0.18.1":"2"}},{"panel":"indegree","set":{"github.com/go-playground/validator/v10@v10.14.0":"1"}},{"panel":"indegree","set":{"github.com/goccy/go-json@v0.10.2":"1"}},{"panel":"indegree","set":{"github.com/json-iterator/go@v1.1.12":"1"}},{"panel":"indegree","set":{"github.com/klauspost/cpuid/v2@v2.2.4":"1"}},{"panel":"indegree","set":{"github.com/leodido/go-urn@v1.2.4":"2"}},{"panel":"indegree","set":{"github.com/mattn/go-isatty@v0.0.19":"1"}},{"panel":"indegree","set":{"github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd":"1"}},{"panel":"indegree","set":{"github.com/modern-go/reflect2@v1.0.2":"2"}},{"panel":"indegree","set":{"github.com/pelletier/go-toml/v2@v2.0.8":"1"}},{"panel":"indegree","set":{"github.com/pmezard/go-difflib@v1.0.0":"8"}},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.8.3":"2"}},{"panel":"indegree","set":{"github.com/twitchyliquid64/golang-asm@v0.15.1":"3"}},{"panel":"indegree","set":{"github.com/ugorji/go/codec@v1.2.11":"1"}},{"panel":"indegree","set":{"golang.org/x/arch@v0.3.0":"1"}},{"panel":"indegree","set":{"golang.org/x/crypto@v0.9.0":"1"}},{"panel":"indegree","set":{"golang.org/x/net@v0.10.0":"2"}},{"panel":"indegree","set":{"golang.org/x/sys@v0.8.0":"3"}},{"panel":"indegree","set":{"golang.org/x/text@v0.9.0":"3"}},{"panel":"indegree","set":{"google.golang.org/protobuf@v1.30.0":"1"}},{"panel":"indegree","set":{"gopkg.in/yaml.v3@v3.0.1":"5"}},{"panel":"indegree","set":{"github.com/klauspost/cpuid/v2@v2.0.9":"4"}},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.8.1":"2"}},{"panel":"indegree","set":{"golang.org/x/arch@v0.0.0-20210923205945-b76863e36670":"2"}},{"panel":"indegree","set":{"github.com/bytedance/sonic@v1.5.0":"1"}},{"panel":"indegree","set":{"golang.org/x/net@v0.8.0":"2"}},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.3.0":"2"}},{"panel":"indegree","set":{"golang.org/x/text@v0.3.8":"1"}},{"panel":"indegree","set":{"github.com/go-playground/assert/v2@v2.2.0":"1"}},{"panel":"indegree","set":{"golang.org/x/crypto@v0.7.0":"1"}},{"panel":"indegree","set":{"golang.org/x/text@v0.8.0":"1"}},{"panel":"indegree","set":{"golang.org/x/sys@v0.6.0":"2"}},{"panel":"indegree","set":{"github.com/google/gofuzz@v1.0.0":"1"}},{"panel":"indegree","set":{"github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421":"1"}},{"panel":"indegree","set":{"golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e":"1"}},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.8.2":"1"}},{"panel":"indegree","set":{"github.com/stretchr/objx@v0.5.0":"3"}},{"panel":"indegree","set":{"rsc.io/pdf@v0.1.1":"2"}},{"panel":"indegree","set":{"golang.org/x/term@v0.8.0":"2"}},{"panel":"indegree","set":{"golang.org/x/tools@v0.6.0":"1"}},{"panel":"indegree","set":{"golang.org/x/mod@v0.8.0":"1"}},{"panel":"indegree","set":{"golang.org/x/sys@v0.5.0":"1"}},{"panel":"indegree","set":{"github.com/golang/protobuf@v1.5.0":"1"}},{"panel":"indegree","set":{"github.com/google/go-cmp@v0.5.5":"3"}},{"panel":"indegree","set":{"gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405":"2"}},{"panel":"indegree","set":{"github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06":"1"}},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.7.0":"1"}},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.0":"3"}},{"panel":"indegree","set":{"github.com/stretchr/objx@v0.1.0":"3"}},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.8.0":"1"}},{"panel":"indegree","set":{"google.golang.org/protobuf@v1.26.0-rc.1":"1"}},{"panel":"indegree","set":{"golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543":"1"}},{"panel":"indegree","set":{"gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c":"2"}},{"panel":"indegree","set":{"github.com/stretchr/objx@v0.4.0":"1"}},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.7.1":"1"}}]},{"say":"Level 1: only github.com/gin-gonic/gin has no incoming edges, so it runs first, on its own.","ops":[{"v":"github.com/gin-gonic/gin","state":"single"},{"panel":"levels","groups":[["github.com/gin-gonic/gin"]]}]},{"say":"Remove the 27 edges out of level 1. That leaves github.com/bytedance/sonic@v1.9.1, github.com/gin-contrib/sse@v0.1.0, github.com/go-playground/validator/v10@v10.14.0, github.com/goccy/go-json@v0.10.2, github.com/json-iterator/go@v1.1.12, github.com/klauspost/cpuid/v2@v2.2.4 and 7 more with no incoming edges, so they go in level 2.","ops":[{"e":["github.com/gin-gonic/gin","github.com/bytedance/sonic@v1.9.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/bytedance/sonic@v1.9.1":"0"}},{"e":["github.com/gin-gonic/gin","github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311"],"state":"removed"},{"panel":"indegree","set":{"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311":"1"}},{"e":["github.com/gin-gonic/gin","github.com/davecgh/go-spew@v1.1.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.1":"9"}},{"e":["github.com/gin-gonic/gin","github.com/gabriel-vasile/mimetype@v1.4.2"],"state":"removed"},{"panel":"indegree","set":{"github.com/gabriel-vasile/mimetype@v1.4.2":"1"}},{"e":["github.com/gin-gonic/gin","github.com/gin-contrib/sse@v0.1.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/gin-contrib/sse@v0.1.0":"0"}},{"e":["github.com/gin-gonic/gin","github.com/go-playground/locales@v0.14.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/go-playground/locales@v0.14.1":"2"}},{"e":["github.com/gin-gonic/gin","github.com/go-playground/universal-translator@v0.18.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/go-playground/universal-translator@v0.18.1":"1"}},{"e":["github.com/gin-gonic/gin","github.com/go-playground/validator/v10@v10.14.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/go-playground/validator/v10@v10.14.0":"0"}},{"e":["github.com/gin-gonic/gin","github.com/goccy/go-json@v0.10.2"],"state":"removed"},{"panel":"indegree","set":{"github.com/goccy/go-json@v0.10.2":"0"}},{"e":["github.com/gin-gonic/gin","github.com/json-iterator/go@v1.1.12"],"state":"removed"},{"panel":"indegree","set":{"github.com/json-iterator/go@v1.1.12":"0"}},{"e":["github.com/gin-gonic/gin","github.com/klauspost/cpuid/v2@v2.2.4"],"state":"removed"},{"panel":"indegree","set":{"github.com/klauspost/cpuid/v2@v2.2.4":"0"}},{"e":["github.com/gin-gonic/gin","github.com/leodido/go-urn@v1.2.4"],"state":"removed"},{"panel":"indegree","set":{"github.com/leodido/go-urn@v1.2.4":"1"}},{"e":["github.com/gin-gonic/gin","github.com/mattn/go-isatty@v0.0.19"],"state":"removed"},{"panel":"indegree","set":{"github.com/mattn/go-isatty@v0.0.19":"0"}},{"e":["github.com/gin-gonic/gin","github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd"],"state":"removed"},{"panel":"indegree","set":{"github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd":"0"}},{"e":["github.com/gin-gonic/gin","github.com/modern-go/reflect2@v1.0.2"],"state":"removed"},{"panel":"indegree","set":{"github.com/modern-go/reflect2@v1.0.2":"1"}},{"e":["github.com/gin-gonic/gin","github.com/pelletier/go-toml/v2@v2.0.8"],"state":"removed"},{"panel":"indegree","set":{"github.com/pelletier/go-toml/v2@v2.0.8":"0"}},{"e":["github.com/gin-gonic/gin","github.com/pmezard/go-difflib@v1.0.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/pmezard/go-difflib@v1.0.0":"7"}},{"e":["github.com/gin-gonic/gin","github.com/stretchr/testify@v1.8.3"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.8.3":"1"}},{"e":["github.com/gin-gonic/gin","github.com/twitchyliquid64/golang-asm@v0.15.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/twitchyliquid64/golang-asm@v0.15.1":"2"}},{"e":["github.com/gin-gonic/gin","github.com/ugorji/go/codec@v1.2.11"],"state":"removed"},{"panel":"indegree","set":{"github.com/ugorji/go/codec@v1.2.11":"0"}},{"e":["github.com/gin-gonic/gin","golang.org/x/arch@v0.3.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/arch@v0.3.0":"0"}},{"e":["github.com/gin-gonic/gin","golang.org/x/crypto@v0.9.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/crypto@v0.9.0":"0"}},{"e":["github.com/gin-gonic/gin","golang.org/x/net@v0.10.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/net@v0.10.0":"1"}},{"e":["github.com/gin-gonic/gin","golang.org/x/sys@v0.8.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/sys@v0.8.0":"2"}},{"e":["github.com/gin-gonic/gin","golang.org/x/text@v0.9.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/text@v0.9.0":"2"}},{"e":["github.com/gin-gonic/gin","google.golang.org/protobuf@v1.30.0"],"state":"removed"},{"panel":"indegree","set":{"google.golang.org/protobuf@v1.30.0":"0"}},{"e":["github.com/gin-gonic/gin","gopkg.in/yaml.v3@v3.0.1"],"state":"removed"},{"panel":"indegree","set":{"gopkg.in/yaml.v3@v3.0.1":"4"}},{"v":"github.com/bytedance/sonic@v1.9.1","state":"waiting"},{"v":"github.com/gin-contrib/sse@v0.1.0","state":"waiting"},{"v":"github.com/go-playground/validator/v10@v10.14.0","state":"waiting"},{"v":"github.com/goccy/go-json@v0.10.2","state":"waiting"},{"v":"github.com/json-iterator/go@v1.1.12","state":"waiting"},{"v":"github.com/klauspost/cpuid/v2@v2.2.4","state":"waiting"},{"v":"github.com/mattn/go-isatty@v0.0.19","state":"waiting"},{"v":"github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","state":"waiting"},{"v":"github.com/pelletier/go-toml/v2@v2.0.8","state":"waiting"},{"v":"github.com/ugorji/go/codec@v1.2.11","state":"waiting"},{"v":"golang.org/x/arch@v0.3.0","state":"waiting"},{"v":"golang.org/x/crypto@v0.9.0","state":"waiting"},{"v":"google.golang.org/protobuf@v1.30.0","state":"waiting"}]},{"say":"Level 2: github.com/bytedance/sonic@v1.9.1, github.com/gin-contrib/sse@v0.1.0, github.com/go-playground/validator/v10@v10.14.0, github.com/goccy/go-json@v0.10.2, github.com/json-iterator/go@v1.1.12, github.com/klauspost/cpuid/v2@v2.2.4 and 7 more have no incoming edges left, so they can run at the same time.","ops":[{"v":"github.com/bytedance/sonic@v1.9.1","state":"component-2"},{"v":"github.com/gin-contrib/sse@v0.1.0","state":"component-2"},{"v":"github.com/go-playground/validator/v10@v10.14.0","state":"component-2"},{"v":"github.com/goccy/go-json@v0.10.2","state":"component-2"},{"v":"github.com/json-iterator/go@v1.1.12","state":"component-2"},{"v":"github.com/klauspost/cpuid/v2@v2.2.4","state":"component-2"},{"v":"github.com/mattn/go-isatty@v0.0.19","state":"component-2"},{"v":"github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","state":"component-2"},{"v":"github.com/pelletier/go-toml/v2@v2.0.8","state":"component-2"},{"v":"github.com/ugorji/go/codec@v1.2.11","state":"component-2"},{"v":"golang.org/x/arch@v0.3.0","state":"component-2"},{"v":"golang.org/x/crypto@v0.9.0","state":"component-2"},{"v":"google.golang.org/protobuf@v1.30.0","state":"component-2"},{"panel":"levels","groups":[["github.com/gin-gonic/gin"],["github.com/bytedance/sonic@v1.9.1","github.com/gin-contrib/sse@v0.1.0","github.com/go-playground/validator/v10@v10.14.0","github.com/goccy/go-json@v0.10.2","github.com/json-iterator/go@v1.1.12","github.com/klauspost/cpuid/v2@v2.2.4","github.com/mattn/go-isatty@v0.0.19","github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","github.com/pelletier/go-toml/v2@v2.0.8","github.com/ugorji/go/codec@v1.2.11","golang.org/x/arch@v0.3.0","golang.org/x/crypto@v0.9.0","google.golang.org/protobuf@v1.30.0"]]}]},{"say":"Remove the 31 edges out of level 2. That leaves github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311, github.com/gabriel-vasile/mimetype@v1.4.2, github.com/go-playground/assert/v2@v2.2.0, github.com/go-playground/universal-translator@v0.18.1 and 12 more with no incoming edges, so they go in level 3.","ops":[{"e":["github.com/bytedance/sonic@v1.9.1","github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311"],"state":"removed"},{"panel":"indegree","set":{"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311":"0"}},{"e":["github.com/bytedance/sonic@v1.9.1","github.com/davecgh/go-spew@v1.1.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.1":"7"}},{"e":["github.com/bytedance/sonic@v1.9.1","github.com/klauspost/cpuid/v2@v2.0.9"],"state":"removed"},{"panel":"indegree","set":{"github.com/klauspost/cpuid/v2@v2.0.9":"3"}},{"e":["github.com/bytedance/sonic@v1.9.1","github.com/stretchr/testify@v1.8.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.8.1":"1"}},{"e":["github.com/bytedance/sonic@v1.9.1","github.com/twitchyliquid64/golang-asm@v0.15.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/twitchyliquid64/golang-asm@v0.15.1":"1"}},{"e":["github.com/bytedance/sonic@v1.9.1","golang.org/x/arch@v0.0.0-20210923205945-b76863e36670"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/arch@v0.0.0-20210923205945-b76863e36670":"1"}},{"e":["github.com/gin-contrib/sse@v0.1.0","github.com/stretchr/testify@v1.3.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.3.0":"0"}},{"e":["github.com/go-playground/validator/v10@v10.14.0","github.com/gabriel-vasile/mimetype@v1.4.2"],"state":"removed"},{"panel":"indegree","set":{"github.com/gabriel-vasile/mimetype@v1.4.2":"0"}},{"e":["github.com/go-playground/validator/v10@v10.14.0","github.com/go-playground/assert/v2@v2.2.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/go-playground/assert/v2@v2.2.0":"0"}},{"e":["github.com/go-playground/validator/v10@v10.14.0","github.com/go-playground/locales@v0.14.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/go-playground/locales@v0.14.1":"1"}},{"e":["github.com/go-playground/validator/v10@v10.14.0","github.com/go-playground/universal-translator@v0.18.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/go-playground/universal-translator@v0.18.1":"0"}},{"e":["github.com/go-playground/validator/v10@v10.14.0","github.com/leodido/go-urn@v1.2.4"],"state":"removed"},{"panel":"indegree","set":{"github.com/leodido/go-urn@v1.2.4":"0"}},{"e":["github.com/go-playground/validator/v10@v10.14.0","golang.org/x/crypto@v0.7.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/crypto@v0.7.0":"0"}},{"e":["github.com/go-playground/validator/v10@v10.14.0","golang.org/x/text@v0.8.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/text@v0.8.0":"0"}},{"e":["github.com/go-playground/validator/v10@v10.14.0","golang.org/x/net@v0.8.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/net@v0.8.0":"1"}},{"e":["github.com/go-playground/validator/v10@v10.14.0","golang.org/x/sys@v0.6.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/sys@v0.6.0":"0"}},{"e":["github.com/json-iterator/go@v1.1.12","github.com/davecgh/go-spew@v1.1.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.1":"7"}},{"e":["github.com/json-iterator/go@v1.1.12","github.com/google/gofuzz@v1.0.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/google/gofuzz@v1.0.0":"0"}},{"e":["github.com/json-iterator/go@v1.1.12","github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421"],"state":"removed"},{"panel":"indegree","set":{"github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421":"0"}},{"e":["github.com/json-iterator/go@v1.1.12","github.com/modern-go/reflect2@v1.0.2"],"state":"removed"},{"panel":"indegree","set":{"github.com/modern-go/reflect2@v1.0.2":"0"}},{"e":["github.com/json-iterator/go@v1.1.12","github.com/stretchr/testify@v1.3.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.3.0":"0"}},{"e":["github.com/klauspost/cpuid/v2@v2.2.4","golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e":"0"}},{"e":["github.com/mattn/go-isatty@v0.0.19","golang.org/x/sys@v0.6.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/sys@v0.6.0":"0"}},{"e":["github.com/pelletier/go-toml/v2@v2.0.8","github.com/stretchr/testify@v1.8.3"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.8.3":"0"}},{"e":["golang.org/x/arch@v0.3.0","rsc.io/pdf@v0.1.1"],"state":"removed"},{"panel":"indegree","set":{"rsc.io/pdf@v0.1.1":"1"}},{"e":["golang.org/x/crypto@v0.9.0","golang.org/x/net@v0.10.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/net@v0.10.0":"0"}},{"e":["golang.org/x/crypto@v0.9.0","golang.org/x/sys@v0.8.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/sys@v0.8.0":"1"}},{"e":["golang.org/x/crypto@v0.9.0","golang.org/x/term@v0.8.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/term@v0.8.0":"1"}},{"e":["golang.org/x/crypto@v0.9.0","golang.org/x/text@v0.9.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/text@v0.9.0":"1"}},{"e":["google.golang.org/protobuf@v1.30.0","github.com/golang/protobuf@v1.5.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/golang/protobuf@v1.5.0":"0"}},{"e":["google.golang.org/protobuf@v1.30.0","github.com/google/go-cmp@v0.5.5"],"state":"removed"},{"panel":"indegree","set":{"github.com/google/go-cmp@v0.5.5":"2"}},{"v":"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","state":"waiting"},{"v":"github.com/gabriel-vasile/mimetype@v1.4.2","state":"waiting"},{"v":"github.com/go-playground/assert/v2@v2.2.0","state":"waiting"},{"v":"github.com/go-playground/universal-translator@v0.18.1","state":"waiting"},{"v":"github.com/leodido/go-urn@v1.2.4","state":"waiting"},{"v":"golang.org/x/crypto@v0.7.0","state":"waiting"},{"v":"golang.org/x/text@v0.8.0","state":"waiting"},{"v":"github.com/google/gofuzz@v1.0.0","state":"waiting"},{"v":"github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","state":"waiting"},{"v":"github.com/modern-go/reflect2@v1.0.2","state":"waiting"},{"v":"github.com/stretchr/testify@v1.3.0","state":"waiting"},{"v":"golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","state":"waiting"},{"v":"golang.org/x/sys@v0.6.0","state":"waiting"},{"v":"github.com/stretchr/testify@v1.8.3","state":"waiting"},{"v":"golang.org/x/net@v0.10.0","state":"waiting"},{"v":"github.com/golang/protobuf@v1.5.0","state":"waiting"}]},{"say":"Level 3: github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311, github.com/gabriel-vasile/mimetype@v1.4.2, github.com/go-playground/universal-translator@v0.18.1, github.com/leodido/go-urn@v1.2.4, github.com/modern-go/reflect2@v1.0.2 and 11 more have no incoming edges left, so they can run at the same time.","ops":[{"v":"github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","state":"component-3"},{"v":"github.com/gabriel-vasile/mimetype@v1.4.2","state":"component-3"},{"v":"github.com/go-playground/universal-translator@v0.18.1","state":"component-3"},{"v":"github.com/leodido/go-urn@v1.2.4","state":"component-3"},{"v":"github.com/modern-go/reflect2@v1.0.2","state":"component-3"},{"v":"github.com/stretchr/testify@v1.8.3","state":"component-3"},{"v":"golang.org/x/net@v0.10.0","state":"component-3"},{"v":"github.com/stretchr/testify@v1.3.0","state":"component-3"},{"v":"github.com/go-playground/assert/v2@v2.2.0","state":"component-3"},{"v":"golang.org/x/crypto@v0.7.0","state":"component-3"},{"v":"golang.org/x/text@v0.8.0","state":"component-3"},{"v":"golang.org/x/sys@v0.6.0","state":"component-3"},{"v":"github.com/google/gofuzz@v1.0.0","state":"component-3"},{"v":"github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","state":"component-3"},{"v":"golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","state":"component-3"},{"v":"github.com/golang/protobuf@v1.5.0","state":"component-3"},{"panel":"levels","groups":[["github.com/gin-gonic/gin"],["github.com/bytedance/sonic@v1.9.1","github.com/gin-contrib/sse@v0.1.0","github.com/go-playground/validator/v10@v10.14.0","github.com/goccy/go-json@v0.10.2","github.com/json-iterator/go@v1.1.12","github.com/klauspost/cpuid/v2@v2.2.4","github.com/mattn/go-isatty@v0.0.19","github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","github.com/pelletier/go-toml/v2@v2.0.8","github.com/ugorji/go/codec@v1.2.11","golang.org/x/arch@v0.3.0","golang.org/x/crypto@v0.9.0","google.golang.org/protobuf@v1.30.0"],["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/gabriel-vasile/mimetype@v1.4.2","github.com/go-playground/universal-translator@v0.18.1","github.com/leodido/go-urn@v1.2.4","github.com/modern-go/reflect2@v1.0.2","github.com/stretchr/testify@v1.8.3","golang.org/x/net@v0.10.0","github.com/stretchr/testify@v1.3.0","github.com/go-playground/assert/v2@v2.2.0","golang.org/x/crypto@v0.7.0","golang.org/x/text@v0.8.0","golang.org/x/sys@v0.6.0","github.com/google/gofuzz@v1.0.0","github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","github.com/golang/protobuf@v1.5.0"]]}]},{"say":"Remove the 19 edges out of level 3. That leaves github.com/bytedance/sonic@v1.5.0, github.com/stretchr/testify@v1.8.1, golang.org/x/net@v0.8.0, github.com/go-playground/locales@v0.14.1, github.com/stretchr/testify@v1.8.2, golang.org/x/sys@v0.8.0, golang.org/x/term@v0.8.0 and 2 more with no incoming edges, so they go in level 4.","ops":[{"e":["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/bytedance/sonic@v1.5.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/bytedance/sonic@v1.5.0":"0"}},{"e":["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/davecgh/go-spew@v1.1.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.1":"5"}},{"e":["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/klauspost/cpuid/v2@v2.0.9"],"state":"removed"},{"panel":"indegree","set":{"github.com/klauspost/cpuid/v2@v2.0.9":"2"}},{"e":["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/stretchr/testify@v1.8.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.8.1":"0"}},{"e":["github.com/gabriel-vasile/mimetype@v1.4.2","golang.org/x/net@v0.8.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/net@v0.8.0":"0"}},{"e":["github.com/go-playground/universal-translator@v0.18.1","github.com/go-playground/locales@v0.14.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/go-playground/locales@v0.14.1":"0"}},{"e":["github.com/leodido/go-urn@v1.2.4","github.com/stretchr/testify@v1.8.2"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.8.2":"0"}},{"e":["github.com/stretchr/testify@v1.8.3","github.com/davecgh/go-spew@v1.1.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.1":"5"}},{"e":["github.com/stretchr/testify@v1.8.3","github.com/pmezard/go-difflib@v1.0.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/pmezard/go-difflib@v1.0.0":"5"}},{"e":["github.com/stretchr/testify@v1.8.3","github.com/stretchr/objx@v0.5.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/objx@v0.5.0":"2"}},{"e":["github.com/stretchr/testify@v1.8.3","gopkg.in/yaml.v3@v3.0.1"],"state":"removed"},{"panel":"indegree","set":{"gopkg.in/yaml.v3@v3.0.1":"3"}},{"e":["golang.org/x/net@v0.10.0","golang.org/x/sys@v0.8.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/sys@v0.8.0":"0"}},{"e":["golang.org/x/net@v0.10.0","golang.org/x/term@v0.8.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/term@v0.8.0":"0"}},{"e":["golang.org/x/net@v0.10.0","golang.org/x/text@v0.9.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/text@v0.9.0":"0"}},{"e":["github.com/stretchr/testify@v1.3.0","github.com/davecgh/go-spew@v1.1.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.0":"2"}},{"e":["github.com/stretchr/testify@v1.3.0","github.com/pmezard/go-difflib@v1.0.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/pmezard/go-difflib@v1.0.0":"5"}},{"e":["github.com/stretchr/testify@v1.3.0","github.com/stretchr/objx@v0.1.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/objx@v0.1.0":"2"}},{"e":["github.com/golang/protobuf@v1.5.0","github.com/google/go-cmp@v0.5.5"],"state":"removed"},{"panel":"indegree","set":{"github.com/google/go-cmp@v0.5.5":"1"}},{"e":["github.com/golang/protobuf@v1.5.0","google.golang.org/protobuf@v1.26.0-rc.1"],"state":"removed"},{"panel":"indegree","set":{"google.golang.org/protobuf@v1.26.0-rc.1":"0"}},{"v":"github.com/bytedance/sonic@v1.5.0","state":"waiting"},{"v":"github.com/stretchr/testify@v1.8.1","state":"waiting"},{"v":"golang.org/x/net@v0.8.0","state":"waiting"},{"v":"github.com/go-playground/locales@v0.14.1","state":"waiting"},{"v":"github.com/stretchr/testify@v1.8.2","state":"waiting"},{"v":"golang.org/x/sys@v0.8.0","state":"waiting"},{"v":"golang.org/x/term@v0.8.0","state":"waiting"},{"v":"golang.org/x/text@v0.9.0","state":"waiting"},{"v":"google.golang.org/protobuf@v1.26.0-rc.1","state":"waiting"}]},{"say":"Level 4: github.com/go-playground/locales@v0.14.1, golang.org/x/sys@v0.8.0, golang.org/x/text@v0.9.0, github.com/stretchr/testify@v1.8.1, github.com/bytedance/sonic@v1.5.0, golang.org/x/net@v0.8.0, github.com/stretchr/testify@v1.8.2 and 2 more have no incoming edges left, so they can run at the same time.","ops":[{"v":"github.com/go-playground/locales@v0.14.1","state":"component-4"},{"v":"golang.org/x/sys@v0.8.0","state":"component-4"},{"v":"golang.org/x/text@v0.9.0","state":"component-4"},{"v":"github.com/stretchr/testify@v1.8.1","state":"component-4"},{"v":"github.com/bytedance/sonic@v1.5.0","state":"component-4"},{"v":"golang.org/x/net@v0.8.0","state":"component-4"},{"v":"github.com/stretchr/testify@v1.8.2","state":"component-4"},{"v":"golang.org/x/term@v0.8.0","state":"component-4"},{"v":"google.golang.org/protobuf@v1.26.0-rc.1","state":"component-4"},{"panel":"levels","groups":[["github.com/gin-gonic/gin"],["github.com/bytedance/sonic@v1.9.1","github.com/gin-contrib/sse@v0.1.0","github.com/go-playground/validator/v10@v10.14.0","github.com/goccy/go-json@v0.10.2","github.com/json-iterator/go@v1.1.12","github.com/klauspost/cpuid/v2@v2.2.4","github.com/mattn/go-isatty@v0.0.19","github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","github.com/pelletier/go-toml/v2@v2.0.8","github.com/ugorji/go/codec@v1.2.11","golang.org/x/arch@v0.3.0","golang.org/x/crypto@v0.9.0","google.golang.org/protobuf@v1.30.0"],["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/gabriel-vasile/mimetype@v1.4.2","github.com/go-playground/universal-translator@v0.18.1","github.com/leodido/go-urn@v1.2.4","github.com/modern-go/reflect2@v1.0.2","github.com/stretchr/testify@v1.8.3","golang.org/x/net@v0.10.0","github.com/stretchr/testify@v1.3.0","github.com/go-playground/assert/v2@v2.2.0","golang.org/x/crypto@v0.7.0","golang.org/x/text@v0.8.0","golang.org/x/sys@v0.6.0","github.com/google/gofuzz@v1.0.0","github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","github.com/golang/protobuf@v1.5.0"],["github.com/go-playground/locales@v0.14.1","golang.org/x/sys@v0.8.0","golang.org/x/text@v0.9.0","github.com/stretchr/testify@v1.8.1","github.com/bytedance/sonic@v1.5.0","golang.org/x/net@v0.8.0","github.com/stretchr/testify@v1.8.2","golang.org/x/term@v0.8.0","google.golang.org/protobuf@v1.26.0-rc.1"]]}]},{"say":"Remove the 19 edges out of level 4. That leaves golang.org/x/text@v0.3.8, golang.org/x/tools@v0.6.0, golang.org/x/mod@v0.8.0, golang.org/x/sys@v0.5.0, github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06, github.com/stretchr/testify@v1.7.0 and 4 more with no incoming edges, so they go in level 5.","ops":[{"e":["github.com/go-playground/locales@v0.14.1","golang.org/x/text@v0.3.8"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/text@v0.3.8":"0"}},{"e":["golang.org/x/text@v0.9.0","golang.org/x/tools@v0.6.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/tools@v0.6.0":"0"}},{"e":["golang.org/x/text@v0.9.0","golang.org/x/mod@v0.8.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/mod@v0.8.0":"0"}},{"e":["golang.org/x/text@v0.9.0","golang.org/x/sys@v0.5.0"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/sys@v0.5.0":"0"}},{"e":["github.com/stretchr/testify@v1.8.1","github.com/davecgh/go-spew@v1.1.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.1":"2"}},{"e":["github.com/stretchr/testify@v1.8.1","github.com/pmezard/go-difflib@v1.0.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/pmezard/go-difflib@v1.0.0":"3"}},{"e":["github.com/stretchr/testify@v1.8.1","github.com/stretchr/objx@v0.5.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/objx@v0.5.0":"0"}},{"e":["github.com/stretchr/testify@v1.8.1","gopkg.in/yaml.v3@v3.0.1"],"state":"removed"},{"panel":"indegree","set":{"gopkg.in/yaml.v3@v3.0.1":"1"}},{"e":["github.com/bytedance/sonic@v1.5.0","github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06"],"state":"removed"},{"panel":"indegree","set":{"github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06":"0"}},{"e":["github.com/bytedance/sonic@v1.5.0","github.com/davecgh/go-spew@v1.1.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.1":"2"}},{"e":["github.com/bytedance/sonic@v1.5.0","github.com/klauspost/cpuid/v2@v2.0.9"],"state":"removed"},{"panel":"indegree","set":{"github.com/klauspost/cpuid/v2@v2.0.9":"1"}},{"e":["github.com/bytedance/sonic@v1.5.0","github.com/stretchr/testify@v1.7.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.7.0":"0"}},{"e":["github.com/bytedance/sonic@v1.5.0","github.com/twitchyliquid64/golang-asm@v0.15.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/twitchyliquid64/golang-asm@v0.15.1":"0"}},{"e":["github.com/bytedance/sonic@v1.5.0","golang.org/x/arch@v0.0.0-20210923205945-b76863e36670"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/arch@v0.0.0-20210923205945-b76863e36670":"0"}},{"e":["github.com/stretchr/testify@v1.8.2","github.com/davecgh/go-spew@v1.1.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.1":"2"}},{"e":["github.com/stretchr/testify@v1.8.2","github.com/pmezard/go-difflib@v1.0.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/pmezard/go-difflib@v1.0.0":"3"}},{"e":["github.com/stretchr/testify@v1.8.2","github.com/stretchr/objx@v0.5.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/objx@v0.5.0":"0"}},{"e":["github.com/stretchr/testify@v1.8.2","gopkg.in/yaml.v3@v3.0.1"],"state":"removed"},{"panel":"indegree","set":{"gopkg.in/yaml.v3@v3.0.1":"1"}},{"e":["google.golang.org/protobuf@v1.26.0-rc.1","github.com/google/go-cmp@v0.5.5"],"state":"removed"},{"panel":"indegree","set":{"github.com/google/go-cmp@v0.5.5":"0"}},{"v":"golang.org/x/text@v0.3.8","state":"waiting"},{"v":"golang.org/x/tools@v0.6.0","state":"waiting"},{"v":"golang.org/x/mod@v0.8.0","state":"waiting"},{"v":"golang.org/x/sys@v0.5.0","state":"waiting"},{"v":"github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","state":"waiting"},{"v":"github.com/stretchr/testify@v1.7.0","state":"waiting"},{"v":"github.com/twitchyliquid64/golang-asm@v0.15.1","state":"waiting"},{"v":"golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","state":"waiting"},{"v":"github.com/stretchr/objx@v0.5.0","state":"waiting"},{"v":"github.com/google/go-cmp@v0.5.5","state":"waiting"}]},{"say":"Level 5: github.com/twitchyliquid64/golang-asm@v0.15.1, golang.org/x/arch@v0.0.0-20210923205945-b76863e36670, golang.org/x/text@v0.3.8, github.com/stretchr/objx@v0.5.0, golang.org/x/tools@v0.6.0, golang.org/x/mod@v0.8.0, golang.org/x/sys@v0.5.0 and 3 more have no incoming edges left, so they can run at the same time.","ops":[{"v":"github.com/twitchyliquid64/golang-asm@v0.15.1","state":"component-5"},{"v":"golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","state":"component-5"},{"v":"golang.org/x/text@v0.3.8","state":"component-5"},{"v":"github.com/stretchr/objx@v0.5.0","state":"component-5"},{"v":"golang.org/x/tools@v0.6.0","state":"component-5"},{"v":"golang.org/x/mod@v0.8.0","state":"component-5"},{"v":"golang.org/x/sys@v0.5.0","state":"component-5"},{"v":"github.com/google/go-cmp@v0.5.5","state":"component-5"},{"v":"github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","state":"component-5"},{"v":"github.com/stretchr/testify@v1.7.0","state":"component-5"},{"panel":"levels","groups":[["github.com/gin-gonic/gin"],["github.com/bytedance/sonic@v1.9.1","github.com/gin-contrib/sse@v0.1.0","github.com/go-playground/validator/v10@v10.14.0","github.com/goccy/go-json@v0.10.2","github.com/json-iterator/go@v1.1.12","github.com/klauspost/cpuid/v2@v2.2.4","github.com/mattn/go-isatty@v0.0.19","github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","github.com/pelletier/go-toml/v2@v2.0.8","github.com/ugorji/go/codec@v1.2.11","golang.org/x/arch@v0.3.0","golang.org/x/crypto@v0.9.0","google.golang.org/protobuf@v1.30.0"],["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/gabriel-vasile/mimetype@v1.4.2","github.com/go-playground/universal-translator@v0.18.1","github.com/leodido/go-urn@v1.2.4","github.com/modern-go/reflect2@v1.0.2","github.com/stretchr/testify@v1.8.3","golang.org/x/net@v0.10.0","github.com/stretchr/testify@v1.3.0","github.com/go-playground/assert/v2@v2.2.0","golang.org/x/crypto@v0.7.0","golang.org/x/text@v0.8.0","golang.org/x/sys@v0.6.0","github.com/google/gofuzz@v1.0.0","github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","github.com/golang/protobuf@v1.5.0"],["github.com/go-playground/locales@v0.14.1","golang.org/x/sys@v0.8.0","golang.org/x/text@v0.9.0","github.com/stretchr/testify@v1.8.1","github.com/bytedance/sonic@v1.5.0","golang.org/x/net@v0.8.0","github.com/stretchr/testify@v1.8.2","golang.org/x/term@v0.8.0","google.golang.org/protobuf@v1.26.0-rc.1"],["github.com/twitchyliquid64/golang-asm@v0.15.1","golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","golang.org/x/text@v0.3.8","github.com/stretchr/objx@v0.5.0","golang.org/x/tools@v0.6.0","golang.org/x/mod@v0.8.0","golang.org/x/sys@v0.5.0","github.com/google/go-cmp@v0.5.5","github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","github.com/stretchr/testify@v1.7.0"]]}]},{"say":"Remove the 8 edges out of level 5. That leaves rsc.io/pdf@v0.1.1, github.com/stretchr/testify@v1.8.0, golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543 and github.com/klauspost/cpuid/v2@v2.0.9 with no incoming edges, so they go in level 6.","ops":[{"e":["golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","rsc.io/pdf@v0.1.1"],"state":"removed"},{"panel":"indegree","set":{"rsc.io/pdf@v0.1.1":"0"}},{"e":["github.com/stretchr/objx@v0.5.0","github.com/stretchr/testify@v1.8.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.8.0":"0"}},{"e":["github.com/google/go-cmp@v0.5.5","golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543"],"state":"removed"},{"panel":"indegree","set":{"golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543":"0"}},{"e":["github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","github.com/klauspost/cpuid/v2@v2.0.9"],"state":"removed"},{"panel":"indegree","set":{"github.com/klauspost/cpuid/v2@v2.0.9":"0"}},{"e":["github.com/stretchr/testify@v1.7.0","github.com/davecgh/go-spew@v1.1.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.0":"1"}},{"e":["github.com/stretchr/testify@v1.7.0","github.com/pmezard/go-difflib@v1.0.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/pmezard/go-difflib@v1.0.0":"2"}},{"e":["github.com/stretchr/testify@v1.7.0","github.com/stretchr/objx@v0.1.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/objx@v0.1.0":"1"}},{"e":["github.com/stretchr/testify@v1.7.0","gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c"],"state":"removed"},{"panel":"indegree","set":{"gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c":"1"}},{"v":"rsc.io/pdf@v0.1.1","state":"waiting"},{"v":"github.com/stretchr/testify@v1.8.0","state":"waiting"},{"v":"golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543","state":"waiting"},{"v":"github.com/klauspost/cpuid/v2@v2.0.9","state":"waiting"}]},{"say":"Level 6: github.com/klauspost/cpuid/v2@v2.0.9, rsc.io/pdf@v0.1.1, github.com/stretchr/testify@v1.8.0 and golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543 have no incoming edges left, so they can run at the same time.","ops":[{"v":"github.com/klauspost/cpuid/v2@v2.0.9","state":"component-6"},{"v":"rsc.io/pdf@v0.1.1","state":"component-6"},{"v":"github.com/stretchr/testify@v1.8.0","state":"component-6"},{"v":"golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543","state":"component-6"},{"panel":"levels","groups":[["github.com/gin-gonic/gin"],["github.com/bytedance/sonic@v1.9.1","github.com/gin-contrib/sse@v0.1.0","github.com/go-playground/validator/v10@v10.14.0","github.com/goccy/go-json@v0.10.2","github.com/json-iterator/go@v1.1.12","github.com/klauspost/cpuid/v2@v2.2.4","github.com/mattn/go-isatty@v0.0.19","github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","github.com/pelletier/go-toml/v2@v2.0.8","github.com/ugorji/go/codec@v1.2.11","golang.org/x/arch@v0.3.0","golang.org/x/crypto@v0.9.0","google.golang.org/protobuf@v1.30.0"],["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/gabriel-vasile/mimetype@v1.4.2","github.com/go-playground/universal-translator@v0.18.1","github.com/leodido/go-urn@v1.2.4","github.com/modern-go/reflect2@v1.0.2","github.com/stretchr/testify@v1.8.3","golang.org/x/net@v0.10.0","github.com/stretchr/testify@v1.3.0","github.com/go-playground/assert/v2@v2.2.0","golang.org/x/crypto@v0.7.0","golang.org/x/text@v0.8.0","golang.org/x/sys@v0.6.0","github.com/google/gofuzz@v1.0.0","github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","github.com/golang/protobuf@v1.5.0"],["github.com/go-playground/locales@v0.14.1","golang.org/x/sys@v0.8.0","golang.org/x/text@v0.9.0","github.com/stretchr/testify@v1.8.1","github.com/bytedance/sonic@v1.5.0","golang.org/x/net@v0.8.0","github.com/stretchr/testify@v1.8.2","golang.org/x/term@v0.8.0","google.golang.org/protobuf@v1.26.0-rc.1"],["github.com/twitchyliquid64/golang-asm@v0.15.1","golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","golang.org/x/text@v0.3.8","github.com/stretchr/objx@v0.5.0","golang.org/x/tools@v0.6.0","golang.org/x/mod@v0.8.0","golang.org/x/sys@v0.5.0","github.com/google/go-cmp@v0.5.5","github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","github.com/stretchr/testify@v1.7.0"],["github.com/klauspost/cpuid/v2@v2.0.9","rsc.io/pdf@v0.1.1","github.com/stretchr/testify@v1.8.0","golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543"]]}]},{"say":"Remove the 4 edges out of level 6. That leaves github.com/stretchr/objx@v0.4.0 and gopkg.in/yaml.v3@v3.0.1 with no incoming edges, so they go in level 7.","ops":[{"e":["github.com/stretchr/testify@v1.8.0","github.com/davecgh/go-spew@v1.1.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.1":"1"}},{"e":["github.com/stretchr/testify@v1.8.0","github.com/pmezard/go-difflib@v1.0.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/pmezard/go-difflib@v1.0.0":"1"}},{"e":["github.com/stretchr/testify@v1.8.0","github.com/stretchr/objx@v0.4.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/objx@v0.4.0":"0"}},{"e":["github.com/stretchr/testify@v1.8.0","gopkg.in/yaml.v3@v3.0.1"],"state":"removed"},{"panel":"indegree","set":{"gopkg.in/yaml.v3@v3.0.1":"0"}},{"v":"github.com/stretchr/objx@v0.4.0","state":"waiting"},{"v":"gopkg.in/yaml.v3@v3.0.1","state":"waiting"}]},{"say":"Level 7: gopkg.in/yaml.v3@v3.0.1 and github.com/stretchr/objx@v0.4.0 have no incoming edges left, so they can run at the same time.","ops":[{"v":"gopkg.in/yaml.v3@v3.0.1","state":"component-7"},{"v":"github.com/stretchr/objx@v0.4.0","state":"component-7"},{"panel":"levels","groups":[["github.com/gin-gonic/gin"],["github.com/bytedance/sonic@v1.9.1","github.com/gin-contrib/sse@v0.1.0","github.com/go-playground/validator/v10@v10.14.0","github.com/goccy/go-json@v0.10.2","github.com/json-iterator/go@v1.1.12","github.com/klauspost/cpuid/v2@v2.2.4","github.com/mattn/go-isatty@v0.0.19","github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","github.com/pelletier/go-toml/v2@v2.0.8","github.com/ugorji/go/codec@v1.2.11","golang.org/x/arch@v0.3.0","golang.org/x/crypto@v0.9.0","google.golang.org/protobuf@v1.30.0"],["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/gabriel-vasile/mimetype@v1.4.2","github.com/go-playground/universal-translator@v0.18.1","github.com/leodido/go-urn@v1.2.4","github.com/modern-go/reflect2@v1.0.2","github.com/stretchr/testify@v1.8.3","golang.org/x/net@v0.10.0","github.com/stretchr/testify@v1.3.0","github.com/go-playground/assert/v2@v2.2.0","golang.org/x/crypto@v0.7.0","golang.org/x/text@v0.8.0","golang.org/x/sys@v0.6.0","github.com/google/gofuzz@v1.0.0","github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","github.com/golang/protobuf@v1.5.0"],["github.com/go-playground/locales@v0.14.1","golang.org/x/sys@v0.8.0","golang.org/x/text@v0.9.0","github.com/stretchr/testify@v1.8.1","github.com/bytedance/sonic@v1.5.0","golang.org/x/net@v0.8.0","github.com/stretchr/testify@v1.8.2","golang.org/x/term@v0.8.0","google.golang.org/protobuf@v1.26.0-rc.1"],["github.com/twitchyliquid64/golang-asm@v0.15.1","golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","golang.org/x/text@v0.3.8","github.com/stretchr/objx@v0.5.0","golang.org/x/tools@v0.6.0","golang.org/x/mod@v0.8.0","golang.org/x/sys@v0.5.0","github.com/google/go-cmp@v0.5.5","github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","github.com/stretchr/testify@v1.7.0"],["github.com/klauspost/cpuid/v2@v2.0.9","rsc.io/pdf@v0.1.1","github.com/stretchr/testify@v1.8.0","golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543"],["gopkg.in/yaml.v3@v3.0.1","github.com/stretchr/objx@v0.4.0"]]}]},{"say":"Remove the 3 edges out of level 7. That leaves github.com/davecgh/go-spew@v1.1.1 and github.com/stretchr/testify@v1.7.1 with no incoming edges, so they go in level 8.","ops":[{"e":["gopkg.in/yaml.v3@v3.0.1","gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405"],"state":"removed"},{"panel":"indegree","set":{"gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405":"1"}},{"e":["github.com/stretchr/objx@v0.4.0","github.com/davecgh/go-spew@v1.1.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.1":"0"}},{"e":["github.com/stretchr/objx@v0.4.0","github.com/stretchr/testify@v1.7.1"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/testify@v1.7.1":"0"}},{"v":"github.com/davecgh/go-spew@v1.1.1","state":"waiting"},{"v":"github.com/stretchr/testify@v1.7.1","state":"waiting"}]},{"say":"Level 8: github.com/davecgh/go-spew@v1.1.1 and github.com/stretchr/testify@v1.7.1 have no incoming edges left, so they can run at the same time.","ops":[{"v":"github.com/davecgh/go-spew@v1.1.1","state":"component-8"},{"v":"github.com/stretchr/testify@v1.7.1","state":"component-8"},{"panel":"levels","groups":[["github.com/gin-gonic/gin"],["github.com/bytedance/sonic@v1.9.1","github.com/gin-contrib/sse@v0.1.0","github.com/go-playground/validator/v10@v10.14.0","github.com/goccy/go-json@v0.10.2","github.com/json-iterator/go@v1.1.12","github.com/klauspost/cpuid/v2@v2.2.4","github.com/mattn/go-isatty@v0.0.19","github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","github.com/pelletier/go-toml/v2@v2.0.8","github.com/ugorji/go/codec@v1.2.11","golang.org/x/arch@v0.3.0","golang.org/x/crypto@v0.9.0","google.golang.org/protobuf@v1.30.0"],["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/gabriel-vasile/mimetype@v1.4.2","github.com/go-playground/universal-translator@v0.18.1","github.com/leodido/go-urn@v1.2.4","github.com/modern-go/reflect2@v1.0.2","github.com/stretchr/testify@v1.8.3","golang.org/x/net@v0.10.0","github.com/stretchr/testify@v1.3.0","github.com/go-playground/assert/v2@v2.2.0","golang.org/x/crypto@v0.7.0","golang.org/x/text@v0.8.0","golang.org/x/sys@v0.6.0","github.com/google/gofuzz@v1.0.0","github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","github.com/golang/protobuf@v1.5.0"],["github.com/go-playground/locales@v0.14.1","golang.org/x/sys@v0.8.0","golang.org/x/text@v0.9.0","github.com/stretchr/testify@v1.8.1","github.com/bytedance/sonic@v1.5.0","golang.org/x/net@v0.8.0","github.com/stretchr/testify@v1.8.2","golang.org/x/term@v0.8.0","google.golang.org/protobuf@v1.26.0-rc.1"],["github.com/twitchyliquid64/golang-asm@v0.15.1","golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","golang.org/x/text@v0.3.8","github.com/stretchr/objx@v0.5.0","golang.org/x/tools@v0.6.0","golang.org/x/mod@v0.8.0","golang.org/x/sys@v0.5.0","github.com/google/go-cmp@v0.5.5","github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","github.com/stretchr/testify@v1.7.0"],["github.com/klauspost/cpuid/v2@v2.0.9","rsc.io/pdf@v0.1.1","github.com/stretchr/testify@v1.8.0","golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543"],["gopkg.in/yaml.v3@v3.0.1","github.com/stretchr/objx@v0.4.0"],["github.com/davecgh/go-spew@v1.1.1","github.com/stretchr/testify@v1.7.1"]]}]},{"say":"Remove the 4 edges out of level 8. That leaves github.com/davecgh/go-spew@v1.1.0, github.com/pmezard/go-difflib@v1.0.0, github.com/stretchr/objx@v0.1.0 and gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c with no incoming edges, so they go in level 9.","ops":[{"e":["github.com/stretchr/testify@v1.7.1","github.com/davecgh/go-spew@v1.1.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/davecgh/go-spew@v1.1.0":"0"}},{"e":["github.com/stretchr/testify@v1.7.1","github.com/pmezard/go-difflib@v1.0.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/pmezard/go-difflib@v1.0.0":"0"}},{"e":["github.com/stretchr/testify@v1.7.1","github.com/stretchr/objx@v0.1.0"],"state":"removed"},{"panel":"indegree","set":{"github.com/stretchr/objx@v0.1.0":"0"}},{"e":["github.com/stretchr/testify@v1.7.1","gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c"],"state":"removed"},{"panel":"indegree","set":{"gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c":"0"}},{"v":"github.com/davecgh/go-spew@v1.1.0","state":"waiting"},{"v":"github.com/pmezard/go-difflib@v1.0.0","state":"waiting"},{"v":"github.com/stretchr/objx@v0.1.0","state":"waiting"},{"v":"gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c","state":"waiting"}]},{"say":"Level 9: github.com/pmezard/go-difflib@v1.0.0, github.com/davecgh/go-spew@v1.1.0, github.com/stretchr/objx@v0.1.0 and gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c have no incoming edges left, so they can run at the same time.","ops":[{"v":"github.com/pmezard/go-difflib@v1.0.0","state":"component-9"},{"v":"github.com/davecgh/go-spew@v1.1.0","state":"component-9"},{"v":"github.com/stretchr/objx@v0.1.0","state":"component-9"},{"v":"gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c","state":"component-9"},{"panel":"levels","groups":[["github.com/gin-gonic/gin"],["github.com/bytedance/sonic@v1.9.1","github.com/gin-contrib/sse@v0.1.0","github.com/go-playground/validator/v10@v10.14.0","github.com/goccy/go-json@v0.10.2","github.com/json-iterator/go@v1.1.12","github.com/klauspost/cpuid/v2@v2.2.4","github.com/mattn/go-isatty@v0.0.19","github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","github.com/pelletier/go-toml/v2@v2.0.8","github.com/ugorji/go/codec@v1.2.11","golang.org/x/arch@v0.3.0","golang.org/x/crypto@v0.9.0","google.golang.org/protobuf@v1.30.0"],["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/gabriel-vasile/mimetype@v1.4.2","github.com/go-playground/universal-translator@v0.18.1","github.com/leodido/go-urn@v1.2.4","github.com/modern-go/reflect2@v1.0.2","github.com/stretchr/testify@v1.8.3","golang.org/x/net@v0.10.0","github.com/stretchr/testify@v1.3.0","github.com/go-playground/assert/v2@v2.2.0","golang.org/x/crypto@v0.7.0","golang.org/x/text@v0.8.0","golang.org/x/sys@v0.6.0","github.com/google/gofuzz@v1.0.0","github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","github.com/golang/protobuf@v1.5.0"],["github.com/go-playground/locales@v0.14.1","golang.org/x/sys@v0.8.0","golang.org/x/text@v0.9.0","github.com/stretchr/testify@v1.8.1","github.com/bytedance/sonic@v1.5.0","golang.org/x/net@v0.8.0","github.com/stretchr/testify@v1.8.2","golang.org/x/term@v0.8.0","google.golang.org/protobuf@v1.26.0-rc.1"],["github.com/twitchyliquid64/golang-asm@v0.15.1","golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","golang.org/x/text@v0.3.8","github.com/stretchr/objx@v0.5.0","golang.org/x/tools@v0.6.0","golang.org/x/mod@v0.8.0","golang.org/x/sys@v0.5.0","github.com/google/go-cmp@v0.5.5","github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","github.com/stretchr/testify@v1.7.0"],["github.com/klauspost/cpuid/v2@v2.0.9","rsc.io/pdf@v0.1.1","github.com/stretchr/testify@v1.8.0","golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543"],["gopkg.in/yaml.v3@v3.0.1","github.com/stretchr/objx@v0.4.0"],["github.com/davecgh/go-spew@v1.1.1","github.com/stretchr/testify@v1.7.1"],["github.com/pmezard/go-difflib@v1.0.0","github.com/davecgh/go-spew@v1.1.0","github.com/stretchr/objx@v0.1.0","gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c"]]}]},{"say":"Remove the edge from gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c to gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405. That leaves gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405 with no incoming edges, so it goes in level 10.","ops":[{"e":["gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c","gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405"],"state":"removed"},{"panel":"indegree","set":{"gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405":"0"}},{"v":"gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405","state":"waiting"}]},{"say":"Level 10: gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405 is the only vertex with no incoming edges left. It runs on its own.","ops":[{"v":"gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405","state":"single"},{"panel":"levels","groups":[["github.com/gin-gonic/gin"],["github.com/bytedance/sonic@v1.9.1","github.com/gin-contrib/sse@v0.1.0","github.com/go-playground/validator/v10@v10.14.0","github.com/goccy/go-json@v0.10.2","github.com/json-iterator/go@v1.1.12","github.com/klauspost/cpuid/v2@v2.2.4","github.com/mattn/go-isatty@v0.0.19","github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd","github.com/pelletier/go-toml/v2@v2.0.8","github.com/ugorji/go/codec@v1.2.11","golang.org/x/arch@v0.3.0","golang.org/x/crypto@v0.9.0","google.golang.org/protobuf@v1.30.0"],["github.com/chenzhuoyu/base64x@v0.0.0-20221115062448-fe3a3abad311","github.com/gabriel-vasile/mimetype@v1.4.2","github.com/go-playground/universal-translator@v0.18.1","github.com/leodido/go-urn@v1.2.4","github.com/modern-go/reflect2@v1.0.2","github.com/stretchr/testify@v1.8.3","golang.org/x/net@v0.10.0","github.com/stretchr/testify@v1.3.0","github.com/go-playground/assert/v2@v2.2.0","golang.org/x/crypto@v0.7.0","golang.org/x/text@v0.8.0","golang.org/x/sys@v0.6.0","github.com/google/gofuzz@v1.0.0","github.com/modern-go/concurrent@v0.0.0-20180228061459-e0a39a4cb421","golang.org/x/sys@v0.0.0-20220704084225-05e143d24a9e","github.com/golang/protobuf@v1.5.0"],["github.com/go-playground/locales@v0.14.1","golang.org/x/sys@v0.8.0","golang.org/x/text@v0.9.0","github.com/stretchr/testify@v1.8.1","github.com/bytedance/sonic@v1.5.0","golang.org/x/net@v0.8.0","github.com/stretchr/testify@v1.8.2","golang.org/x/term@v0.8.0","google.golang.org/protobuf@v1.26.0-rc.1"],["github.com/twitchyliquid64/golang-asm@v0.15.1","golang.org/x/arch@v0.0.0-20210923205945-b76863e36670","golang.org/x/text@v0.3.8","github.com/stretchr/objx@v0.5.0","golang.org/x/tools@v0.6.0","golang.org/x/mod@v0.8.0","golang.org/x/sys@v0.5.0","github.com/google/go-cmp@v0.5.5","github.com/chenzhuoyu/base64x@v0.0.0-20211019084208-fb5309c8db06","github.com/stretchr/testify@v1.7.0"],["github.com/klauspost/cpuid/v2@v2.0.9","rsc.io/pdf@v0.1.1","github.com/stretchr/testify@v1.8.0","golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543"],["gopkg.in/yaml.v3@v3.0.1","github.com/stretchr/objx@v0.4.0"],["github.com/davecgh/go-spew@v1.1.1","github.com/stretchr/testify@v1.7.1"],["github.com/pmezard/go-difflib@v1.0.0","github.com/davecgh/go-spew@v1.1.0","github.com/stretchr/objx@v0.1.0","gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c"],["gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405"]]}]},{"say":"Done. All 62 vertices have a level, 10 levels in all, and every edge goes from a level to a later one."}],"traceNote":"","verification":"The steps come from a step-by-step copy of the algorithm. Its result is checked against gograph's on every start.","snippet":"levels, err := dag.Levels(g)\nif err != nil {\n\treturn err\n}\nfor i, level := range levels {\n\tvar names []string\n\tfor _, v := range level {\n\t\tnames = append(names, v.Label())\n\t}\n\tfmt.Println(i, strings.Join(names, \", \"))\n}"}
