blob: 80ccd0efa6a6e88b5236c686810eb08b92bc027f [file] [log] [blame]
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: go.chromium.org/luci/dm/api/distributor/jobsim/task.proto
package jobsim
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
duration "github.com/golang/protobuf/ptypes/duration"
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
// Phrase is a task to do. It consists of zero or more stages, followed by
// an optional ReturnStage.
type Phrase struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Seed should be selected via a fair dice roll (using a d1.84e19).
Seed int64 `protobuf:"varint,2,opt,name=seed,proto3" json:"seed,omitempty"`
Stages []*Stage `protobuf:"bytes,3,rep,name=stages,proto3" json:"stages,omitempty"`
ReturnStage *ReturnStage `protobuf:"bytes,4,opt,name=return_stage,json=returnStage,proto3" json:"return_stage,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Phrase) Reset() { *m = Phrase{} }
func (m *Phrase) String() string { return proto.CompactTextString(m) }
func (*Phrase) ProtoMessage() {}
func (*Phrase) Descriptor() ([]byte, []int) {
return fileDescriptor_5cdcbaf2009df1de, []int{0}
}
func (m *Phrase) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Phrase.Unmarshal(m, b)
}
func (m *Phrase) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Phrase.Marshal(b, m, deterministic)
}
func (m *Phrase) XXX_Merge(src proto.Message) {
xxx_messageInfo_Phrase.Merge(m, src)
}
func (m *Phrase) XXX_Size() int {
return xxx_messageInfo_Phrase.Size(m)
}
func (m *Phrase) XXX_DiscardUnknown() {
xxx_messageInfo_Phrase.DiscardUnknown(m)
}
var xxx_messageInfo_Phrase proto.InternalMessageInfo
func (m *Phrase) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *Phrase) GetSeed() int64 {
if m != nil {
return m.Seed
}
return 0
}
func (m *Phrase) GetStages() []*Stage {
if m != nil {
return m.Stages
}
return nil
}
func (m *Phrase) GetReturnStage() *ReturnStage {
if m != nil {
return m.ReturnStage
}
return nil
}
// ReturnStage indicates that the Phrase should return the numerical value
// 'retval' as the result of the current Phrase. If expiration is provided,
// it will set that as the expiration timestamp for the provided retval.
type ReturnStage struct {
Retval int64 `protobuf:"varint,1,opt,name=retval,proto3" json:"retval,omitempty"`
Expiration *timestamp.Timestamp `protobuf:"bytes,2,opt,name=expiration,proto3" json:"expiration,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ReturnStage) Reset() { *m = ReturnStage{} }
func (m *ReturnStage) String() string { return proto.CompactTextString(m) }
func (*ReturnStage) ProtoMessage() {}
func (*ReturnStage) Descriptor() ([]byte, []int) {
return fileDescriptor_5cdcbaf2009df1de, []int{1}
}
func (m *ReturnStage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReturnStage.Unmarshal(m, b)
}
func (m *ReturnStage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReturnStage.Marshal(b, m, deterministic)
}
func (m *ReturnStage) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReturnStage.Merge(m, src)
}
func (m *ReturnStage) XXX_Size() int {
return xxx_messageInfo_ReturnStage.Size(m)
}
func (m *ReturnStage) XXX_DiscardUnknown() {
xxx_messageInfo_ReturnStage.DiscardUnknown(m)
}
var xxx_messageInfo_ReturnStage proto.InternalMessageInfo
func (m *ReturnStage) GetRetval() int64 {
if m != nil {
return m.Retval
}
return 0
}
func (m *ReturnStage) GetExpiration() *timestamp.Timestamp {
if m != nil {
return m.Expiration
}
return nil
}
// Stage is the union of the following stage types:
// * FailureStage
// * StallStage
// * DepsStage
type Stage struct {
// Types that are valid to be assigned to StageType:
// *Stage_Failure
// *Stage_Stall
// *Stage_Deps
StageType isStage_StageType `protobuf_oneof:"stage_type"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Stage) Reset() { *m = Stage{} }
func (m *Stage) String() string { return proto.CompactTextString(m) }
func (*Stage) ProtoMessage() {}
func (*Stage) Descriptor() ([]byte, []int) {
return fileDescriptor_5cdcbaf2009df1de, []int{2}
}
func (m *Stage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Stage.Unmarshal(m, b)
}
func (m *Stage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Stage.Marshal(b, m, deterministic)
}
func (m *Stage) XXX_Merge(src proto.Message) {
xxx_messageInfo_Stage.Merge(m, src)
}
func (m *Stage) XXX_Size() int {
return xxx_messageInfo_Stage.Size(m)
}
func (m *Stage) XXX_DiscardUnknown() {
xxx_messageInfo_Stage.DiscardUnknown(m)
}
var xxx_messageInfo_Stage proto.InternalMessageInfo
type isStage_StageType interface {
isStage_StageType()
}
type Stage_Failure struct {
Failure *FailureStage `protobuf:"bytes,1,opt,name=failure,proto3,oneof"`
}
type Stage_Stall struct {
Stall *StallStage `protobuf:"bytes,2,opt,name=stall,proto3,oneof"`
}
type Stage_Deps struct {
Deps *DepsStage `protobuf:"bytes,3,opt,name=deps,proto3,oneof"`
}
func (*Stage_Failure) isStage_StageType() {}
func (*Stage_Stall) isStage_StageType() {}
func (*Stage_Deps) isStage_StageType() {}
func (m *Stage) GetStageType() isStage_StageType {
if m != nil {
return m.StageType
}
return nil
}
func (m *Stage) GetFailure() *FailureStage {
if x, ok := m.GetStageType().(*Stage_Failure); ok {
return x.Failure
}
return nil
}
func (m *Stage) GetStall() *StallStage {
if x, ok := m.GetStageType().(*Stage_Stall); ok {
return x.Stall
}
return nil
}
func (m *Stage) GetDeps() *DepsStage {
if x, ok := m.GetStageType().(*Stage_Deps); ok {
return x.Deps
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*Stage) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*Stage_Failure)(nil),
(*Stage_Stall)(nil),
(*Stage_Deps)(nil),
}
}
// FailureStage is the /chance/ to fail with a certain liklihood. The chance
// is calculated using the current Phrase's 'seed' with the "math/rand" package,
// The seed is either 0 (unspecified), or the value of the 'seed' property for
// the currently running phrase.
//
// 0 is a 0-percent chance of failure.
// 1 is a 100-percent chance of failure.
type FailureStage struct {
Chance float32 `protobuf:"fixed32,1,opt,name=chance,proto3" json:"chance,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FailureStage) Reset() { *m = FailureStage{} }
func (m *FailureStage) String() string { return proto.CompactTextString(m) }
func (*FailureStage) ProtoMessage() {}
func (*FailureStage) Descriptor() ([]byte, []int) {
return fileDescriptor_5cdcbaf2009df1de, []int{3}
}
func (m *FailureStage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FailureStage.Unmarshal(m, b)
}
func (m *FailureStage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_FailureStage.Marshal(b, m, deterministic)
}
func (m *FailureStage) XXX_Merge(src proto.Message) {
xxx_messageInfo_FailureStage.Merge(m, src)
}
func (m *FailureStage) XXX_Size() int {
return xxx_messageInfo_FailureStage.Size(m)
}
func (m *FailureStage) XXX_DiscardUnknown() {
xxx_messageInfo_FailureStage.DiscardUnknown(m)
}
var xxx_messageInfo_FailureStage proto.InternalMessageInfo
func (m *FailureStage) GetChance() float32 {
if m != nil {
return m.Chance
}
return 0
}
// StallStage delays the phrase for the provided Duration. This could be used
// to simulate long-running tasks (like builds).
type StallStage struct {
Delay *duration.Duration `protobuf:"bytes,1,opt,name=delay,proto3" json:"delay,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *StallStage) Reset() { *m = StallStage{} }
func (m *StallStage) String() string { return proto.CompactTextString(m) }
func (*StallStage) ProtoMessage() {}
func (*StallStage) Descriptor() ([]byte, []int) {
return fileDescriptor_5cdcbaf2009df1de, []int{4}
}
func (m *StallStage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StallStage.Unmarshal(m, b)
}
func (m *StallStage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_StallStage.Marshal(b, m, deterministic)
}
func (m *StallStage) XXX_Merge(src proto.Message) {
xxx_messageInfo_StallStage.Merge(m, src)
}
func (m *StallStage) XXX_Size() int {
return xxx_messageInfo_StallStage.Size(m)
}
func (m *StallStage) XXX_DiscardUnknown() {
xxx_messageInfo_StallStage.DiscardUnknown(m)
}
var xxx_messageInfo_StallStage proto.InternalMessageInfo
func (m *StallStage) GetDelay() *duration.Duration {
if m != nil {
return m.Delay
}
return nil
}
// DepsStage represents the opportunity to depend on 1 or more dependencies
// simultaneously.
type DepsStage struct {
Deps []*Dependency `protobuf:"bytes,1,rep,name=deps,proto3" json:"deps,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DepsStage) Reset() { *m = DepsStage{} }
func (m *DepsStage) String() string { return proto.CompactTextString(m) }
func (*DepsStage) ProtoMessage() {}
func (*DepsStage) Descriptor() ([]byte, []int) {
return fileDescriptor_5cdcbaf2009df1de, []int{5}
}
func (m *DepsStage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DepsStage.Unmarshal(m, b)
}
func (m *DepsStage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_DepsStage.Marshal(b, m, deterministic)
}
func (m *DepsStage) XXX_Merge(src proto.Message) {
xxx_messageInfo_DepsStage.Merge(m, src)
}
func (m *DepsStage) XXX_Size() int {
return xxx_messageInfo_DepsStage.Size(m)
}
func (m *DepsStage) XXX_DiscardUnknown() {
xxx_messageInfo_DepsStage.DiscardUnknown(m)
}
var xxx_messageInfo_DepsStage proto.InternalMessageInfo
func (m *DepsStage) GetDeps() []*Dependency {
if m != nil {
return m.Deps
}
return nil
}
// Dependency represents a nested Phrase that this Phrase depends on.
type Dependency struct {
// shards append [1], [2], [3], etc. to the "name"s of the dependencies, making
// them unique quests.
Shards uint64 `protobuf:"varint,1,opt,name=shards,proto3" json:"shards,omitempty"`
// Types that are valid to be assigned to AttemptStrategy:
// *Dependency_Attempts
// *Dependency_Retries
AttemptStrategy isDependency_AttemptStrategy `protobuf_oneof:"attempt_strategy"`
// MixSeed will blend the current seed with the seed in the phrase seed,
// when depending on it.
//
// mix_seed phrase.seed==0 -> dep uses "random" seed
// mix_seed phrase.seed!=0 -> dep uses blend(current seed, phrase.seed)
// !mix_seed phrase.seed==0 -> dep uses current seed
// !mix_seed phrase.seed!=0 -> dep uses phrase.seed
MixSeed bool `protobuf:"varint,4,opt,name=mix_seed,json=mixSeed,proto3" json:"mix_seed,omitempty"`
Phrase *Phrase `protobuf:"bytes,5,opt,name=phrase,proto3" json:"phrase,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Dependency) Reset() { *m = Dependency{} }
func (m *Dependency) String() string { return proto.CompactTextString(m) }
func (*Dependency) ProtoMessage() {}
func (*Dependency) Descriptor() ([]byte, []int) {
return fileDescriptor_5cdcbaf2009df1de, []int{6}
}
func (m *Dependency) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Dependency.Unmarshal(m, b)
}
func (m *Dependency) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Dependency.Marshal(b, m, deterministic)
}
func (m *Dependency) XXX_Merge(src proto.Message) {
xxx_messageInfo_Dependency.Merge(m, src)
}
func (m *Dependency) XXX_Size() int {
return xxx_messageInfo_Dependency.Size(m)
}
func (m *Dependency) XXX_DiscardUnknown() {
xxx_messageInfo_Dependency.DiscardUnknown(m)
}
var xxx_messageInfo_Dependency proto.InternalMessageInfo
func (m *Dependency) GetShards() uint64 {
if m != nil {
return m.Shards
}
return 0
}
type isDependency_AttemptStrategy interface {
isDependency_AttemptStrategy()
}
type Dependency_Attempts struct {
Attempts *SparseRange `protobuf:"bytes,2,opt,name=attempts,proto3,oneof"`
}
type Dependency_Retries struct {
Retries uint32 `protobuf:"varint,3,opt,name=retries,proto3,oneof"`
}
func (*Dependency_Attempts) isDependency_AttemptStrategy() {}
func (*Dependency_Retries) isDependency_AttemptStrategy() {}
func (m *Dependency) GetAttemptStrategy() isDependency_AttemptStrategy {
if m != nil {
return m.AttemptStrategy
}
return nil
}
func (m *Dependency) GetAttempts() *SparseRange {
if x, ok := m.GetAttemptStrategy().(*Dependency_Attempts); ok {
return x.Attempts
}
return nil
}
func (m *Dependency) GetRetries() uint32 {
if x, ok := m.GetAttemptStrategy().(*Dependency_Retries); ok {
return x.Retries
}
return 0
}
func (m *Dependency) GetMixSeed() bool {
if m != nil {
return m.MixSeed
}
return false
}
func (m *Dependency) GetPhrase() *Phrase {
if m != nil {
return m.Phrase
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*Dependency) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*Dependency_Attempts)(nil),
(*Dependency_Retries)(nil),
}
}
// SparseRange allows the expression of mixed partial ranges like [1,3-10,19,21].
type SparseRange struct {
Items []*RangeItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SparseRange) Reset() { *m = SparseRange{} }
func (m *SparseRange) String() string { return proto.CompactTextString(m) }
func (*SparseRange) ProtoMessage() {}
func (*SparseRange) Descriptor() ([]byte, []int) {
return fileDescriptor_5cdcbaf2009df1de, []int{7}
}
func (m *SparseRange) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SparseRange.Unmarshal(m, b)
}
func (m *SparseRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SparseRange.Marshal(b, m, deterministic)
}
func (m *SparseRange) XXX_Merge(src proto.Message) {
xxx_messageInfo_SparseRange.Merge(m, src)
}
func (m *SparseRange) XXX_Size() int {
return xxx_messageInfo_SparseRange.Size(m)
}
func (m *SparseRange) XXX_DiscardUnknown() {
xxx_messageInfo_SparseRange.DiscardUnknown(m)
}
var xxx_messageInfo_SparseRange proto.InternalMessageInfo
func (m *SparseRange) GetItems() []*RangeItem {
if m != nil {
return m.Items
}
return nil
}
// RangeItem is either a single number or a Range.
type RangeItem struct {
// Types that are valid to be assigned to RangeItem:
// *RangeItem_Single
// *RangeItem_Range
RangeItem isRangeItem_RangeItem `protobuf_oneof:"range_item"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RangeItem) Reset() { *m = RangeItem{} }
func (m *RangeItem) String() string { return proto.CompactTextString(m) }
func (*RangeItem) ProtoMessage() {}
func (*RangeItem) Descriptor() ([]byte, []int) {
return fileDescriptor_5cdcbaf2009df1de, []int{8}
}
func (m *RangeItem) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RangeItem.Unmarshal(m, b)
}
func (m *RangeItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_RangeItem.Marshal(b, m, deterministic)
}
func (m *RangeItem) XXX_Merge(src proto.Message) {
xxx_messageInfo_RangeItem.Merge(m, src)
}
func (m *RangeItem) XXX_Size() int {
return xxx_messageInfo_RangeItem.Size(m)
}
func (m *RangeItem) XXX_DiscardUnknown() {
xxx_messageInfo_RangeItem.DiscardUnknown(m)
}
var xxx_messageInfo_RangeItem proto.InternalMessageInfo
type isRangeItem_RangeItem interface {
isRangeItem_RangeItem()
}
type RangeItem_Single struct {
Single uint32 `protobuf:"varint,1,opt,name=single,proto3,oneof"`
}
type RangeItem_Range struct {
Range *Range `protobuf:"bytes,2,opt,name=range,proto3,oneof"`
}
func (*RangeItem_Single) isRangeItem_RangeItem() {}
func (*RangeItem_Range) isRangeItem_RangeItem() {}
func (m *RangeItem) GetRangeItem() isRangeItem_RangeItem {
if m != nil {
return m.RangeItem
}
return nil
}
func (m *RangeItem) GetSingle() uint32 {
if x, ok := m.GetRangeItem().(*RangeItem_Single); ok {
return x.Single
}
return 0
}
func (m *RangeItem) GetRange() *Range {
if x, ok := m.GetRangeItem().(*RangeItem_Range); ok {
return x.Range
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*RangeItem) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*RangeItem_Single)(nil),
(*RangeItem_Range)(nil),
}
}
// Range represents a single low-high pair (e.g. [3-40])
type Range struct {
Low uint32 `protobuf:"varint,1,opt,name=low,proto3" json:"low,omitempty"`
High uint32 `protobuf:"varint,2,opt,name=high,proto3" json:"high,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Range) Reset() { *m = Range{} }
func (m *Range) String() string { return proto.CompactTextString(m) }
func (*Range) ProtoMessage() {}
func (*Range) Descriptor() ([]byte, []int) {
return fileDescriptor_5cdcbaf2009df1de, []int{9}
}
func (m *Range) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Range.Unmarshal(m, b)
}
func (m *Range) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Range.Marshal(b, m, deterministic)
}
func (m *Range) XXX_Merge(src proto.Message) {
xxx_messageInfo_Range.Merge(m, src)
}
func (m *Range) XXX_Size() int {
return xxx_messageInfo_Range.Size(m)
}
func (m *Range) XXX_DiscardUnknown() {
xxx_messageInfo_Range.DiscardUnknown(m)
}
var xxx_messageInfo_Range proto.InternalMessageInfo
func (m *Range) GetLow() uint32 {
if m != nil {
return m.Low
}
return 0
}
func (m *Range) GetHigh() uint32 {
if m != nil {
return m.High
}
return 0
}
func init() {
proto.RegisterType((*Phrase)(nil), "jobsim.Phrase")
proto.RegisterType((*ReturnStage)(nil), "jobsim.ReturnStage")
proto.RegisterType((*Stage)(nil), "jobsim.Stage")
proto.RegisterType((*FailureStage)(nil), "jobsim.FailureStage")
proto.RegisterType((*StallStage)(nil), "jobsim.StallStage")
proto.RegisterType((*DepsStage)(nil), "jobsim.DepsStage")
proto.RegisterType((*Dependency)(nil), "jobsim.Dependency")
proto.RegisterType((*SparseRange)(nil), "jobsim.SparseRange")
proto.RegisterType((*RangeItem)(nil), "jobsim.RangeItem")
proto.RegisterType((*Range)(nil), "jobsim.Range")
}
func init() {
proto.RegisterFile("go.chromium.org/luci/dm/api/distributor/jobsim/task.proto", fileDescriptor_5cdcbaf2009df1de)
}
var fileDescriptor_5cdcbaf2009df1de = []byte{
// 592 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x53, 0xcd, 0x6e, 0xd3, 0x40,
0x10, 0xc6, 0x4d, 0xec, 0x36, 0xe3, 0x04, 0x95, 0x05, 0x21, 0x37, 0x07, 0x88, 0x2c, 0x35, 0x8d,
0x90, 0xb0, 0x21, 0x95, 0x2a, 0x81, 0xc4, 0xa5, 0xaa, 0x10, 0xdc, 0xd0, 0x86, 0x13, 0x97, 0x68,
0x13, 0x6f, 0xed, 0x05, 0xaf, 0x6d, 0xed, 0xae, 0x21, 0x79, 0x0a, 0x5e, 0x80, 0x27, 0xe2, 0xa9,
0xd0, 0xfe, 0x38, 0x31, 0x70, 0xdb, 0xf9, 0xe6, 0xf3, 0xcc, 0x37, 0xdf, 0x8c, 0xe1, 0x4d, 0x5e,
0x27, 0xdb, 0x42, 0xd4, 0x9c, 0xb5, 0x3c, 0xa9, 0x45, 0x9e, 0x96, 0xed, 0x96, 0xa5, 0x19, 0x4f,
0x49, 0xc3, 0xd2, 0x8c, 0x49, 0x25, 0xd8, 0xa6, 0x55, 0xb5, 0x48, 0xbf, 0xd6, 0x1b, 0xc9, 0x78,
0xaa, 0x88, 0xfc, 0x96, 0x34, 0xa2, 0x56, 0x35, 0x0a, 0x2c, 0x34, 0x7d, 0x9e, 0xd7, 0x75, 0x5e,
0xd2, 0xd4, 0xa0, 0x9b, 0xf6, 0x3e, 0x55, 0x8c, 0x53, 0xa9, 0x08, 0x6f, 0x2c, 0x71, 0xfa, 0xec,
0x5f, 0x42, 0xd6, 0x0a, 0xa2, 0x58, 0x5d, 0xd9, 0x7c, 0xfc, 0xd3, 0x83, 0xe0, 0x53, 0x21, 0x88,
0xa4, 0x08, 0xc1, 0xb0, 0x22, 0x9c, 0x46, 0xde, 0xcc, 0x5b, 0x8c, 0xb0, 0x79, 0x6b, 0x4c, 0x52,
0x9a, 0x45, 0x27, 0x33, 0x6f, 0x31, 0xc0, 0xe6, 0x8d, 0x2e, 0x21, 0x90, 0x8a, 0xe4, 0x54, 0x46,
0x83, 0xd9, 0x60, 0x11, 0x2e, 0x27, 0x89, 0x15, 0x93, 0xac, 0x34, 0x8a, 0x5d, 0x12, 0xdd, 0xc0,
0x58, 0x50, 0xd5, 0x8a, 0x6a, 0x6d, 0x80, 0x68, 0x38, 0xf3, 0x16, 0xe1, 0xf2, 0x71, 0x47, 0xc6,
0x26, 0x67, 0x3f, 0x09, 0xc5, 0x31, 0x88, 0x09, 0x84, 0xbd, 0x1c, 0x7a, 0x0a, 0x81, 0xa0, 0xea,
0x3b, 0x29, 0x8d, 0xae, 0x01, 0x76, 0x11, 0x7a, 0x0b, 0x40, 0x77, 0x0d, 0xb3, 0xc3, 0x18, 0x7d,
0xe1, 0x72, 0x9a, 0xd8, 0x69, 0x93, 0x6e, 0xda, 0xe4, 0x73, 0x67, 0x07, 0xee, 0xb1, 0xe3, 0x5f,
0x1e, 0xf8, 0xb6, 0xfa, 0x2b, 0x38, 0xbd, 0x27, 0xac, 0x6c, 0x85, 0x1d, 0x3b, 0x5c, 0x3e, 0xe9,
0xf4, 0xbd, 0xb7, 0xb0, 0xa1, 0x7d, 0x78, 0x80, 0x3b, 0x1a, 0x7a, 0x01, 0xbe, 0x54, 0xa4, 0x2c,
0x5d, 0x4b, 0xd4, 0x1b, 0xbe, 0x2c, 0x3b, 0xb6, 0xa5, 0xa0, 0x2b, 0x18, 0x66, 0xb4, 0xd1, 0x3e,
0x69, 0xea, 0xa3, 0x8e, 0x7a, 0x47, 0x1b, 0xd9, 0x31, 0x0d, 0xe1, 0x76, 0x0c, 0x60, 0x4c, 0x5a,
0xab, 0x7d, 0x43, 0xe3, 0x39, 0x8c, 0xfb, 0xdd, 0xb5, 0x05, 0xdb, 0x82, 0x54, 0x5b, 0xab, 0xf1,
0x04, 0xbb, 0x28, 0x7e, 0x07, 0x70, 0xec, 0x8a, 0x52, 0xf0, 0x33, 0x5a, 0x92, 0xbd, 0x1b, 0xe4,
0xe2, 0x3f, 0x2f, 0xee, 0xdc, 0xe6, 0xb1, 0xe5, 0xc5, 0xd7, 0x30, 0x3a, 0x28, 0x41, 0x73, 0x27,
0xd5, 0x33, 0x2b, 0x45, 0x3d, 0xa9, 0xb4, 0xca, 0x68, 0xb5, 0xdd, 0x5b, 0xa5, 0xf1, 0x6f, 0x0f,
0xe0, 0x08, 0x6a, 0x69, 0xb2, 0x20, 0x22, 0x93, 0xa6, 0xeb, 0x10, 0xbb, 0x08, 0xbd, 0x86, 0x33,
0xa2, 0x14, 0xe5, 0x8d, 0x92, 0xce, 0xa8, 0xc3, 0xe2, 0x57, 0x0d, 0x11, 0x92, 0x62, 0x52, 0x99,
0xf9, 0x0f, 0x34, 0x34, 0x85, 0x53, 0x41, 0x95, 0x60, 0xd4, 0xfa, 0x35, 0xd1, 0xa6, 0x3b, 0x00,
0x5d, 0xc0, 0x19, 0x67, 0xbb, 0xb5, 0x39, 0x45, 0x7d, 0x47, 0x67, 0xf8, 0x94, 0xb3, 0xdd, 0x4a,
0x5f, 0xe3, 0x1c, 0x82, 0xc6, 0xdc, 0x6f, 0xe4, 0x9b, 0x3e, 0x0f, 0xbb, 0x3e, 0xf6, 0xaa, 0xb1,
0xcb, 0xde, 0x22, 0x38, 0x77, 0xad, 0xd6, 0x52, 0x09, 0xa2, 0x68, 0xbe, 0x8f, 0x6f, 0x20, 0xec,
0xa9, 0x41, 0x57, 0xe0, 0x33, 0x45, 0x79, 0x67, 0xc2, 0x61, 0x5f, 0x26, 0xfb, 0x51, 0x51, 0x8e,
0x6d, 0x3e, 0xfe, 0x02, 0xa3, 0x03, 0x86, 0x22, 0x08, 0x24, 0xab, 0xf2, 0xd2, 0x6e, 0x47, 0xcb,
0x76, 0x31, 0xba, 0x04, 0x5f, 0x68, 0x9a, 0x73, 0x60, 0xf2, 0x57, 0x3d, 0x7d, 0x25, 0x26, 0xab,
0x97, 0x6f, 0x1e, 0x6b, 0x5d, 0x3c, 0x7e, 0x09, 0xbe, 0x55, 0x73, 0x0e, 0x83, 0xb2, 0xfe, 0x61,
0x8b, 0x62, 0xfd, 0xd4, 0x3f, 0x63, 0xc1, 0xf2, 0xc2, 0x94, 0x9b, 0x60, 0xf3, 0xde, 0x04, 0x66,
0xbd, 0xd7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x15, 0x54, 0xa4, 0x4c, 0x04, 0x00, 0x00,
}