blob: 27271f99943385d5690e13f11a61a0dae58530cb [file] [log] [blame]
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: test/metadata/v1/metadata.proto
// This package contains the definitions for the test metadata generated as
// build artifacts for all supported tests.
//
// This metadata is used for test execution requests, scheduling decisions and
// results analytics in various Test Lab Environments.
//
// Metadata must be generated for all tests in supported Remote Test Drivers and
// must be respected in all Test Lab Environments.
package metadata
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
_struct "github.com/golang/protobuf/ptypes/struct"
lab "go.chromium.org/chromiumos/infra/proto/go/lab"
common "go.chromium.org/chromiumos/infra/proto/go/test/common"
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
// Metadata required for scheduling, invocation and results analysis of tests
// for a Remote Test Driver.
type Metadata struct {
// The Remote Test Driver this test metadata is for.
//
// There may be more than one metadata instance for a Remote Test Driver.
// Common reasons for multiple instances are:
// - The test definitions may be split over multiple source locations. Thus,
// it may be more convenient to generate metadata for the tests spearately.
// - The Remote Test Driver metadata may differ for tests in the same Remote
// Test Driver.
RemoteTestDriver *RemoteTestDriver `protobuf:"bytes,1,opt,name=remote_test_driver,json=remoteTestDriver,proto3" json:"remote_test_driver,omitempty"`
// Metadata for the smallest schedulable test units.
Test []*Test `protobuf:"bytes,2,rep,name=test,proto3" json:"test,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Metadata) Reset() { *m = Metadata{} }
func (m *Metadata) String() string { return proto.CompactTextString(m) }
func (*Metadata) ProtoMessage() {}
func (*Metadata) Descriptor() ([]byte, []int) {
return fileDescriptor_476fe0680946cd89, []int{0}
}
func (m *Metadata) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Metadata.Unmarshal(m, b)
}
func (m *Metadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Metadata.Marshal(b, m, deterministic)
}
func (m *Metadata) XXX_Merge(src proto.Message) {
xxx_messageInfo_Metadata.Merge(m, src)
}
func (m *Metadata) XXX_Size() int {
return xxx_messageInfo_Metadata.Size(m)
}
func (m *Metadata) XXX_DiscardUnknown() {
xxx_messageInfo_Metadata.DiscardUnknown(m)
}
var xxx_messageInfo_Metadata proto.InternalMessageInfo
func (m *Metadata) GetRemoteTestDriver() *RemoteTestDriver {
if m != nil {
return m.RemoteTestDriver
}
return nil
}
func (m *Metadata) GetTest() []*Test {
if m != nil {
return m.Test
}
return nil
}
// The smallest schedulable test unit.
//
// A Test is an atomic schdulable unit. In particular, it is not possible to
// modify the behaviour of a Remote Test Driver execution for a given Test by
// supplying test arguments. See the documentation of
// test.metadata.v1.Informational on how paramaterized tests may be in light of
// this restriction.
//
// A single test platform request or Remote Test Driver invocation may contain
// multiple instances of multiple Tests, but each instance of a Test must
// correspond to exactly one reported result.
//
// See Also:
// Test Platform request: TODO(pprabhu)
// Remote Test Driver invocation request: test/rtd/invocation.proto
// Remote Test Driver progress API: test/rtd/progress.proto
type Test struct {
// Identifying name for this test.
//
// Must be a valid resource per https://aip.dev/122.
//
// Name must be unique across all known tests for the test's Remote Test
// Driver. Thus, the tuple (remote_test_driver.id, name) is globally unique
// across all test metadata.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Attributes are used to include tests in test plans.
//
// See Also:
// Test plans: test/plan/plan.proto
Attributes []*Attribute `protobuf:"bytes,2,rep,name=attributes,proto3" json:"attributes,omitempty"`
// Required condition to be met for each Device Under Test targeted by this
// test.
//
// Condition enforcement is an optional feature for test scheduling, i.e.,
// some Test Lab Environments may ignore conditions entirely.
//
// May be specified multiple times for tests that target more than one Device
// Under Test, once per required device.
Conditions []*DUTCondition `protobuf:"bytes,3,rep,name=conditions,proto3" json:"conditions,omitempty"`
// Metadata about the test that doesn't affect scheduling or execution.
Informational *Informational `protobuf:"bytes,4,opt,name=informational,proto3" json:"informational,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Test) Reset() { *m = Test{} }
func (m *Test) String() string { return proto.CompactTextString(m) }
func (*Test) ProtoMessage() {}
func (*Test) Descriptor() ([]byte, []int) {
return fileDescriptor_476fe0680946cd89, []int{1}
}
func (m *Test) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Test.Unmarshal(m, b)
}
func (m *Test) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Test.Marshal(b, m, deterministic)
}
func (m *Test) XXX_Merge(src proto.Message) {
xxx_messageInfo_Test.Merge(m, src)
}
func (m *Test) XXX_Size() int {
return xxx_messageInfo_Test.Size(m)
}
func (m *Test) XXX_DiscardUnknown() {
xxx_messageInfo_Test.DiscardUnknown(m)
}
var xxx_messageInfo_Test proto.InternalMessageInfo
func (m *Test) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *Test) GetAttributes() []*Attribute {
if m != nil {
return m.Attributes
}
return nil
}
func (m *Test) GetConditions() []*DUTCondition {
if m != nil {
return m.Conditions
}
return nil
}
func (m *Test) GetInformational() *Informational {
if m != nil {
return m.Informational
}
return nil
}
// Attributes used to include tests in test plans.
type Attribute struct {
// Opaque name for this attribute.
//
// Value must be valid resource names per https://aip.dev/122.
//
// Must not be interpreted by Test Lab Environments.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Attribute) Reset() { *m = Attribute{} }
func (m *Attribute) String() string { return proto.CompactTextString(m) }
func (*Attribute) ProtoMessage() {}
func (*Attribute) Descriptor() ([]byte, []int) {
return fileDescriptor_476fe0680946cd89, []int{2}
}
func (m *Attribute) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Attribute.Unmarshal(m, b)
}
func (m *Attribute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Attribute.Marshal(b, m, deterministic)
}
func (m *Attribute) XXX_Merge(src proto.Message) {
xxx_messageInfo_Attribute.Merge(m, src)
}
func (m *Attribute) XXX_Size() int {
return xxx_messageInfo_Attribute.Size(m)
}
func (m *Attribute) XXX_DiscardUnknown() {
xxx_messageInfo_Attribute.DiscardUnknown(m)
}
var xxx_messageInfo_Attribute proto.InternalMessageInfo
func (m *Attribute) GetName() string {
if m != nil {
return m.Name
}
return ""
}
// Condition to be met for each Device Under Test targeted by a test.
type DUTCondition struct {
// A Common Expression Language (CEL) expression to specify DUT conditions.
//
// Test Lab Environments may optionally support targeting test requests to
// Device Under Test based on DUTConditions. If this feature is supported, the
// Test Lab Environment must interpret `expression` in the scope of the
// protobuf message DUTCondition.Scope as defined below.
//
// The full CEL spec can be found at https://github.com/google/cel-spec.
// This API only currently only supports a small sub-set of the CEL features,
// as described here. Test Lab Environments should validate the expression and
// reject use of unsupported features.
//
// TODO(crbug.com/1051689) Add reference to the metadata validator package.
//
// ## Examples
//
// Typical instructive examples of expressions are:
//
// - A specific characteristic for a hardware feature, e.g.:
// scope.device.hardware_topology.screen.milliinch.value == 14000
// - A specific topology for a hardware feature, e.g.:
// scope.device.hardware_topology.form_factor.id == "fancy_clamshell"
// - Existence of a hardware feature, e.g.:
// (scope.device.hardware_features.lte ==
// scope.device.hardware_features.PRESENT)
// - Exclude certain hardware topologies, e.g.:
// scope.device.hardware_topology.stylus.id != "pencil"
//
// ## CEL support
//
// Current support for `expression` evaluation is very restricted due to
// limitations in the scheduling platform used by Test Platform. Specifying
// the conditions in CEL will allow gradual lifting of support restrictions.
//
// As this API matures, features will be added to the scheduling
// infrastructure of Test Platform and restrictions here will be lifted based
// on requirements collected from test authors. See milestones in
// go/cros-f20-plan for expected feature iterations.
//
// ### Evaluation context
//
// A CEL expression must be evaluated in some context that provides the basic
// bindings for name resolution. `expression` must be evaluated in an
// evaluation context that contains
//
// - A variable 'scope' of type DUTCondition.Scope. This variable contains the
// information about a particular Device Under Test being tested for
// acceptance via `expression`.
// - Protobuf definitions in this git project (i.e., rooted at infra/proto/).
//
// ### Syntax
//
// See full syntax definition at
// https://github.com/google/cel-spec/blob/master/doc/langdef.md#syntax
//
// CEL standard syntax allows expressions that evaluate to errors (e.g.,
// syntax allows negation of lists, which has no semantics in CEL).
// Thus, this spec does not attempt to restrict the syntax, but specifies what
// operations are unsupported to aid metadata producers. Ultimately, the
// reference metadata validator is the authority on what expressions are
// allowed.
//
// Unsupported standard CEL semantics:
// - Binary arithmetic operations
// e.g.: +, *, /, % ...
// - Relational Operators beyond (in)equality are not supported.
// e.g.: (>, <, >=, <= ...)
// - Logical OR in expressions is not supported.
// e.g.: (a || b), !(a && b) ...
//
// ### Macros
//
// See full macro definition at
// https://github.com/google/cel-spec/blob/master/doc/langdef.md#macros
//
// Supported macros: has(), e.all()
// Unsupported macros: e.exists(), e.exists_one(), e.map(), e.filter()
//
// ### Standard functions
//
// See full list of standard definitions at
// https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions
//
// Most standard functions are not supported.
//
// - Supported operators: !_, -_, _!=_, _&&_, _=_, _[_]
// - All other operators are not supported.
// - All other standard functions are not supported. In particular take note:
// - size() is not supported.
// - string functions like endsWith() and contains() are not supported.
// - type conversions like int() and string() are not supported.
// - reflection with type(), null_type() and dyn() is not supported.
Expression string `protobuf:"bytes,1,opt,name=expression,proto3" json:"expression,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DUTCondition) Reset() { *m = DUTCondition{} }
func (m *DUTCondition) String() string { return proto.CompactTextString(m) }
func (*DUTCondition) ProtoMessage() {}
func (*DUTCondition) Descriptor() ([]byte, []int) {
return fileDescriptor_476fe0680946cd89, []int{3}
}
func (m *DUTCondition) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DUTCondition.Unmarshal(m, b)
}
func (m *DUTCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_DUTCondition.Marshal(b, m, deterministic)
}
func (m *DUTCondition) XXX_Merge(src proto.Message) {
xxx_messageInfo_DUTCondition.Merge(m, src)
}
func (m *DUTCondition) XXX_Size() int {
return xxx_messageInfo_DUTCondition.Size(m)
}
func (m *DUTCondition) XXX_DiscardUnknown() {
xxx_messageInfo_DUTCondition.DiscardUnknown(m)
}
var xxx_messageInfo_DUTCondition proto.InternalMessageInfo
func (m *DUTCondition) GetExpression() string {
if m != nil {
return m.Expression
}
return ""
}
// Protocol buffer scope for interpretation of `expression`.
//
// Scope includes the Device Under Test features that can be targeted for test
// targeting.
type DUTCondition_Scope struct {
// Device Under Test specification.
Device *common.Device `protobuf:"bytes,1,opt,name=device,proto3" json:"device,omitempty"`
// Peripherals information about the lab deployment of the device.
LabDut *lab.DeviceUnderTest `protobuf:"bytes,2,opt,name=lab_dut,json=labDut,proto3" json:"lab_dut,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DUTCondition_Scope) Reset() { *m = DUTCondition_Scope{} }
func (m *DUTCondition_Scope) String() string { return proto.CompactTextString(m) }
func (*DUTCondition_Scope) ProtoMessage() {}
func (*DUTCondition_Scope) Descriptor() ([]byte, []int) {
return fileDescriptor_476fe0680946cd89, []int{3, 0}
}
func (m *DUTCondition_Scope) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DUTCondition_Scope.Unmarshal(m, b)
}
func (m *DUTCondition_Scope) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_DUTCondition_Scope.Marshal(b, m, deterministic)
}
func (m *DUTCondition_Scope) XXX_Merge(src proto.Message) {
xxx_messageInfo_DUTCondition_Scope.Merge(m, src)
}
func (m *DUTCondition_Scope) XXX_Size() int {
return xxx_messageInfo_DUTCondition_Scope.Size(m)
}
func (m *DUTCondition_Scope) XXX_DiscardUnknown() {
xxx_messageInfo_DUTCondition_Scope.DiscardUnknown(m)
}
var xxx_messageInfo_DUTCondition_Scope proto.InternalMessageInfo
func (m *DUTCondition_Scope) GetDevice() *common.Device {
if m != nil {
return m.Device
}
return nil
}
func (m *DUTCondition_Scope) GetLabDut() *lab.DeviceUnderTest {
if m != nil {
return m.LabDut
}
return nil
}
// Contains metadata about the test that doesn't affect scheduling or execution.
type Informational struct {
// Contacts for ownership / flakiness notification etc.
Authors []*Contact `protobuf:"bytes,1,rep,name=authors,proto3" json:"authors,omitempty"`
// Machine readable test-specific information.
//
// Remote Test Drivers should include detailed information to aid analytics.
// For example, test authors may minimize code duplication by writing
// paramterized tests. Thus, multiple test metadata may refer to the
// same test implementation with different arguments. It is useful to include
// this information as details. An example for Tauto:
// {
// "test_project": "chromiumos/third_party/autotest",
// "control_file": "site_tests/dummy_Pass/control.stress",
// "args": {
// "run_count": 35
// }
// }
//
// This field must not be interpreted by the Test Lab Environments, but Remote
// Test Drivers can enrich analytics by using uniform stable schema for
// details across all their tests.
Details *_struct.Struct `protobuf:"bytes,2,opt,name=details,proto3" json:"details,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Informational) Reset() { *m = Informational{} }
func (m *Informational) String() string { return proto.CompactTextString(m) }
func (*Informational) ProtoMessage() {}
func (*Informational) Descriptor() ([]byte, []int) {
return fileDescriptor_476fe0680946cd89, []int{4}
}
func (m *Informational) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Informational.Unmarshal(m, b)
}
func (m *Informational) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Informational.Marshal(b, m, deterministic)
}
func (m *Informational) XXX_Merge(src proto.Message) {
xxx_messageInfo_Informational.Merge(m, src)
}
func (m *Informational) XXX_Size() int {
return xxx_messageInfo_Informational.Size(m)
}
func (m *Informational) XXX_DiscardUnknown() {
xxx_messageInfo_Informational.DiscardUnknown(m)
}
var xxx_messageInfo_Informational proto.InternalMessageInfo
func (m *Informational) GetAuthors() []*Contact {
if m != nil {
return m.Authors
}
return nil
}
func (m *Informational) GetDetails() *_struct.Struct {
if m != nil {
return m.Details
}
return nil
}
// Contact information of individuals or teams.
type Contact struct {
// Types that are valid to be assigned to Type:
// *Contact_Email
// *Contact_MdbGroup
Type isContact_Type `protobuf_oneof:"type"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Contact) Reset() { *m = Contact{} }
func (m *Contact) String() string { return proto.CompactTextString(m) }
func (*Contact) ProtoMessage() {}
func (*Contact) Descriptor() ([]byte, []int) {
return fileDescriptor_476fe0680946cd89, []int{5}
}
func (m *Contact) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Contact.Unmarshal(m, b)
}
func (m *Contact) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Contact.Marshal(b, m, deterministic)
}
func (m *Contact) XXX_Merge(src proto.Message) {
xxx_messageInfo_Contact.Merge(m, src)
}
func (m *Contact) XXX_Size() int {
return xxx_messageInfo_Contact.Size(m)
}
func (m *Contact) XXX_DiscardUnknown() {
xxx_messageInfo_Contact.DiscardUnknown(m)
}
var xxx_messageInfo_Contact proto.InternalMessageInfo
type isContact_Type interface {
isContact_Type()
}
type Contact_Email struct {
Email string `protobuf:"bytes,1,opt,name=email,proto3,oneof"`
}
type Contact_MdbGroup struct {
MdbGroup string `protobuf:"bytes,2,opt,name=mdb_group,json=mdbGroup,proto3,oneof"`
}
func (*Contact_Email) isContact_Type() {}
func (*Contact_MdbGroup) isContact_Type() {}
func (m *Contact) GetType() isContact_Type {
if m != nil {
return m.Type
}
return nil
}
func (m *Contact) GetEmail() string {
if x, ok := m.GetType().(*Contact_Email); ok {
return x.Email
}
return ""
}
func (m *Contact) GetMdbGroup() string {
if x, ok := m.GetType().(*Contact_MdbGroup); ok {
return x.MdbGroup
}
return ""
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*Contact) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*Contact_Email)(nil),
(*Contact_MdbGroup)(nil),
}
}
func init() {
proto.RegisterType((*Metadata)(nil), "test.metadata.v1.Metadata")
proto.RegisterType((*Test)(nil), "test.metadata.v1.Test")
proto.RegisterType((*Attribute)(nil), "test.metadata.v1.Attribute")
proto.RegisterType((*DUTCondition)(nil), "test.metadata.v1.DUTCondition")
proto.RegisterType((*DUTCondition_Scope)(nil), "test.metadata.v1.DUTCondition.Scope")
proto.RegisterType((*Informational)(nil), "test.metadata.v1.Informational")
proto.RegisterType((*Contact)(nil), "test.metadata.v1.Contact")
}
func init() { proto.RegisterFile("test/metadata/v1/metadata.proto", fileDescriptor_476fe0680946cd89) }
var fileDescriptor_476fe0680946cd89 = []byte{
// 513 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x93, 0xdf, 0x6e, 0xd3, 0x3e,
0x14, 0xc7, 0x7f, 0xf9, 0xad, 0x6b, 0xd7, 0x33, 0x2a, 0x55, 0x06, 0x8d, 0x50, 0x60, 0x9d, 0x72,
0x35, 0x40, 0x38, 0xea, 0x76, 0xc1, 0x05, 0x12, 0x12, 0x5d, 0x11, 0xe5, 0x02, 0x69, 0xf2, 0xb6,
0x1b, 0x6e, 0x2a, 0x27, 0x71, 0x33, 0x4b, 0x71, 0x4e, 0xe5, 0x38, 0x05, 0xde, 0x80, 0x7b, 0xde,
0x8f, 0x67, 0x41, 0x76, 0x92, 0x2a, 0x5d, 0xb8, 0xf3, 0xf9, 0x9e, 0xcf, 0xf9, 0xe3, 0xe3, 0x63,
0x98, 0x1a, 0x51, 0x98, 0x50, 0x09, 0xc3, 0x13, 0x6e, 0x78, 0xb8, 0x9d, 0xed, 0xce, 0x74, 0xa3,
0xd1, 0x20, 0x19, 0x5b, 0x80, 0xee, 0xc4, 0xed, 0x6c, 0xf2, 0x22, 0x45, 0x4c, 0x33, 0x11, 0x3a,
0x7f, 0x54, 0xae, 0xc3, 0xc2, 0xe8, 0x32, 0x36, 0x15, 0x3f, 0x19, 0x67, 0x3c, 0x0a, 0x13, 0xb1,
0x95, 0xb1, 0xa8, 0x15, 0xdf, 0x95, 0x88, 0x51, 0x29, 0xcc, 0xf7, 0x3d, 0xaf, 0x3a, 0xc5, 0xb5,
0x50, 0x68, 0xc4, 0xca, 0xea, 0xab, 0x44, 0xcb, 0xad, 0xd0, 0x15, 0x1a, 0xfc, 0xf2, 0xe0, 0xe8,
0x6b, 0x0d, 0x92, 0x6b, 0x20, 0x5d, 0xd0, 0xf7, 0xce, 0xbc, 0xf3, 0xe3, 0x8b, 0x80, 0x3e, 0x6c,
0x98, 0x32, 0xc7, 0xde, 0x8a, 0xc2, 0x2c, 0x1c, 0xc9, 0xc6, 0xfa, 0x81, 0x42, 0x5e, 0x43, 0xcf,
0x86, 0xf9, 0xff, 0x9f, 0x1d, 0x9c, 0x1f, 0x5f, 0x9c, 0x74, 0x73, 0x58, 0x96, 0x39, 0x26, 0xf8,
0xe3, 0x41, 0xcf, 0x9a, 0x84, 0x40, 0x2f, 0xe7, 0x4a, 0xb8, 0xc2, 0x43, 0xe6, 0xce, 0xe4, 0x3d,
0x00, 0x37, 0x46, 0xcb, 0xa8, 0x34, 0xa2, 0xa8, 0xd3, 0x3d, 0xef, 0xa6, 0xfb, 0xd8, 0x30, 0xac,
0x85, 0x93, 0x0f, 0x00, 0x31, 0xe6, 0x89, 0x34, 0x12, 0xf3, 0xc2, 0x3f, 0x70, 0xc1, 0xa7, 0xdd,
0xe0, 0xc5, 0xdd, 0xed, 0x55, 0x83, 0xb1, 0x56, 0x04, 0xf9, 0x04, 0x23, 0x99, 0xaf, 0x51, 0x2b,
0x6e, 0x6d, 0x9e, 0xf9, 0x3d, 0x37, 0x92, 0x69, 0x37, 0xc5, 0x97, 0x36, 0xc6, 0xf6, 0xa3, 0x82,
0x29, 0x0c, 0x77, 0xfd, 0xfd, 0xeb, 0x92, 0xc1, 0x6f, 0x0f, 0x1e, 0xb5, 0x9b, 0x20, 0xa7, 0x00,
0xe2, 0xc7, 0x46, 0x8b, 0xa2, 0x90, 0x98, 0xd7, 0x68, 0x4b, 0x99, 0xc4, 0x70, 0x78, 0x13, 0xe3,
0x46, 0x90, 0x37, 0xd0, 0xaf, 0x36, 0xa0, 0x7e, 0xad, 0xc7, 0x55, 0x6b, 0xd5, 0x72, 0xd0, 0x85,
0x73, 0xb1, 0x1a, 0x21, 0x6f, 0x61, 0x90, 0xf1, 0x68, 0x95, 0x94, 0xf6, 0x5d, 0x2c, 0xfd, 0x84,
0x66, 0x3c, 0xaa, 0xa9, 0xbb, 0x3c, 0x11, 0xda, 0xbd, 0x4a, 0x3f, 0xe3, 0xd1, 0xa2, 0x34, 0xc1,
0x77, 0x18, 0xed, 0x5d, 0x8b, 0x5c, 0xc2, 0x80, 0x97, 0xe6, 0x1e, 0x75, 0xe1, 0x7b, 0x6e, 0x96,
0xcf, 0xba, 0x83, 0xb8, 0xc2, 0xdc, 0xf0, 0xd8, 0xb0, 0x86, 0x24, 0x33, 0x18, 0x24, 0xc2, 0x70,
0x99, 0x15, 0x75, 0xd1, 0xa7, 0xb4, 0xda, 0x77, 0xda, 0xec, 0x3b, 0xbd, 0x71, 0xfb, 0xce, 0x1a,
0x2e, 0x58, 0xc2, 0xa0, 0x4e, 0x43, 0x4e, 0xe0, 0x50, 0x28, 0x2e, 0xb3, 0x6a, 0x06, 0xcb, 0xff,
0x58, 0x65, 0x92, 0x97, 0x30, 0x54, 0x49, 0xb4, 0x4a, 0x35, 0x96, 0x1b, 0x97, 0xd7, 0xfa, 0x8e,
0x54, 0x12, 0x7d, 0xb6, 0xca, 0xbc, 0x0f, 0x3d, 0xf3, 0x73, 0x23, 0xe6, 0xcb, 0xf9, 0xa8, 0x59,
0xf2, 0x6b, 0x5b, 0xed, 0xdb, 0xbb, 0x14, 0x69, 0x7c, 0xaf, 0x51, 0xc9, 0x52, 0x51, 0xd4, 0x69,
0xd8, 0x18, 0x58, 0x84, 0x32, 0x5f, 0x6b, 0x5e, 0xfd, 0xc2, 0x30, 0xc5, 0x70, 0xef, 0x2f, 0x45,
0x7d, 0xa7, 0x5f, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x22, 0x52, 0xef, 0x2f, 0xe0, 0x03, 0x00,
0x00,
}