// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/ads/googleads/v3/resources/conversion_action.proto

package resources

import (
	fmt "fmt"
	math "math"

	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
	_ "google.golang.org/genproto/googleapis/api/annotations"
)

// 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

// A conversion action.
type ConversionAction struct {
	// The resource name of the conversion action.
	// Conversion action resource names have the form:
	//
	// `customers/{customer_id}/conversionActions/{conversion_action_id}`
	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
	// The ID of the conversion action.
	Id *wrappers.Int64Value `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
	// The name of the conversion action.
	//
	// This field is required and should not be empty when creating new
	// conversion actions.
	Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
	// The status of this conversion action for conversion event accrual.
	Status enums.ConversionActionStatusEnum_ConversionActionStatus `protobuf:"varint,4,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.ConversionActionStatusEnum_ConversionActionStatus" json:"status,omitempty"`
	// The type of this conversion action.
	Type enums.ConversionActionTypeEnum_ConversionActionType `protobuf:"varint,5,opt,name=type,proto3,enum=google.ads.googleads.v3.enums.ConversionActionTypeEnum_ConversionActionType" json:"type,omitempty"`
	// The category of conversions reported for this conversion action.
	Category enums.ConversionActionCategoryEnum_ConversionActionCategory `protobuf:"varint,6,opt,name=category,proto3,enum=google.ads.googleads.v3.enums.ConversionActionCategoryEnum_ConversionActionCategory" json:"category,omitempty"`
	// The resource name of the conversion action owner customer, or null if this
	// is a system-defined conversion action.
	OwnerCustomer *wrappers.StringValue `protobuf:"bytes,7,opt,name=owner_customer,json=ownerCustomer,proto3" json:"owner_customer,omitempty"`
	// Whether this conversion action should be included in the "conversions"
	// metric.
	IncludeInConversionsMetric *wrappers.BoolValue `protobuf:"bytes,8,opt,name=include_in_conversions_metric,json=includeInConversionsMetric,proto3" json:"include_in_conversions_metric,omitempty"`
	// The maximum number of days that may elapse between an interaction
	// (e.g., a click) and a conversion event.
	ClickThroughLookbackWindowDays *wrappers.Int64Value `protobuf:"bytes,9,opt,name=click_through_lookback_window_days,json=clickThroughLookbackWindowDays,proto3" json:"click_through_lookback_window_days,omitempty"`
	// The maximum number of days which may elapse between an impression and a
	// conversion without an interaction.
	ViewThroughLookbackWindowDays *wrappers.Int64Value `protobuf:"bytes,10,opt,name=view_through_lookback_window_days,json=viewThroughLookbackWindowDays,proto3" json:"view_through_lookback_window_days,omitempty"`
	// Settings related to the value for conversion events associated with this
	// conversion action.
	ValueSettings *ConversionAction_ValueSettings `protobuf:"bytes,11,opt,name=value_settings,json=valueSettings,proto3" json:"value_settings,omitempty"`
	// How to count conversion events for the conversion action.
	CountingType enums.ConversionActionCountingTypeEnum_ConversionActionCountingType `protobuf:"varint,12,opt,name=counting_type,json=countingType,proto3,enum=google.ads.googleads.v3.enums.ConversionActionCountingTypeEnum_ConversionActionCountingType" json:"counting_type,omitempty"`
	// Settings related to this conversion action's attribution model.
	AttributionModelSettings *ConversionAction_AttributionModelSettings `protobuf:"bytes,13,opt,name=attribution_model_settings,json=attributionModelSettings,proto3" json:"attribution_model_settings,omitempty"`
	// The snippets used for tracking conversions.
	TagSnippets []*common.TagSnippet `protobuf:"bytes,14,rep,name=tag_snippets,json=tagSnippets,proto3" json:"tag_snippets,omitempty"`
	// The phone call duration in seconds after which a conversion should be
	// reported for this conversion action.
	//
	// The value must be between 0 and 10000, inclusive.
	PhoneCallDurationSeconds *wrappers.Int64Value `protobuf:"bytes,15,opt,name=phone_call_duration_seconds,json=phoneCallDurationSeconds,proto3" json:"phone_call_duration_seconds,omitempty"`
	// App ID for an app conversion action.
	AppId                *wrappers.StringValue `protobuf:"bytes,16,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

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

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

var xxx_messageInfo_ConversionAction proto.InternalMessageInfo

func (m *ConversionAction) GetResourceName() string {
	if m != nil {
		return m.ResourceName
	}
	return ""
}

func (m *ConversionAction) GetId() *wrappers.Int64Value {
	if m != nil {
		return m.Id
	}
	return nil
}

func (m *ConversionAction) GetName() *wrappers.StringValue {
	if m != nil {
		return m.Name
	}
	return nil
}

func (m *ConversionAction) GetStatus() enums.ConversionActionStatusEnum_ConversionActionStatus {
	if m != nil {
		return m.Status
	}
	return enums.ConversionActionStatusEnum_UNSPECIFIED
}

func (m *ConversionAction) GetType() enums.ConversionActionTypeEnum_ConversionActionType {
	if m != nil {
		return m.Type
	}
	return enums.ConversionActionTypeEnum_UNSPECIFIED
}

func (m *ConversionAction) GetCategory() enums.ConversionActionCategoryEnum_ConversionActionCategory {
	if m != nil {
		return m.Category
	}
	return enums.ConversionActionCategoryEnum_UNSPECIFIED
}

func (m *ConversionAction) GetOwnerCustomer() *wrappers.StringValue {
	if m != nil {
		return m.OwnerCustomer
	}
	return nil
}

func (m *ConversionAction) GetIncludeInConversionsMetric() *wrappers.BoolValue {
	if m != nil {
		return m.IncludeInConversionsMetric
	}
	return nil
}

func (m *ConversionAction) GetClickThroughLookbackWindowDays() *wrappers.Int64Value {
	if m != nil {
		return m.ClickThroughLookbackWindowDays
	}
	return nil
}

func (m *ConversionAction) GetViewThroughLookbackWindowDays() *wrappers.Int64Value {
	if m != nil {
		return m.ViewThroughLookbackWindowDays
	}
	return nil
}

func (m *ConversionAction) GetValueSettings() *ConversionAction_ValueSettings {
	if m != nil {
		return m.ValueSettings
	}
	return nil
}

func (m *ConversionAction) GetCountingType() enums.ConversionActionCountingTypeEnum_ConversionActionCountingType {
	if m != nil {
		return m.CountingType
	}
	return enums.ConversionActionCountingTypeEnum_UNSPECIFIED
}

func (m *ConversionAction) GetAttributionModelSettings() *ConversionAction_AttributionModelSettings {
	if m != nil {
		return m.AttributionModelSettings
	}
	return nil
}

func (m *ConversionAction) GetTagSnippets() []*common.TagSnippet {
	if m != nil {
		return m.TagSnippets
	}
	return nil
}

func (m *ConversionAction) GetPhoneCallDurationSeconds() *wrappers.Int64Value {
	if m != nil {
		return m.PhoneCallDurationSeconds
	}
	return nil
}

func (m *ConversionAction) GetAppId() *wrappers.StringValue {
	if m != nil {
		return m.AppId
	}
	return nil
}

// Settings related to this conversion action's attribution model.
type ConversionAction_AttributionModelSettings struct {
	// The attribution model type of this conversion action.
	AttributionModel enums.AttributionModelEnum_AttributionModel `protobuf:"varint,1,opt,name=attribution_model,json=attributionModel,proto3,enum=google.ads.googleads.v3.enums.AttributionModelEnum_AttributionModel" json:"attribution_model,omitempty"`
	// The status of the data-driven attribution model for the conversion
	// action.
	DataDrivenModelStatus enums.DataDrivenModelStatusEnum_DataDrivenModelStatus `protobuf:"varint,2,opt,name=data_driven_model_status,json=dataDrivenModelStatus,proto3,enum=google.ads.googleads.v3.enums.DataDrivenModelStatusEnum_DataDrivenModelStatus" json:"data_driven_model_status,omitempty"`
	XXX_NoUnkeyedLiteral  struct{}                                              `json:"-"`
	XXX_unrecognized      []byte                                                `json:"-"`
	XXX_sizecache         int32                                                 `json:"-"`
}

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

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

var xxx_messageInfo_ConversionAction_AttributionModelSettings proto.InternalMessageInfo

func (m *ConversionAction_AttributionModelSettings) GetAttributionModel() enums.AttributionModelEnum_AttributionModel {
	if m != nil {
		return m.AttributionModel
	}
	return enums.AttributionModelEnum_UNSPECIFIED
}

func (m *ConversionAction_AttributionModelSettings) GetDataDrivenModelStatus() enums.DataDrivenModelStatusEnum_DataDrivenModelStatus {
	if m != nil {
		return m.DataDrivenModelStatus
	}
	return enums.DataDrivenModelStatusEnum_UNSPECIFIED
}

// Settings related to the value for conversion events associated with this
// conversion action.
type ConversionAction_ValueSettings struct {
	// The value to use when conversion events for this conversion action are
	// sent with an invalid, disallowed or missing value, or when
	// this conversion action is configured to always use the default value.
	DefaultValue *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"`
	// The currency code to use when conversion events for this conversion
	// action are sent with an invalid or missing currency code, or when this
	// conversion action is configured to always use the default value.
	DefaultCurrencyCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=default_currency_code,json=defaultCurrencyCode,proto3" json:"default_currency_code,omitempty"`
	// Controls whether the default value and default currency code are used in
	// place of the value and currency code specified in conversion events for
	// this conversion action.
	AlwaysUseDefaultValue *wrappers.BoolValue `protobuf:"bytes,3,opt,name=always_use_default_value,json=alwaysUseDefaultValue,proto3" json:"always_use_default_value,omitempty"`
	XXX_NoUnkeyedLiteral  struct{}            `json:"-"`
	XXX_unrecognized      []byte              `json:"-"`
	XXX_sizecache         int32               `json:"-"`
}

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

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

var xxx_messageInfo_ConversionAction_ValueSettings proto.InternalMessageInfo

func (m *ConversionAction_ValueSettings) GetDefaultValue() *wrappers.DoubleValue {
	if m != nil {
		return m.DefaultValue
	}
	return nil
}

func (m *ConversionAction_ValueSettings) GetDefaultCurrencyCode() *wrappers.StringValue {
	if m != nil {
		return m.DefaultCurrencyCode
	}
	return nil
}

func (m *ConversionAction_ValueSettings) GetAlwaysUseDefaultValue() *wrappers.BoolValue {
	if m != nil {
		return m.AlwaysUseDefaultValue
	}
	return nil
}

func init() {
	proto.RegisterType((*ConversionAction)(nil), "google.ads.googleads.v3.resources.ConversionAction")
	proto.RegisterType((*ConversionAction_AttributionModelSettings)(nil), "google.ads.googleads.v3.resources.ConversionAction.AttributionModelSettings")
	proto.RegisterType((*ConversionAction_ValueSettings)(nil), "google.ads.googleads.v3.resources.ConversionAction.ValueSettings")
}

func init() {
	proto.RegisterFile("google/ads/googleads/v3/resources/conversion_action.proto", fileDescriptor_be3d6bc96d205b0d)
}

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