// 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 overridden 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,
}
