blob: c22abbe05114ca50a85e77af0d1e96c0b2db4657 [file] [log] [blame]
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: go.chromium.org/luci/swarming/proto/config/config.proto
package configpb
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
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
// Schema for settings.cfg service config file in luci-config.
type SettingsCfg struct {
// id to inject into pages if applicable.
GoogleAnalytics string `protobuf:"bytes,1,opt,name=google_analytics,json=googleAnalytics,proto3" json:"google_analytics,omitempty"`
// The number of seconds an old task can be deduped from.
// Default is one week: 7*24*60*60 = 604800
ReusableTaskAgeSecs int32 `protobuf:"varint,2,opt,name=reusable_task_age_secs,json=reusableTaskAgeSecs,proto3" json:"reusable_task_age_secs,omitempty"`
// The amount of time that has to pass before a machine is considered dead.
// Default is 600 (10 minutes).
BotDeathTimeoutSecs int32 `protobuf:"varint,3,opt,name=bot_death_timeout_secs,json=botDeathTimeoutSecs,proto3" json:"bot_death_timeout_secs,omitempty"`
// Enable ts_mon based monitoring.
EnableTsMonitoring bool `protobuf:"varint,4,opt,name=enable_ts_monitoring,json=enableTsMonitoring,proto3" json:"enable_ts_monitoring,omitempty"`
// (deprecated, see pools.proto) Configuration for swarming-isolate integration.
Isolate *IsolateSettings `protobuf:"bytes,5,opt,name=isolate,proto3" json:"isolate,omitempty"`
// (deprecated, see pools.proto) Configuration for swarming-cipd integration.
Cipd *CipdSettings `protobuf:"bytes,6,opt,name=cipd,proto3" json:"cipd,omitempty"`
// Configuration for swarming-mp integration.
Mp *MachineProviderSettings `protobuf:"bytes,7,opt,name=mp,proto3" json:"mp,omitempty"`
// Emergency setting to disable bot task reaping. When set, all bots are
// always put to sleep and are never granted task.
ForceBotsToSleepAndNotRunTask bool `protobuf:"varint,8,opt,name=force_bots_to_sleep_and_not_run_task,json=forceBotsToSleepAndNotRunTask,proto3" json:"force_bots_to_sleep_and_not_run_task,omitempty"`
// oauth client id for the ui. This is created in the developer's console
// under Credentials.
UiClientId string `protobuf:"bytes,9,opt,name=ui_client_id,json=uiClientId,proto3" json:"ui_client_id,omitempty"`
// A url to a task display server (e.g. milo). This should have a %s where
// a task id can go.
DisplayServerUrlTemplate string `protobuf:"bytes,11,opt,name=display_server_url_template,json=displayServerUrlTemplate,proto3" json:"display_server_url_template,omitempty"`
// Sets a maximum sleep time in seconds for bots that limits the exponental
// backoff. If missing, the task scheduler will provide the default maximum
// (usually 60s, but see bot_code/task_scheduler.py for details).
MaxBotSleepTime int32 `protobuf:"varint,12,opt,name=max_bot_sleep_time,json=maxBotSleepTime,proto3" json:"max_bot_sleep_time,omitempty"`
// Names of the authorization groups used by components/auth.
Auth *AuthSettings `protobuf:"bytes,13,opt,name=auth,proto3" json:"auth,omitempty"`
// Sets the default gRPC proxy for the bot's Isolate server calls.
BotIsolateGrpcProxy string `protobuf:"bytes,14,opt,name=bot_isolate_grpc_proxy,json=botIsolateGrpcProxy,proto3" json:"bot_isolate_grpc_proxy,omitempty"`
// Sets the default gRPC proxy for the bot's Swarming server calls.
BotSwarmingGrpcProxy string `protobuf:"bytes,15,opt,name=bot_swarming_grpc_proxy,json=botSwarmingGrpcProxy,proto3" json:"bot_swarming_grpc_proxy,omitempty"`
// Any extra urls that should be added to frame-src, e.g. anything that
// will be linked to from the display server.
// This originally added things to child-src, which was deprecated:
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/child-src
ExtraChildSrcCspUrl []string `protobuf:"bytes,16,rep,name=extra_child_src_csp_url,json=extraChildSrcCspUrl,proto3" json:"extra_child_src_csp_url,omitempty"`
// Whether tasks should be run in FIFO or LIFO order.
UseLifo bool `protobuf:"varint,17,opt,name=use_lifo,json=useLifo,proto3" json:"use_lifo,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SettingsCfg) Reset() { *m = SettingsCfg{} }
func (m *SettingsCfg) String() string { return proto.CompactTextString(m) }
func (*SettingsCfg) ProtoMessage() {}
func (*SettingsCfg) Descriptor() ([]byte, []int) {
return fileDescriptor_1faffb86b0af733f, []int{0}
}
func (m *SettingsCfg) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SettingsCfg.Unmarshal(m, b)
}
func (m *SettingsCfg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SettingsCfg.Marshal(b, m, deterministic)
}
func (m *SettingsCfg) XXX_Merge(src proto.Message) {
xxx_messageInfo_SettingsCfg.Merge(m, src)
}
func (m *SettingsCfg) XXX_Size() int {
return xxx_messageInfo_SettingsCfg.Size(m)
}
func (m *SettingsCfg) XXX_DiscardUnknown() {
xxx_messageInfo_SettingsCfg.DiscardUnknown(m)
}
var xxx_messageInfo_SettingsCfg proto.InternalMessageInfo
func (m *SettingsCfg) GetGoogleAnalytics() string {
if m != nil {
return m.GoogleAnalytics
}
return ""
}
func (m *SettingsCfg) GetReusableTaskAgeSecs() int32 {
if m != nil {
return m.ReusableTaskAgeSecs
}
return 0
}
func (m *SettingsCfg) GetBotDeathTimeoutSecs() int32 {
if m != nil {
return m.BotDeathTimeoutSecs
}
return 0
}
func (m *SettingsCfg) GetEnableTsMonitoring() bool {
if m != nil {
return m.EnableTsMonitoring
}
return false
}
func (m *SettingsCfg) GetIsolate() *IsolateSettings {
if m != nil {
return m.Isolate
}
return nil
}
func (m *SettingsCfg) GetCipd() *CipdSettings {
if m != nil {
return m.Cipd
}
return nil
}
func (m *SettingsCfg) GetMp() *MachineProviderSettings {
if m != nil {
return m.Mp
}
return nil
}
func (m *SettingsCfg) GetForceBotsToSleepAndNotRunTask() bool {
if m != nil {
return m.ForceBotsToSleepAndNotRunTask
}
return false
}
func (m *SettingsCfg) GetUiClientId() string {
if m != nil {
return m.UiClientId
}
return ""
}
func (m *SettingsCfg) GetDisplayServerUrlTemplate() string {
if m != nil {
return m.DisplayServerUrlTemplate
}
return ""
}
func (m *SettingsCfg) GetMaxBotSleepTime() int32 {
if m != nil {
return m.MaxBotSleepTime
}
return 0
}
func (m *SettingsCfg) GetAuth() *AuthSettings {
if m != nil {
return m.Auth
}
return nil
}
func (m *SettingsCfg) GetBotIsolateGrpcProxy() string {
if m != nil {
return m.BotIsolateGrpcProxy
}
return ""
}
func (m *SettingsCfg) GetBotSwarmingGrpcProxy() string {
if m != nil {
return m.BotSwarmingGrpcProxy
}
return ""
}
func (m *SettingsCfg) GetExtraChildSrcCspUrl() []string {
if m != nil {
return m.ExtraChildSrcCspUrl
}
return nil
}
func (m *SettingsCfg) GetUseLifo() bool {
if m != nil {
return m.UseLifo
}
return false
}
// Configuration for swarming-isolate integration.
type IsolateSettings struct {
// URL of the default isolate server to use if it is not specified in a
// task. Must start with "https://" or "http://",
// e.g. "https://isolateserver.appspot.com"
DefaultServer string `protobuf:"bytes,1,opt,name=default_server,json=defaultServer,proto3" json:"default_server,omitempty"`
// Default namespace to use if it is not specified in a task,
// e.g. "default-gzip"
DefaultNamespace string `protobuf:"bytes,2,opt,name=default_namespace,json=defaultNamespace,proto3" json:"default_namespace,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *IsolateSettings) Reset() { *m = IsolateSettings{} }
func (m *IsolateSettings) String() string { return proto.CompactTextString(m) }
func (*IsolateSettings) ProtoMessage() {}
func (*IsolateSettings) Descriptor() ([]byte, []int) {
return fileDescriptor_1faffb86b0af733f, []int{1}
}
func (m *IsolateSettings) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_IsolateSettings.Unmarshal(m, b)
}
func (m *IsolateSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_IsolateSettings.Marshal(b, m, deterministic)
}
func (m *IsolateSettings) XXX_Merge(src proto.Message) {
xxx_messageInfo_IsolateSettings.Merge(m, src)
}
func (m *IsolateSettings) XXX_Size() int {
return xxx_messageInfo_IsolateSettings.Size(m)
}
func (m *IsolateSettings) XXX_DiscardUnknown() {
xxx_messageInfo_IsolateSettings.DiscardUnknown(m)
}
var xxx_messageInfo_IsolateSettings proto.InternalMessageInfo
func (m *IsolateSettings) GetDefaultServer() string {
if m != nil {
return m.DefaultServer
}
return ""
}
func (m *IsolateSettings) GetDefaultNamespace() string {
if m != nil {
return m.DefaultNamespace
}
return ""
}
// A CIPD package.
type CipdPackage struct {
// A template of a full CIPD package name, e.g.
// "infra/tools/cipd/${platform}"
// See also cipd.ALL_PARAMS.
PackageName string `protobuf:"bytes,1,opt,name=package_name,json=packageName,proto3" json:"package_name,omitempty"`
// Valid package version for all packages matched by package name.
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CipdPackage) Reset() { *m = CipdPackage{} }
func (m *CipdPackage) String() string { return proto.CompactTextString(m) }
func (*CipdPackage) ProtoMessage() {}
func (*CipdPackage) Descriptor() ([]byte, []int) {
return fileDescriptor_1faffb86b0af733f, []int{2}
}
func (m *CipdPackage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CipdPackage.Unmarshal(m, b)
}
func (m *CipdPackage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CipdPackage.Marshal(b, m, deterministic)
}
func (m *CipdPackage) XXX_Merge(src proto.Message) {
xxx_messageInfo_CipdPackage.Merge(m, src)
}
func (m *CipdPackage) XXX_Size() int {
return xxx_messageInfo_CipdPackage.Size(m)
}
func (m *CipdPackage) XXX_DiscardUnknown() {
xxx_messageInfo_CipdPackage.DiscardUnknown(m)
}
var xxx_messageInfo_CipdPackage proto.InternalMessageInfo
func (m *CipdPackage) GetPackageName() string {
if m != nil {
return m.PackageName
}
return ""
}
func (m *CipdPackage) GetVersion() string {
if m != nil {
return m.Version
}
return ""
}
// Settings for Swarming-CIPD integration.
type CipdSettings struct {
// URL of the default CIPD server to use if it is not specified in a task.
// Must start with "https://" or "http://",
// e.g. "https://chrome-infra-packages.appspot.com".
DefaultServer string `protobuf:"bytes,1,opt,name=default_server,json=defaultServer,proto3" json:"default_server,omitempty"`
// Package of the default CIPD client to use if it is not specified in a
// task.
DefaultClientPackage *CipdPackage `protobuf:"bytes,2,opt,name=default_client_package,json=defaultClientPackage,proto3" json:"default_client_package,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CipdSettings) Reset() { *m = CipdSettings{} }
func (m *CipdSettings) String() string { return proto.CompactTextString(m) }
func (*CipdSettings) ProtoMessage() {}
func (*CipdSettings) Descriptor() ([]byte, []int) {
return fileDescriptor_1faffb86b0af733f, []int{3}
}
func (m *CipdSettings) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CipdSettings.Unmarshal(m, b)
}
func (m *CipdSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CipdSettings.Marshal(b, m, deterministic)
}
func (m *CipdSettings) XXX_Merge(src proto.Message) {
xxx_messageInfo_CipdSettings.Merge(m, src)
}
func (m *CipdSettings) XXX_Size() int {
return xxx_messageInfo_CipdSettings.Size(m)
}
func (m *CipdSettings) XXX_DiscardUnknown() {
xxx_messageInfo_CipdSettings.DiscardUnknown(m)
}
var xxx_messageInfo_CipdSettings proto.InternalMessageInfo
func (m *CipdSettings) GetDefaultServer() string {
if m != nil {
return m.DefaultServer
}
return ""
}
func (m *CipdSettings) GetDefaultClientPackage() *CipdPackage {
if m != nil {
return m.DefaultClientPackage
}
return nil
}
// Settings for Swarming-MP integration.
type MachineProviderSettings struct {
// Whether or not Swarming-MP integration is enabled.
Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
// URL of the Machine Provider server to use.
Server string `protobuf:"bytes,2,opt,name=server,proto3" json:"server,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *MachineProviderSettings) Reset() { *m = MachineProviderSettings{} }
func (m *MachineProviderSettings) String() string { return proto.CompactTextString(m) }
func (*MachineProviderSettings) ProtoMessage() {}
func (*MachineProviderSettings) Descriptor() ([]byte, []int) {
return fileDescriptor_1faffb86b0af733f, []int{4}
}
func (m *MachineProviderSettings) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MachineProviderSettings.Unmarshal(m, b)
}
func (m *MachineProviderSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_MachineProviderSettings.Marshal(b, m, deterministic)
}
func (m *MachineProviderSettings) XXX_Merge(src proto.Message) {
xxx_messageInfo_MachineProviderSettings.Merge(m, src)
}
func (m *MachineProviderSettings) XXX_Size() int {
return xxx_messageInfo_MachineProviderSettings.Size(m)
}
func (m *MachineProviderSettings) XXX_DiscardUnknown() {
xxx_messageInfo_MachineProviderSettings.DiscardUnknown(m)
}
var xxx_messageInfo_MachineProviderSettings proto.InternalMessageInfo
func (m *MachineProviderSettings) GetEnabled() bool {
if m != nil {
return m.Enabled
}
return false
}
func (m *MachineProviderSettings) GetServer() string {
if m != nil {
return m.Server
}
return ""
}
type AuthSettings struct {
// Members of this group have full administrative access.
//
// Grants:
// - config view and edit
// - delete any bot
// - all of bot_bootstrap_group membership
// - all of privileged_users_group membership
AdminsGroup string `protobuf:"bytes,1,opt,name=admins_group,json=adminsGroup,proto3" json:"admins_group,omitempty"`
// Members of this group can fetch swarming bot code and bootstrap bots.
//
// Grants:
// - bot create: create a token to anonymously fetch the bot code.
BotBootstrapGroup string `protobuf:"bytes,2,opt,name=bot_bootstrap_group,json=botBootstrapGroup,proto3" json:"bot_bootstrap_group,omitempty"`
// Members of this group can schedule tasks and see everyone else's tasks.
//
// Grants:
// - cancel any task
// - edit (terminate) any bot
// - all of view_all_bots_group membership
// - all of view_all_tasks_group membership
PrivilegedUsersGroup string `protobuf:"bytes,3,opt,name=privileged_users_group,json=privilegedUsersGroup,proto3" json:"privileged_users_group,omitempty"`
// Members of this group can schedule tasks and see only their own tasks.
//
// Grants:
// - create a task
// - view and edit own task
UsersGroup string `protobuf:"bytes,4,opt,name=users_group,json=usersGroup,proto3" json:"users_group,omitempty"`
// Members of this group can view all bots. This is a read-only group.
//
// Grants:
// - view all bots
ViewAllBotsGroup string `protobuf:"bytes,5,opt,name=view_all_bots_group,json=viewAllBotsGroup,proto3" json:"view_all_bots_group,omitempty"`
// Members of this group can view all tasks. This is a read-only group.
//
// Grants:
// - view all tasks
ViewAllTasksGroup string `protobuf:"bytes,6,opt,name=view_all_tasks_group,json=viewAllTasksGroup,proto3" json:"view_all_tasks_group,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *AuthSettings) Reset() { *m = AuthSettings{} }
func (m *AuthSettings) String() string { return proto.CompactTextString(m) }
func (*AuthSettings) ProtoMessage() {}
func (*AuthSettings) Descriptor() ([]byte, []int) {
return fileDescriptor_1faffb86b0af733f, []int{5}
}
func (m *AuthSettings) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AuthSettings.Unmarshal(m, b)
}
func (m *AuthSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_AuthSettings.Marshal(b, m, deterministic)
}
func (m *AuthSettings) XXX_Merge(src proto.Message) {
xxx_messageInfo_AuthSettings.Merge(m, src)
}
func (m *AuthSettings) XXX_Size() int {
return xxx_messageInfo_AuthSettings.Size(m)
}
func (m *AuthSettings) XXX_DiscardUnknown() {
xxx_messageInfo_AuthSettings.DiscardUnknown(m)
}
var xxx_messageInfo_AuthSettings proto.InternalMessageInfo
func (m *AuthSettings) GetAdminsGroup() string {
if m != nil {
return m.AdminsGroup
}
return ""
}
func (m *AuthSettings) GetBotBootstrapGroup() string {
if m != nil {
return m.BotBootstrapGroup
}
return ""
}
func (m *AuthSettings) GetPrivilegedUsersGroup() string {
if m != nil {
return m.PrivilegedUsersGroup
}
return ""
}
func (m *AuthSettings) GetUsersGroup() string {
if m != nil {
return m.UsersGroup
}
return ""
}
func (m *AuthSettings) GetViewAllBotsGroup() string {
if m != nil {
return m.ViewAllBotsGroup
}
return ""
}
func (m *AuthSettings) GetViewAllTasksGroup() string {
if m != nil {
return m.ViewAllTasksGroup
}
return ""
}
func init() {
proto.RegisterType((*SettingsCfg)(nil), "swarming.SettingsCfg")
proto.RegisterType((*IsolateSettings)(nil), "swarming.IsolateSettings")
proto.RegisterType((*CipdPackage)(nil), "swarming.CipdPackage")
proto.RegisterType((*CipdSettings)(nil), "swarming.CipdSettings")
proto.RegisterType((*MachineProviderSettings)(nil), "swarming.MachineProviderSettings")
proto.RegisterType((*AuthSettings)(nil), "swarming.AuthSettings")
}
func init() {
proto.RegisterFile("go.chromium.org/luci/swarming/proto/config/config.proto", fileDescriptor_1faffb86b0af733f)
}
var fileDescriptor_1faffb86b0af733f = []byte{
// 837 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0x4d, 0x6f, 0x1b, 0x37,
0x10, 0x85, 0xfc, 0x21, 0xcb, 0x94, 0x12, 0xdb, 0x8c, 0x2b, 0x6f, 0x50, 0x14, 0x55, 0x84, 0x16,
0x70, 0x1b, 0x54, 0x6a, 0xe3, 0x04, 0x3d, 0x14, 0x3d, 0xc8, 0x2a, 0x10, 0x24, 0x6e, 0x02, 0x43,
0x92, 0x2f, 0xbd, 0x10, 0x5c, 0xee, 0x68, 0x45, 0x98, 0x4b, 0x12, 0x24, 0x57, 0xb1, 0xaf, 0xfd,
0x15, 0xfd, 0x1d, 0xfd, 0x85, 0x05, 0x3f, 0xd6, 0x52, 0x03, 0x04, 0xf0, 0x69, 0xc5, 0x79, 0xef,
0x91, 0xc3, 0x37, 0x33, 0x14, 0xfa, 0xb5, 0x54, 0x23, 0xb6, 0x32, 0xaa, 0xe2, 0x75, 0x35, 0x52,
0xa6, 0x1c, 0x8b, 0x9a, 0xf1, 0xb1, 0xfd, 0x44, 0x4d, 0xc5, 0x65, 0x39, 0xd6, 0x46, 0x39, 0x35,
0x66, 0x4a, 0x2e, 0x79, 0x99, 0x3e, 0xa3, 0x10, 0xc3, 0x9d, 0x86, 0x33, 0xfc, 0xb7, 0x8d, 0xba,
0x73, 0x70, 0x8e, 0xcb, 0xd2, 0x4e, 0x97, 0x25, 0xfe, 0x01, 0x1d, 0x97, 0x4a, 0x95, 0x02, 0x08,
0x95, 0x54, 0xdc, 0x3b, 0xce, 0x6c, 0xd6, 0x1a, 0xb4, 0xce, 0x0f, 0x67, 0x47, 0x31, 0x3e, 0x69,
0xc2, 0xf8, 0x02, 0xf5, 0x0d, 0xd4, 0x96, 0xe6, 0x02, 0x88, 0xa3, 0xf6, 0x96, 0xd0, 0x12, 0x88,
0x05, 0x66, 0xb3, 0x9d, 0x41, 0xeb, 0x7c, 0x7f, 0xf6, 0xac, 0x41, 0x17, 0xd4, 0xde, 0x4e, 0x4a,
0x98, 0x43, 0x14, 0xe5, 0xca, 0x91, 0x02, 0xa8, 0x5b, 0x11, 0xc7, 0x2b, 0x50, 0xb5, 0x8b, 0xa2,
0xdd, 0x28, 0xca, 0x95, 0xfb, 0xc3, 0x83, 0x8b, 0x88, 0x05, 0xd1, 0xcf, 0xe8, 0x14, 0x64, 0x3c,
0xc7, 0x92, 0x4a, 0x49, 0xee, 0x94, 0xe1, 0xb2, 0xcc, 0xf6, 0x06, 0xad, 0xf3, 0xce, 0x0c, 0x47,
0x6c, 0x61, 0x3f, 0x3c, 0x20, 0xf8, 0x02, 0x1d, 0x70, 0xab, 0x04, 0x75, 0x90, 0xed, 0x0f, 0x5a,
0xe7, 0xdd, 0x57, 0xcf, 0x47, 0xcd, 0x95, 0x47, 0xef, 0x22, 0xd0, 0xdc, 0x7a, 0xd6, 0x30, 0xf1,
0x8f, 0x68, 0x8f, 0x71, 0x5d, 0x64, 0xed, 0xa0, 0xe8, 0x6f, 0x14, 0x53, 0xae, 0x8b, 0x07, 0x7a,
0xe0, 0xe0, 0x5f, 0xd0, 0x4e, 0xa5, 0xb3, 0x83, 0xc0, 0x7c, 0xb1, 0x61, 0x7e, 0xa0, 0x6c, 0xc5,
0x25, 0x5c, 0x1b, 0xb5, 0xe6, 0x05, 0x98, 0x07, 0xd1, 0x4e, 0xa5, 0xf1, 0x15, 0xfa, 0x6e, 0xa9,
0x0c, 0x03, 0x92, 0x2b, 0x67, 0x89, 0x53, 0xc4, 0x0a, 0x00, 0x4d, 0xa8, 0x2c, 0x88, 0x54, 0x8e,
0x98, 0x5a, 0x06, 0x1b, 0xb3, 0x4e, 0xb8, 0xd5, 0x37, 0x81, 0x7b, 0xa9, 0x9c, 0x5d, 0xa8, 0xb9,
0x27, 0x4e, 0x64, 0xf1, 0x51, 0xb9, 0x59, 0x2d, 0xbd, 0x9d, 0x78, 0x80, 0x7a, 0x35, 0x27, 0x4c,
0x70, 0x90, 0x8e, 0xf0, 0x22, 0x3b, 0x0c, 0x35, 0x42, 0x35, 0x9f, 0x86, 0xd0, 0xbb, 0x02, 0xff,
0x8e, 0xbe, 0x2e, 0xb8, 0xd5, 0x82, 0xde, 0x13, 0x0b, 0x66, 0x0d, 0x86, 0xd4, 0x46, 0x10, 0x07,
0x95, 0x0e, 0xb6, 0x74, 0x83, 0x20, 0x4b, 0x94, 0x79, 0x60, 0xdc, 0x18, 0xb1, 0x48, 0x38, 0x7e,
0x89, 0x70, 0x45, 0xef, 0x7c, 0xae, 0x29, 0x4f, 0x5f, 0xac, 0xac, 0x17, 0x8a, 0x74, 0x54, 0xd1,
0xbb, 0x4b, 0xe5, 0x42, 0x5a, 0xbe, 0x4e, 0xde, 0x39, 0x5a, 0xbb, 0x55, 0xf6, 0xe4, 0x73, 0xe7,
0x26, 0xb5, 0x5b, 0x6d, 0x9c, 0xf3, 0x9c, 0xa6, 0x03, 0x92, 0xe9, 0xa4, 0x34, 0x9a, 0x11, 0x6d,
0xd4, 0xdd, 0x7d, 0xf6, 0x34, 0xa4, 0xe4, 0x3b, 0x20, 0x95, 0xe8, 0xad, 0xd1, 0xec, 0xda, 0x43,
0xf8, 0x0d, 0x3a, 0x0b, 0x99, 0xa4, 0x7d, 0xb7, 0x55, 0x47, 0x41, 0x75, 0x9a, 0x2b, 0x37, 0x4f,
0xe8, 0x46, 0xf6, 0x1a, 0x9d, 0xc1, 0x9d, 0x33, 0x94, 0xb0, 0x15, 0x17, 0x05, 0xb1, 0x86, 0x11,
0x66, 0xb5, 0x37, 0x22, 0x3b, 0x1e, 0xec, 0xfa, 0xc3, 0x02, 0x3c, 0xf5, 0xe8, 0xdc, 0xb0, 0xa9,
0xd5, 0x37, 0x46, 0xe0, 0xe7, 0xa8, 0x53, 0x5b, 0x20, 0x82, 0x2f, 0x55, 0x76, 0x12, 0x8a, 0x71,
0x50, 0x5b, 0xf8, 0x93, 0x2f, 0xd5, 0xfb, 0xbd, 0x0e, 0x3a, 0xee, 0x0e, 0x01, 0x1d, 0x7d, 0xd6,
0x44, 0xf8, 0x7b, 0xf4, 0xb4, 0x80, 0x25, 0xad, 0x85, 0x4b, 0x6e, 0xa7, 0xa9, 0x79, 0x92, 0xa2,
0xd1, 0x60, 0xfc, 0x12, 0x9d, 0x34, 0x34, 0x49, 0x2b, 0xb0, 0x9a, 0x32, 0x08, 0xe3, 0x72, 0x38,
0x3b, 0x4e, 0xc0, 0xc7, 0x26, 0x3e, 0x7c, 0x8f, 0xba, 0xbe, 0xf3, 0xae, 0x29, 0xbb, 0xa5, 0x25,
0xe0, 0x17, 0xa8, 0xa7, 0xe3, 0xcf, 0xa0, 0x4d, 0x07, 0x74, 0x53, 0xcc, 0xcb, 0x70, 0x86, 0x0e,
0xd6, 0x60, 0x2c, 0x57, 0x32, 0x6d, 0xda, 0x2c, 0x87, 0x7f, 0xb7, 0x50, 0x6f, 0xbb, 0x8d, 0x1f,
0x9b, 0xf0, 0x15, 0xea, 0x37, 0xb4, 0xd4, 0x6c, 0xe9, 0xbc, 0x70, 0x40, 0xf7, 0xd5, 0x57, 0xff,
0x9f, 0x92, 0x94, 0xeb, 0xec, 0x34, 0x89, 0x62, 0x37, 0xa6, 0xe8, 0xf0, 0x0a, 0x9d, 0x7d, 0x61,
0x40, 0x7c, 0xe6, 0x71, 0x8c, 0x8b, 0x90, 0x47, 0x67, 0xd6, 0x2c, 0x71, 0x1f, 0xb5, 0x53, 0x82,
0xf1, 0x4a, 0x69, 0x35, 0xfc, 0x67, 0x07, 0xf5, 0xb6, 0xdb, 0xcb, 0xfb, 0x43, 0x8b, 0x8a, 0x4b,
0x4b, 0x4a, 0xa3, 0x6a, 0xdd, 0xf8, 0x13, 0x63, 0x6f, 0x7d, 0x08, 0x8f, 0x90, 0xef, 0x2e, 0x92,
0x2b, 0xe5, 0xac, 0x33, 0x54, 0x27, 0x66, 0xdc, 0xf8, 0x24, 0x57, 0xee, 0xb2, 0x41, 0x22, 0xff,
0x35, 0xea, 0x6b, 0xc3, 0xd7, 0x5c, 0x40, 0x09, 0x05, 0xa9, 0x2d, 0x98, 0x66, 0xf3, 0xdd, 0xd8,
0x75, 0x1b, 0xf4, 0xc6, 0x83, 0x51, 0xf5, 0x2d, 0xea, 0x6e, 0x53, 0xf7, 0xd2, 0x68, 0x6e, 0x08,
0x3f, 0xa1, 0x67, 0x6b, 0x0e, 0x9f, 0x08, 0x15, 0x22, 0x3e, 0x06, 0x91, 0xb8, 0x1f, 0xfb, 0xc0,
0x43, 0x13, 0x21, 0xfc, 0xe8, 0x47, 0xfa, 0x18, 0x9d, 0x3e, 0xd0, 0xfd, 0x0b, 0xd1, 0xf0, 0xdb,
0x31, 0xed, 0xc4, 0xf7, 0xcf, 0x42, 0x14, 0x5c, 0xbe, 0xf9, 0xeb, 0xe2, 0xf1, 0xff, 0x0c, 0xbf,
0xc5, 0x8f, 0xce, 0xf3, 0x76, 0x08, 0x5f, 0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0xa1, 0x38, 0x52,
0xd5, 0x57, 0x06, 0x00, 0x00,
}