-------- @describe ref-pkg-import2 --------
import of package "hash/fnv"
	func  New32  func() hash.Hash32
	func  New32a func() hash.Hash32
	func  New64  func() hash.Hash64
	func  New64a func() hash.Hash64

-------- @describe ref-pkg-import --------
import of package "lib"
	const Const  untyped int = 3
	func  Func   func()
	type  Outer  struct{...}
	type  Sorter interface{...}
		method (Sorter) Len() int
		method (Sorter) Less(i int, j int) bool
		method (Sorter) Swap(i int, j int)
	type  Type   int
		method (Type) Method(x *int) *int
	var   Var    int

-------- @describe ref-const --------
reference to const lib.Const untyped int
defined here

-------- @describe ref-func --------
reference to func lib.Func()
defined here

-------- @describe ref-var --------
reference to var lib.Var int
defined here

-------- @describe ref-type --------
reference to type lib.Type (size 8, align 8)
defined as int
Methods:
	method (Type) Method(x *int) *int

-------- @describe ref-method --------
reference to method func (lib.Type).Method(x *int) *int
defined here

-------- @pointsto p --------
this *int may point to these objects:
	imports.a

-------- @describe ref-pkg --------
reference to package "lib"
	const Const  untyped int = 3
	func  Func   func()
	type  Outer  struct{...}
	type  Sorter interface{...}
		method (Sorter) Len() int
		method (Sorter) Less(i int, j int) bool
		method (Sorter) Swap(i int, j int)
	type  Type   int
		method (Type) Method(x *int) *int
	var   Var    int

