// Code generated by gocode.Generate; DO NOT EDIT.

package filetypes

import (
	"fmt"

	"cuelang.org/go/cue"
	"cuelang.org/go/encoding/gocode/gocodec"
	_ "cuelang.org/go/pkg"
)

var cuegenCodec, cuegenInstance = func() (*gocodec.Codec, *cue.Instance) {
	var r *cue.Runtime
	r = &cue.Runtime{}
	instances, err := r.Unmarshal(cuegenInstanceData)
	if err != nil {
		panic(err)
	}
	if len(instances) != 1 {
		panic("expected encoding of exactly one instance")
	}
	return gocodec.New(r, nil), instances[0]
}()

// cuegenMake is called in the init phase to initialize CUE values for
// validation functions.
func cuegenMake(name string, x interface{}) cue.Value {
	f, err := cuegenInstance.LookupField(name)
	if err != nil {
		panic(fmt.Errorf("could not find type %q in instance", name))
	}
	v := f.Value
	if x != nil {
		w, err := cuegenCodec.ExtractType(x)
		if err != nil {
			panic(err)
		}
		v = v.Unify(w)
	}
	return v
}

// Data size: 1614 bytes.
var cuegenInstanceData = []byte("\x01\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xacW\xcdo\xd4H\x16\xb7CVZ[\uc7b8\"=\x8c\xb4b#\xd6\x11\a\x04j)B@`\x95\u02f2\x1a1'\x84\xa2j\xfb\xb9\xbb\x06\xbb\xcaSU\x86D\xa4\x0f3\xc30\xf3W\u04e3WU\xfel\xf3\x91\x99\xe4\x92\xf6\xfb\xaa\xf7~\xf5\xbe\xea\x1f\xdb\xdf\xf6\u00bd\xed\xefA\xb8\xfd9\b\x1el\u007f\xba\x16\x86\u05f9\u0406\x89\f\x8f\x99aD\x0f\xaf\x85\xfb\xdfIi\u00bd \xdc\xff?3\xeb\xf0z\x10\xfe\xed9/Q\x87\u06cfA\x10\xdc\xdc\xfe\xba\x17\x86\xff|\xf5:k0-x\xe95?\x06\xe1\xf6C\x10\xdc\xd9\xfer-\f\xff\xde\xd3?\x04\xe1^\xb8\xff?V!\x19\u06b7\xc48\b\x82O7n\x92'a\xb8\x17\x86\x919\xafQ\xa7Y\x83\xe1\xa7\x1b\xfb5\xcb\u07b0\x15\u00b2\xe1e\x1e\u01c7\x87\xf0\x18\xe8|\u0224R\xa8k)r\rF\x02\x83\xffJ'\x94\x12;\x8do\u04ff\x05\xbc\x8f#:^\xb0\n\x17\xe0\xff\xb4Q\\\xac\xe2\bE&s.V\x1d\xe3\xf63O\x89#.\f\xaaZ\xa1a\x86K\xf1h\x01\xb7OF\x948*\xa4\xaa\x1eu\xaa\xa4\xfd\\\xaa*\x8e\f[\xe9G\xf6\xe0\xe8\x95;\xe9\xf5\xa2;r\x13ol\x10\xc7X\xb0\xa64\xc05\x985\x02\xb9\b\x8d\xc6\x1c\n\xa9@\x9b\x9c\v`\"\xa7_\xb21)\xbc\\#h4\x86\x8b\x95\x86\x1ck\x149Y\x91\xa2\u05eedNQ{\xc3\xf6|\v\xc10\xfe\x83\xe4?\t\\\xb4\xcel\x06p\x9e\x88BB\x8e\x05\x17\xa8a-\xdf\x01sV\xb9\x06\x8b\x12\xe6\u059f\x0e\x15\xcc=\u00a48<,g\x86\xf5\xa0\x1c\x18\xd5 \\@\xc1J\x8dq\xa4\xb0@\x85\"C\xbd\xd8ef\xe7Y\xe9\x183\x9a\xd65N\xc0\x93\xc4R\xca2\x8edM\u07ect*\x8e\x96I\xa1\x8db\\\x98^\xee\rb\xeda\xd1\vO\xe3\"\x93U]\xa2\xb1Y\xe1iU-\x95i=p4m\x14\xb2\xaau\xca\xd1r\x99\xe9>DGc\xc6(\xbel\x8c\v\xc0\xd2\x1c\xbct-\x9a\xee\x8e\xee\xcd\xf9`\xef8\xe7\x85\xc5\u0080\xacQ1\x17\x89\x93N\xe3\xc3CR}\xb9F\x8d`\xb0\xaaKfP\x03Sh/@\xd0m\x18\tK\x84F\xf0\x82#\xdd\v0csAIi@\x16`\xd6\\\x93\x91L\x8a\x82\xaf\x1awB\x1a\xdb\x03\xec}qQ7.M\xa2Q\xd2D\x83\xb28H\xb2\x06)cN\x89\x9e\xa6i\x1cE\x9b8\x8aJ4p\x06GN|\b\xc7\xe4\u05a2\x11.S&Y\x1a\xe4\xd0Y\xdc\x1f\xad\xbd+YCYK\x95\xa6S\x9d\xad\xb1b\xde\x19\xd2\xc53\x83B\xbb\x94\xb0\xd2I\xfa\x83\x96\"\xf1_\x93\x12\xa6hXcd\x17\xce\u01a9\x9c\xb3\xaa\xbc\xac\xca\xe546T\xf6\x11\x9eQv}\x15p\x1b\xc1g\x10?\xbd7\x87\xb9G\xf5`\x16\xf3)s\x8a\xf9\u9f6f\xa0N\xf5\xdcc\xbe\x89#\xd9\u0526M\x1c\xe7\xd5\xc3\xfbW\xef\xd6\xc3\xfb\x97\xf5\v\xdfR'\xf8\xf3\xe9|\xfa\xe4\xf1\u0547\xf1\xe4\xf1W\xc2(8\x95\xfd0\x8e\x1c\x8b\xbf\x14\xc6\xfd\aO\x1f^yiZ\xab\x97\xac\xcfv\xd4=k\xcb\x14*Vk7V\xfa\u04a5F\xe6\x1b\xa3c\u054a\x1a\xa2\xe1\xd4\a'\x15\x9e$]\xdb=\x8d\xa3\x84V\x04G\xa1\x91K_q\xdf\x02<\x91\xbeZ*\x15mO-\x89\\\xe6^|L\x16\xf3d\xdf*\xbc\x11\xfa\x8a\xbbn0\xa5\x9a33\xa0\x1a<3D]I\x1f\x82\xa5\xae$\xd1j%\x8d\xec\\\xb3_qD\xed\xff\xc5\xf1\x8b\x05\xd0\xe1\x1a\u007f\xbckI\x895\xd4*t\x96\xeb\xa5\xe7\xd6\xcb\x1e!\xcb]rQ/\xbbA\xdfn7\xc0E\xce37S\x1c\xe8t\x83\xcc\xd8\xc1\xa4\xb0V\xa8Q\u042e\x01\x8c\xaec\xa5X\x95\xc6\xddn\xb4\x80[GI\xe2L\n\x18oE\x90\xa3AU\r\xb6\x88\f\x95a\\\xb4v@\xafeS\xe64\xbbF\xbb\xc4\xe1!<\x97\n\xda\xfd\xf3.\xd8\xfa\xae\xd8\xf9D\x12\x18\xcdQ\x9d)\xbet\xfe\xb9\xac\xbb\v\xef\xd6<[\x037\x1a\xcb\xc2\xce=&H5\x93\xe2-*\xe3\x06&\x83\xa7\xdf?\xf3\x1ai<Y\xe8\xba\x1d\u036eq\u00fd\xce\u04cbv\x9f\xec\nc\xb8Z%\x85\x94.\xf7\xdcf\xe8\f$\xee\xb0\xc4_\x01\u0749\xab\x82LV\x15-T%\x17\xe8\xc8F\xee\xe6?1\xec\x91\u038c+:g\xbd\xb3L\xa5\xb6R\xac^\x8f\xb8\x96\xe2\x989[\x8dX9[\xb5\f\xc3&\x1c\xe3\r\u06ba~\x1f\x0f\xbb\x8em:\x96IQ\xeep}\xe8\x9e]\xce\xf2K'@%\xb2\u00f7\xb5e\xd96\xbdw\xf8.\xe9\xad\x00\xa5\xbaK\xfbd\x01]G\xeaK\xc3I\xd8\u0527r\xe8%\x88\xe4\x04Hv\xe7\b\"&\x1d\x1a\xf6\xfazDV;.\xb9\xbf\x84\x96c\u049a.\x02\t\x11\xbb\v\x8c\xa2\x92\xd9CV\x14\x84o\xf5\xa4z%V\xdb\u05c5\xb7K\x1b\x88\xe3\xef\xa8\xdb\xe5d\xe6\xc0\xd1\xe2\xe1/q\x98t;\x86z\x81o1'k\x14\xac\u67f1\xe5\xb9\xdf`\u0215\x91\x9d7\xddk\xc5\xcf\x1d\xea]\xac,\x1d3\x85\x13\x03\xb9D\rB\x1a\xe0\"+\x9b\x1c\xdd[I\xaa\nN\x8e\xd3\xd8\xcaY\x87\xecK\x8d\u07a4G\xddsmP\xe2\x1b7wN\u72b0{\xe6\xb4\xd5\b\x17\x90\u0611n\u007f\xb5E8yEL\xb7\x86\xf1[d:\x8a\xc7/\x9f)w\xfc\x06\xba3b\xff\x1b\xfe5\xa5\xc4\xd1\xe4\x854\xb57~+M\xb9\xe3\x17\u0484\xbb\xa1v(\xda%l\xb8\x13\xec\xe0\xe51\xda9o>\xaa\xde\xfeN\x9f\xeb/\xc0aM\xa8S\u007fs\xffm\xedN^\xa4\xe4\xf3\x0e\xe6\xf3X\u007f\u045b\t\x8e\xf3\xf8\xcd\xe3\xd6\xc73j\xcd:\xb51\fb\xbbu\u0527P\xfb:\x1e*\x0f\xdb7m\u012b).\xb7\x8e|\xb7\x1f{\u06fa5z\x8ewq\r\x9f\xe1\xb3\x01\xcc\xe2\xd2\xf9\xb5\x89\xc7Kb7J\xda\"\xe8#\xe8\aI\xbf\xd3O\xaa\xc5\x15\t\\\xb4\xf76\xdch[?\x86\x8blo\xbc\x9f2cpGnP\x19:\xcb\xe3\xc15\xebO'\xd8O\x8fY\xb9\xde\a#\xab/\x19\xec\x05\a3oR8\xf3#\xb0\x9f\x1c\x13\xf1\x1d\u04dbx\xdcn/\xd1\xf2\xec\x96\xedf\xc9\xf8\x94\xe9p\xf8\xac\xcb_\x1c\x03\u07ea\xb5\x89\x83\xe0\x8f\x00\x00\x00\xff\xff\f\x84\x01\v\xad\x14\x00\x00")
