// Code generated by protoc-gen-go. DO NOT EDIT.
// source: test/custom_results/graphics/result.proto

package graphics

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Result_ExecutionEnvironment int32

const (
	Result_UNKNOWN  Result_ExecutionEnvironment = 0
	Result_HOST     Result_ExecutionEnvironment = 1
	Result_TERMINA  Result_ExecutionEnvironment = 2
	Result_CROSTINI Result_ExecutionEnvironment = 3
	Result_STEAM    Result_ExecutionEnvironment = 4
	Result_ARC      Result_ExecutionEnvironment = 5
	Result_ARCVM    Result_ExecutionEnvironment = 6
	Result_CROUTON  Result_ExecutionEnvironment = 7
	Result_CROSVM   Result_ExecutionEnvironment = 8
)

var Result_ExecutionEnvironment_name = map[int32]string{
	0: "UNKNOWN",
	1: "HOST",
	2: "TERMINA",
	3: "CROSTINI",
	4: "STEAM",
	5: "ARC",
	6: "ARCVM",
	7: "CROUTON",
	8: "CROSVM",
}

var Result_ExecutionEnvironment_value = map[string]int32{
	"UNKNOWN":  0,
	"HOST":     1,
	"TERMINA":  2,
	"CROSTINI": 3,
	"STEAM":    4,
	"ARC":      5,
	"ARCVM":    6,
	"CROUTON":  7,
	"CROSVM":   8,
}

func (x Result_ExecutionEnvironment) String() string {
	return proto.EnumName(Result_ExecutionEnvironment_name, int32(x))
}

func (Result_ExecutionEnvironment) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c3a06ed77c11a28f, []int{0, 0}
}

// Result of a single test, trace, or benchmark run.
// Next Tag: 19
type Result struct {
	// Global unique result identifier.
	Id *ResultId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// When the result started and finished being collected.
	StartTime *timestamp.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	EndTime   *timestamp.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
	// Machine which generated the result.
	Machine *MachineId `protobuf:"bytes,4,opt,name=machine,proto3" json:"machine,omitempty"`
	// Installed software at the time the result was collected.
	SoftwareConfig       *SoftwareConfigId           `protobuf:"bytes,5,opt,name=software_config,json=softwareConfig,proto3" json:"software_config,omitempty"`
	ExecutionEnvironment Result_ExecutionEnvironment `protobuf:"varint,6,opt,name=execution_environment,json=executionEnvironment,proto3,enum=test.custom_results.graphics.Result_ExecutionEnvironment" json:"execution_environment,omitempty"`
	// Lab or user originating this result.
	// Format:
	// - lab/LABNAME
	// - user/USERNAME
	InvocationSource string `protobuf:"bytes,7,opt,name=invocation_source,json=invocationSource,proto3" json:"invocation_source,omitempty"`
	// Details on the invocation if it was generated as part of a test.
	// TODO(davidriley): Flesh these out better.
	// TODO(davidriley): Record test status and error messages.
	TestId    string `protobuf:"bytes,17,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"`
	TestName  string `protobuf:"bytes,8,opt,name=test_name,json=testName,proto3" json:"test_name,omitempty"`
	TestJobId string `protobuf:"bytes,9,opt,name=test_job_id,json=testJobId,proto3" json:"test_job_id,omitempty"`
	// Command line used invoke the test.
	CommandLine string `protobuf:"bytes,10,opt,name=command_line,json=commandLine,proto3" json:"command_line,omitempty"`
	// Thing being tested.
	Benchmark string   `protobuf:"bytes,11,opt,name=benchmark,proto3" json:"benchmark,omitempty"`
	Trace     *TraceId `protobuf:"bytes,12,opt,name=trace,proto3" json:"trace,omitempty"`
	// fps, frames, time
	// usec for frame N
	// cpu/gpu utilization/frequency
	Metrics []*Result_Metric `protobuf:"bytes,13,rep,name=metrics,proto3" json:"metrics,omitempty"`
	// Identify the most interesting metric to show by default for a given result.
	PrimaryMetricName string          `protobuf:"bytes,14,opt,name=primary_metric_name,json=primaryMetricName,proto3" json:"primary_metric_name,omitempty"`
	Labels            []*Result_Label `protobuf:"bytes,15,rep,name=labels,proto3" json:"labels,omitempty"`
	// Software that was explicitly overriden from the normal system software
	// for a given result.
	Overrides            *SoftwareOverridesConfig `protobuf:"bytes,18,opt,name=overrides,proto3" json:"overrides,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *Result) Reset()         { *m = Result{} }
func (m *Result) String() string { return proto.CompactTextString(m) }
func (*Result) ProtoMessage()    {}
func (*Result) Descriptor() ([]byte, []int) {
	return fileDescriptor_c3a06ed77c11a28f, []int{0}
}

func (m *Result) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Result.Unmarshal(m, b)
}
func (m *Result) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Result.Marshal(b, m, deterministic)
}
func (m *Result) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Result.Merge(m, src)
}
func (m *Result) XXX_Size() int {
	return xxx_messageInfo_Result.Size(m)
}
func (m *Result) XXX_DiscardUnknown() {
	xxx_messageInfo_Result.DiscardUnknown(m)
}

var xxx_messageInfo_Result proto.InternalMessageInfo

func (m *Result) GetId() *ResultId {
	if m != nil {
		return m.Id
	}
	return nil
}

func (m *Result) GetStartTime() *timestamp.Timestamp {
	if m != nil {
		return m.StartTime
	}
	return nil
}

func (m *Result) GetEndTime() *timestamp.Timestamp {
	if m != nil {
		return m.EndTime
	}
	return nil
}

func (m *Result) GetMachine() *MachineId {
	if m != nil {
		return m.Machine
	}
	return nil
}

func (m *Result) GetSoftwareConfig() *SoftwareConfigId {
	if m != nil {
		return m.SoftwareConfig
	}
	return nil
}

func (m *Result) GetExecutionEnvironment() Result_ExecutionEnvironment {
	if m != nil {
		return m.ExecutionEnvironment
	}
	return Result_UNKNOWN
}

func (m *Result) GetInvocationSource() string {
	if m != nil {
		return m.InvocationSource
	}
	return ""
}

func (m *Result) GetTestId() string {
	if m != nil {
		return m.TestId
	}
	return ""
}

func (m *Result) GetTestName() string {
	if m != nil {
		return m.TestName
	}
	return ""
}

func (m *Result) GetTestJobId() string {
	if m != nil {
		return m.TestJobId
	}
	return ""
}

func (m *Result) GetCommandLine() string {
	if m != nil {
		return m.CommandLine
	}
	return ""
}

func (m *Result) GetBenchmark() string {
	if m != nil {
		return m.Benchmark
	}
	return ""
}

func (m *Result) GetTrace() *TraceId {
	if m != nil {
		return m.Trace
	}
	return nil
}

func (m *Result) GetMetrics() []*Result_Metric {
	if m != nil {
		return m.Metrics
	}
	return nil
}

func (m *Result) GetPrimaryMetricName() string {
	if m != nil {
		return m.PrimaryMetricName
	}
	return ""
}

func (m *Result) GetLabels() []*Result_Label {
	if m != nil {
		return m.Labels
	}
	return nil
}

func (m *Result) GetOverrides() *SoftwareOverridesConfig {
	if m != nil {
		return m.Overrides
	}
	return nil
}

// TODO(davidriley): This unit could be made into a separate Message
// a) This stanza is directly part of TraceResult with TraceResult repeated.
// b) This stanze becomes a separate repeated Message within TraceResult.
// c) This stanza becomes a separate Message with TraceResultId link to them.
// Next Tag: 7
type Result_Metric struct {
	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Index                uint64   `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"`
	Value                float64  `protobuf:"fixed64,3,opt,name=value,proto3" json:"value,omitempty"`
	Units                string   `protobuf:"bytes,4,opt,name=units,proto3" json:"units,omitempty"`
	LargerIsBetter       bool     `protobuf:"varint,5,opt,name=larger_is_better,json=largerIsBetter,proto3" json:"larger_is_better,omitempty"`
	ExternallyGathered   bool     `protobuf:"varint,6,opt,name=externally_gathered,json=externallyGathered,proto3" json:"externally_gathered,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Result_Metric) Reset()         { *m = Result_Metric{} }
func (m *Result_Metric) String() string { return proto.CompactTextString(m) }
func (*Result_Metric) ProtoMessage()    {}
func (*Result_Metric) Descriptor() ([]byte, []int) {
	return fileDescriptor_c3a06ed77c11a28f, []int{0, 0}
}

func (m *Result_Metric) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Result_Metric.Unmarshal(m, b)
}
func (m *Result_Metric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Result_Metric.Marshal(b, m, deterministic)
}
func (m *Result_Metric) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Result_Metric.Merge(m, src)
}
func (m *Result_Metric) XXX_Size() int {
	return xxx_messageInfo_Result_Metric.Size(m)
}
func (m *Result_Metric) XXX_DiscardUnknown() {
	xxx_messageInfo_Result_Metric.DiscardUnknown(m)
}

var xxx_messageInfo_Result_Metric proto.InternalMessageInfo

func (m *Result_Metric) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Result_Metric) GetIndex() uint64 {
	if m != nil {
		return m.Index
	}
	return 0
}

func (m *Result_Metric) GetValue() float64 {
	if m != nil {
		return m.Value
	}
	return 0
}

func (m *Result_Metric) GetUnits() string {
	if m != nil {
		return m.Units
	}
	return ""
}

func (m *Result_Metric) GetLargerIsBetter() bool {
	if m != nil {
		return m.LargerIsBetter
	}
	return false
}

func (m *Result_Metric) GetExternallyGathered() bool {
	if m != nil {
		return m.ExternallyGathered
	}
	return false
}

// General non-numeric details collected about the environment or system
// state.  eg Interesting environment variables, glxinfo info.
// Next Tag: 4
type Result_Label struct {
	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Value                string   `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
	Grouping             string   `protobuf:"bytes,3,opt,name=grouping,proto3" json:"grouping,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Result_Label) Reset()         { *m = Result_Label{} }
func (m *Result_Label) String() string { return proto.CompactTextString(m) }
func (*Result_Label) ProtoMessage()    {}
func (*Result_Label) Descriptor() ([]byte, []int) {
	return fileDescriptor_c3a06ed77c11a28f, []int{0, 1}
}

func (m *Result_Label) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Result_Label.Unmarshal(m, b)
}
func (m *Result_Label) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Result_Label.Marshal(b, m, deterministic)
}
func (m *Result_Label) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Result_Label.Merge(m, src)
}
func (m *Result_Label) XXX_Size() int {
	return xxx_messageInfo_Result_Label.Size(m)
}
func (m *Result_Label) XXX_DiscardUnknown() {
	xxx_messageInfo_Result_Label.DiscardUnknown(m)
}

var xxx_messageInfo_Result_Label proto.InternalMessageInfo

func (m *Result_Label) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Result_Label) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

func (m *Result_Label) GetGrouping() string {
	if m != nil {
		return m.Grouping
	}
	return ""
}

type ResultList struct {
	Value                []*Result `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
	XXX_unrecognized     []byte    `json:"-"`
	XXX_sizecache        int32     `json:"-"`
}

func (m *ResultList) Reset()         { *m = ResultList{} }
func (m *ResultList) String() string { return proto.CompactTextString(m) }
func (*ResultList) ProtoMessage()    {}
func (*ResultList) Descriptor() ([]byte, []int) {
	return fileDescriptor_c3a06ed77c11a28f, []int{1}
}

func (m *ResultList) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ResultList.Unmarshal(m, b)
}
func (m *ResultList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ResultList.Marshal(b, m, deterministic)
}
func (m *ResultList) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ResultList.Merge(m, src)
}
func (m *ResultList) XXX_Size() int {
	return xxx_messageInfo_ResultList.Size(m)
}
func (m *ResultList) XXX_DiscardUnknown() {
	xxx_messageInfo_ResultList.DiscardUnknown(m)
}

var xxx_messageInfo_ResultList proto.InternalMessageInfo

func (m *ResultList) GetValue() []*Result {
	if m != nil {
		return m.Value
	}
	return nil
}

func init() {
	proto.RegisterEnum("test.custom_results.graphics.Result_ExecutionEnvironment", Result_ExecutionEnvironment_name, Result_ExecutionEnvironment_value)
	proto.RegisterType((*Result)(nil), "test.custom_results.graphics.Result")
	proto.RegisterType((*Result_Metric)(nil), "test.custom_results.graphics.Result.Metric")
	proto.RegisterType((*Result_Label)(nil), "test.custom_results.graphics.Result.Label")
	proto.RegisterType((*ResultList)(nil), "test.custom_results.graphics.ResultList")
}

func init() {
	proto.RegisterFile("test/custom_results/graphics/result.proto", fileDescriptor_c3a06ed77c11a28f)
}

var fileDescriptor_c3a06ed77c11a28f = []byte{
	// 828 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0x6d, 0x6f, 0xe3, 0x44,
	0x10, 0xc6, 0x6d, 0x5e, 0x27, 0xa5, 0xe7, 0xee, 0x15, 0x61, 0x85, 0x13, 0x94, 0x8a, 0x97, 0x40,
	0xc1, 0x96, 0x8a, 0x8a, 0x74, 0xc0, 0x97, 0x34, 0x0a, 0xd4, 0xd0, 0x24, 0xd2, 0x26, 0x77, 0x27,
	0xf1, 0xc5, 0xda, 0xd8, 0x5b, 0x67, 0x21, 0xde, 0x8d, 0x76, 0x37, 0xa5, 0xf7, 0x8d, 0xbf, 0xc5,
	0x8f, 0xe1, 0xbf, 0x20, 0xcf, 0x3a, 0x8d, 0x0e, 0x1d, 0x21, 0xdf, 0x3c, 0xcf, 0x3c, 0xcf, 0xec,
	0xcc, 0xb3, 0x3b, 0x32, 0x7c, 0x61, 0xb9, 0xb1, 0x51, 0xba, 0x36, 0x56, 0x15, 0x89, 0xe6, 0x66,
	0xbd, 0xb4, 0x26, 0xca, 0x35, 0x5b, 0x2d, 0x44, 0x6a, 0x22, 0x07, 0x84, 0x2b, 0xad, 0xac, 0x22,
	0xcf, 0x4a, 0x6a, 0xf8, 0x26, 0x35, 0xdc, 0x50, 0xbb, 0x1f, 0xe5, 0x4a, 0xe5, 0x4b, 0x1e, 0x21,
	0x77, 0xbe, 0xbe, 0x8b, 0xac, 0x28, 0xb8, 0xb1, 0xac, 0x58, 0x39, 0x79, 0xf7, 0xeb, 0x9d, 0x27,
	0x15, 0x2c, 0x5d, 0x08, 0xc9, 0x13, 0x91, 0x55, 0xf4, 0xaf, 0xf6, 0x68, 0x6c, 0xcb, 0xbe, 0xda,
	0xc9, 0x36, 0xea, 0xce, 0xfe, 0xc1, 0x34, 0x4f, 0x52, 0x25, 0xef, 0x44, 0xbe, 0x95, 0xfd, 0xb0,
	0x9f, 0x4c, 0xdd, 0x73, 0xad, 0x45, 0xc6, 0x4d, 0x55, 0xa0, 0x52, 0x5f, 0xec, 0x54, 0x5b, 0xcd,
	0xd2, 0xed, 0x3c, 0xe7, 0x7f, 0x03, 0x34, 0x28, 0x72, 0xc8, 0xb7, 0x70, 0x20, 0xb2, 0xc0, 0x3b,
	0xf3, 0x7a, 0x9d, 0xcb, 0xcf, 0xc2, 0x5d, 0xae, 0x86, 0x4e, 0x11, 0x67, 0xf4, 0x40, 0x64, 0xe4,
	0x39, 0x80, 0xb1, 0x4c, 0xdb, 0xa4, 0xb4, 0x36, 0x38, 0x40, 0x7d, 0x37, 0x74, 0xbe, 0x87, 0x1b,
	0xdf, 0xc3, 0xd9, 0xc6, 0x77, 0xda, 0x46, 0x76, 0x19, 0x93, 0x2b, 0x68, 0x71, 0x99, 0x39, 0xe1,
	0xe1, 0xff, 0x0a, 0x9b, 0x5c, 0x66, 0x28, 0xeb, 0x43, 0xb3, 0xba, 0x98, 0xa0, 0x86, 0xaa, 0xcf,
	0x77, 0xb7, 0x3b, 0x72, 0xe4, 0x38, 0xa3, 0x1b, 0x1d, 0x79, 0x05, 0x4f, 0xfe, 0x65, 0x7f, 0x50,
	0xc7, 0x52, 0xe1, 0xee, 0x52, 0xd3, 0x4a, 0x34, 0x40, 0x4d, 0x9c, 0xd1, 0x63, 0xf3, 0x06, 0x42,
	0x24, 0xbc, 0xc7, 0x1f, 0x78, 0xba, 0xb6, 0x42, 0xc9, 0x84, 0xcb, 0x7b, 0xa1, 0x95, 0x2c, 0xb8,
	0xb4, 0x41, 0xe3, 0xcc, 0xeb, 0x1d, 0x5f, 0x3e, 0xdf, 0xc7, 0xd8, 0x70, 0xb8, 0xa9, 0x30, 0xdc,
	0x16, 0xa0, 0xa7, 0xfc, 0x2d, 0x28, 0xb9, 0x80, 0x13, 0x21, 0xef, 0x55, 0xca, 0xf0, 0x40, 0xa3,
	0xd6, 0x3a, 0xe5, 0x41, 0xf3, 0xcc, 0xeb, 0xb5, 0xa9, 0xbf, 0x4d, 0x4c, 0x11, 0x27, 0xef, 0x43,
	0xb3, 0x3c, 0x3e, 0x11, 0x59, 0x70, 0x82, 0x94, 0x46, 0x19, 0xc6, 0x19, 0xf9, 0x00, 0xda, 0x98,
	0x90, 0xac, 0xe0, 0x41, 0x0b, 0x53, 0xad, 0x12, 0x18, 0xb3, 0x82, 0x93, 0x0f, 0xa1, 0x83, 0xc9,
	0xdf, 0xd4, 0xbc, 0x54, 0xb6, 0x31, 0x8d, 0xfc, 0x9f, 0xd5, 0x3c, 0xce, 0xc8, 0xc7, 0x70, 0x94,
	0xaa, 0xa2, 0x60, 0x32, 0x4b, 0x96, 0xe5, 0x9d, 0x00, 0x12, 0x3a, 0x15, 0x76, 0x5b, 0xda, 0xfd,
	0x0c, 0xda, 0x73, 0x2e, 0xd3, 0x45, 0xc1, 0xf4, 0xef, 0x41, 0xc7, 0x15, 0x78, 0x04, 0xc8, 0xf7,
	0x50, 0xc7, 0x67, 0x19, 0x1c, 0xe1, 0x15, 0x7c, 0xba, 0xdb, 0xa3, 0x59, 0x49, 0x8d, 0x33, 0xea,
	0x34, 0x64, 0x08, 0xcd, 0x82, 0x5b, 0x2d, 0x52, 0x13, 0xbc, 0x7b, 0x76, 0xd8, 0xeb, 0x5c, 0x5e,
	0xec, 0x65, 0xf1, 0x08, 0x35, 0x74, 0xa3, 0x25, 0x21, 0x3c, 0x5d, 0x69, 0x51, 0x30, 0xfd, 0x3a,
	0x71, 0x90, 0xf3, 0xe2, 0x18, 0x7b, 0x3d, 0xa9, 0x52, 0x4e, 0x84, 0xa6, 0x5c, 0x43, 0x63, 0xc9,
	0xe6, 0x7c, 0x69, 0x82, 0x27, 0x78, 0xea, 0x97, 0x7b, 0x9d, 0x7a, 0x5b, 0x4a, 0x68, 0xa5, 0x24,
	0x53, 0x68, 0x3f, 0xee, 0x70, 0x40, 0x70, 0xf6, 0xab, 0xfd, 0x9e, 0xdf, 0x64, 0x23, 0x73, 0xaf,
	0x8e, 0x6e, 0xeb, 0x74, 0xff, 0xf2, 0xa0, 0xe1, 0xfa, 0x24, 0x04, 0x6a, 0x38, 0x84, 0x87, 0x43,
	0xe0, 0x37, 0x39, 0x85, 0xba, 0x90, 0x19, 0x7f, 0xc0, 0x45, 0xad, 0x51, 0x17, 0x94, 0xe8, 0x3d,
	0x5b, 0xae, 0xdd, 0x16, 0x7a, 0xd4, 0x05, 0x25, 0xba, 0x96, 0xc2, 0x1a, 0xdc, 0xb2, 0x36, 0x75,
	0x01, 0xe9, 0x81, 0xbf, 0x64, 0x3a, 0xe7, 0x3a, 0x11, 0x26, 0x99, 0x73, 0x6b, 0xb9, 0xc6, 0xdd,
	0x69, 0xd1, 0x63, 0x87, 0xc7, 0xe6, 0x1a, 0x51, 0x12, 0xc1, 0x53, 0xfe, 0x60, 0xb9, 0x96, 0x6c,
	0xb9, 0x7c, 0x9d, 0xe4, 0xcc, 0x2e, 0xb8, 0xe6, 0x19, 0x6e, 0x42, 0x8b, 0x92, 0x6d, 0xea, 0xa7,
	0x2a, 0xd3, 0x1d, 0x41, 0x1d, 0x1d, 0xfa, 0xaf, 0xce, 0x5d, 0x8f, 0x07, 0xae, 0x1b, 0xd7, 0x63,
	0x17, 0x5a, 0xb9, 0x56, 0xeb, 0x95, 0x90, 0x39, 0x36, 0xdf, 0xa6, 0x8f, 0xf1, 0xf9, 0x9f, 0x1e,
	0x9c, 0xbe, 0x6d, 0x95, 0x48, 0x07, 0x9a, 0x2f, 0xc6, 0xbf, 0x8c, 0x27, 0xaf, 0xc6, 0xfe, 0x3b,
	0xa4, 0x05, 0xb5, 0x9b, 0xc9, 0x74, 0xe6, 0x7b, 0x25, 0x3c, 0x1b, 0xd2, 0x51, 0x3c, 0xee, 0xfb,
	0x07, 0xe4, 0x08, 0x5a, 0x03, 0x3a, 0x99, 0xce, 0xe2, 0x71, 0xec, 0x1f, 0x92, 0x36, 0xd4, 0xa7,
	0xb3, 0x61, 0x7f, 0xe4, 0xd7, 0x48, 0x13, 0x0e, 0xfb, 0x74, 0xe0, 0xd7, 0x4b, 0xac, 0x4f, 0x07,
	0x2f, 0x47, 0x7e, 0xa3, 0x54, 0x0e, 0xe8, 0xe4, 0xc5, 0x6c, 0x32, 0xf6, 0x9b, 0x04, 0xa0, 0x51,
	0x2a, 0x5f, 0x8e, 0xfc, 0xd6, 0xf9, 0x0d, 0x80, 0xbb, 0xfa, 0x5b, 0x61, 0x2c, 0xf9, 0x6e, 0x33,
	0x82, 0x87, 0x6f, 0xe6, 0x93, 0x7d, 0xde, 0x4c, 0x35, 0xe8, 0xf5, 0xcd, 0xaf, 0x3f, 0xe6, 0x2a,
	0x4c, 0x17, 0x5a, 0x15, 0x62, 0x5d, 0x84, 0x4a, 0xe7, 0xd1, 0x26, 0x50, 0x26, 0x12, 0xf2, 0x4e,
	0x33, 0xf7, 0x97, 0x8b, 0x72, 0x15, 0xed, 0xfa, 0x05, 0xcc, 0x1b, 0x48, 0xfb, 0xe6, 0x9f, 0x00,
	0x00, 0x00, 0xff, 0xff, 0xc7, 0xa4, 0x10, 0xf9, 0x65, 0x07, 0x00, 0x00,
}
