/* objects_paramspec.c generated by valac, the Vala compiler
 * generated from objects_paramspec.vala, do not modify */

#include <glib-object.h>
#include <glib.h>
#include <string.h>
#include <float.h>
#include <math.h>

#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif
#if !defined(VALA_EXTERN)
#if defined(_MSC_VER)
#define VALA_EXTERN __declspec(dllexport) extern
#elif __GNUC__ >= 4
#define VALA_EXTERN __attribute__((visibility("default"))) extern
#else
#define VALA_EXTERN extern
#endif
#endif

typedef enum  {
	FOO_ENUM_FOO = 0,
	FOO_ENUM_BAR = 42
} FooEnum;

#define TYPE_FOO_ENUM (foo_enum_get_type ())
typedef enum  {
	FOO_FLAG_FOO = 0,
	FOO_FLAG_BAR = 23
} FooFlag;

#define TYPE_FOO_FLAG (foo_flag_get_type ())

#define TYPE_FOO_STRUCT (foo_struct_get_type ())
typedef struct _FooStruct FooStruct;

#define TYPE_FOO (foo_get_type ())
#define FOO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_FOO, Foo))
#define FOO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_FOO, FooClass))
#define IS_FOO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_FOO))
#define IS_FOO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_FOO))
#define FOO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_FOO, FooClass))

typedef struct _Foo Foo;
typedef struct _FooClass FooClass;
typedef struct _FooPrivate FooPrivate;
enum  {
	FOO_0_PROPERTY,
	FOO_BOOL_PROP_PROPERTY,
	FOO_BOOL_PROP2_PROPERTY,
	FOO_CHAR_PROP_PROPERTY,
	FOO_CHAR_PROP2_PROPERTY,
	FOO_DOUBLE_PROP_PROPERTY,
	FOO_DOUBLE_PROP2_PROPERTY,
	FOO_ENUM_PROP_PROPERTY,
	FOO_ENUM_PROP2_PROPERTY,
	FOO_FLAG_PROP_PROPERTY,
	FOO_FLAG_PROP2_PROPERTY,
	FOO_FLOAT_PROP_PROPERTY,
	FOO_FLOAT_PROP2_PROPERTY,
	FOO_INT_PROP_PROPERTY,
	FOO_INT_PROP2_PROPERTY,
	FOO_INT64_PROP_PROPERTY,
	FOO_INT64_PROP2_PROPERTY,
	FOO_LONG_PROP_PROPERTY,
	FOO_LONG_PROP2_PROPERTY,
	FOO_OBJECT_PROP_PROPERTY,
	FOO_PARAM_PROP_PROPERTY,
	FOO_POINTER_PROP_PROPERTY,
	FOO_STRING_PROP_PROPERTY,
	FOO_STRING_PROP2_PROPERTY,
	FOO_UCHAR_PROP_PROPERTY,
	FOO_UCHAR_PROP2_PROPERTY,
	FOO_UINT_PROP_PROPERTY,
	FOO_UINT_PROP2_PROPERTY,
	FOO_UINT64_PROP_PROPERTY,
	FOO_UINT64_PROP2_PROPERTY,
	FOO_ULONG_PROP_PROPERTY,
	FOO_ULONG_PROP2_PROPERTY,
	FOO_UNICHAR_PROP_PROPERTY,
	FOO_GTYPE_PROP_PROPERTY,
	FOO_GTYPE_PROP2_PROPERTY,
	FOO_VARIANT_PROP_PROPERTY,
	FOO_VARIANT_PROP2_PROPERTY,
	FOO_STRUCT_PROP_PROPERTY,
	FOO_STRUCT_PROP2_PROPERTY,
	FOO_STRV_PROP_PROPERTY,
	FOO_STRV_PROP2_PROPERTY,
	FOO_NUM_PROPERTIES
};
static GParamSpec* foo_properties[FOO_NUM_PROPERTIES];
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _g_param_spec_unref0(var) ((var == NULL) ? NULL : (var = (g_param_spec_unref (var), NULL)))
#define _g_free0(var) (var = (g_free (var), NULL))
#define _g_variant_unref0(var) ((var == NULL) ? NULL : (var = (g_variant_unref (var), NULL)))
#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);

struct _FooStruct {
	gint i;
};

struct _Foo {
	GObject parent_instance;
	FooPrivate * priv;
};

struct _FooClass {
	GObjectClass parent_class;
};

struct _FooPrivate {
	gboolean _bool_prop;
	gboolean _bool_prop2;
	gchar _char_prop;
	gchar _char_prop2;
	gdouble _double_prop;
	gdouble _double_prop2;
	FooEnum _enum_prop;
	FooEnum _enum_prop2;
	FooFlag _flag_prop;
	FooFlag _flag_prop2;
	gfloat _float_prop;
	gfloat _float_prop2;
	gint _int_prop;
	gint _int_prop2;
	gint64 _int64_prop;
	gint64 _int64_prop2;
	glong _long_prop;
	glong _long_prop2;
	GObject* _object_prop;
	GParamSpec* _param_prop;
	void* _pointer_prop;
	gchar* _string_prop;
	gchar* _string_prop2;
	guchar _uchar_prop;
	guchar _uchar_prop2;
	guint _uint_prop;
	guint _uint_prop2;
	guint64 _uint64_prop;
	guint64 _uint64_prop2;
	gulong _ulong_prop;
	gulong _ulong_prop2;
	gunichar _unichar_prop;
	GType _gtype_prop;
	GType _gtype_prop2;
	GVariant* _variant_prop;
	GVariant* _variant_prop2;
	FooStruct _struct_prop;
	FooStruct _struct_prop2;
	gchar** _strv_prop;
	gint _strv_prop_length1;
	gint __strv_prop_size_;
	gchar** _strv_prop2;
	gint _strv_prop2_length1;
	gint __strv_prop2_size_;
};

static gint Foo_private_offset;
static gpointer foo_parent_class = NULL;

VALA_EXTERN GType foo_enum_get_type (void) G_GNUC_CONST ;
VALA_EXTERN GType foo_flag_get_type (void) G_GNUC_CONST ;
VALA_EXTERN GType foo_struct_get_type (void) G_GNUC_CONST ;
VALA_EXTERN FooStruct* foo_struct_dup (const FooStruct* self);
VALA_EXTERN void foo_struct_free (FooStruct* self);
VALA_EXTERN GType foo_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (Foo, g_object_unref)
VALA_EXTERN Foo* foo_new (void);
VALA_EXTERN Foo* foo_construct (GType object_type);
VALA_EXTERN gboolean foo_get_bool_prop (Foo* self);
VALA_EXTERN void foo_set_bool_prop (Foo* self,
                        gboolean value);
VALA_EXTERN gboolean foo_get_bool_prop2 (Foo* self);
VALA_EXTERN void foo_set_bool_prop2 (Foo* self,
                         gboolean value);
VALA_EXTERN gchar foo_get_char_prop (Foo* self);
VALA_EXTERN void foo_set_char_prop (Foo* self,
                        gchar value);
VALA_EXTERN gchar foo_get_char_prop2 (Foo* self);
VALA_EXTERN void foo_set_char_prop2 (Foo* self,
                         gchar value);
VALA_EXTERN gdouble foo_get_double_prop (Foo* self);
VALA_EXTERN void foo_set_double_prop (Foo* self,
                          gdouble value);
VALA_EXTERN gdouble foo_get_double_prop2 (Foo* self);
VALA_EXTERN void foo_set_double_prop2 (Foo* self,
                           gdouble value);
VALA_EXTERN FooEnum foo_get_enum_prop (Foo* self);
VALA_EXTERN void foo_set_enum_prop (Foo* self,
                        FooEnum value);
VALA_EXTERN FooEnum foo_get_enum_prop2 (Foo* self);
VALA_EXTERN void foo_set_enum_prop2 (Foo* self,
                         FooEnum value);
VALA_EXTERN FooFlag foo_get_flag_prop (Foo* self);
VALA_EXTERN void foo_set_flag_prop (Foo* self,
                        FooFlag value);
VALA_EXTERN FooFlag foo_get_flag_prop2 (Foo* self);
VALA_EXTERN void foo_set_flag_prop2 (Foo* self,
                         FooFlag value);
VALA_EXTERN gfloat foo_get_float_prop (Foo* self);
VALA_EXTERN void foo_set_float_prop (Foo* self,
                         gfloat value);
VALA_EXTERN gfloat foo_get_float_prop2 (Foo* self);
VALA_EXTERN void foo_set_float_prop2 (Foo* self,
                          gfloat value);
VALA_EXTERN gint foo_get_int_prop (Foo* self);
VALA_EXTERN void foo_set_int_prop (Foo* self,
                       gint value);
VALA_EXTERN gint foo_get_int_prop2 (Foo* self);
VALA_EXTERN void foo_set_int_prop2 (Foo* self,
                        gint value);
VALA_EXTERN gint64 foo_get_int64_prop (Foo* self);
VALA_EXTERN void foo_set_int64_prop (Foo* self,
                         gint64 value);
VALA_EXTERN gint64 foo_get_int64_prop2 (Foo* self);
VALA_EXTERN void foo_set_int64_prop2 (Foo* self,
                          gint64 value);
VALA_EXTERN glong foo_get_long_prop (Foo* self);
VALA_EXTERN void foo_set_long_prop (Foo* self,
                        glong value);
VALA_EXTERN glong foo_get_long_prop2 (Foo* self);
VALA_EXTERN void foo_set_long_prop2 (Foo* self,
                         glong value);
VALA_EXTERN GObject* foo_get_object_prop (Foo* self);
VALA_EXTERN void foo_set_object_prop (Foo* self,
                          GObject* value);
VALA_EXTERN GParamSpec* foo_get_param_prop (Foo* self);
VALA_EXTERN void foo_set_param_prop (Foo* self,
                         GParamSpec* value);
VALA_EXTERN void* foo_get_pointer_prop (Foo* self);
VALA_EXTERN void foo_set_pointer_prop (Foo* self,
                           void* value);
VALA_EXTERN const gchar* foo_get_string_prop (Foo* self);
VALA_EXTERN void foo_set_string_prop (Foo* self,
                          const gchar* value);
VALA_EXTERN const gchar* foo_get_string_prop2 (Foo* self);
VALA_EXTERN void foo_set_string_prop2 (Foo* self,
                           const gchar* value);
VALA_EXTERN guchar foo_get_uchar_prop (Foo* self);
VALA_EXTERN void foo_set_uchar_prop (Foo* self,
                         guchar value);
VALA_EXTERN guchar foo_get_uchar_prop2 (Foo* self);
VALA_EXTERN void foo_set_uchar_prop2 (Foo* self,
                          guchar value);
VALA_EXTERN guint foo_get_uint_prop (Foo* self);
VALA_EXTERN void foo_set_uint_prop (Foo* self,
                        guint value);
VALA_EXTERN guint foo_get_uint_prop2 (Foo* self);
VALA_EXTERN void foo_set_uint_prop2 (Foo* self,
                         guint value);
VALA_EXTERN guint64 foo_get_uint64_prop (Foo* self);
VALA_EXTERN void foo_set_uint64_prop (Foo* self,
                          guint64 value);
VALA_EXTERN guint64 foo_get_uint64_prop2 (Foo* self);
VALA_EXTERN void foo_set_uint64_prop2 (Foo* self,
                           guint64 value);
VALA_EXTERN gulong foo_get_ulong_prop (Foo* self);
VALA_EXTERN void foo_set_ulong_prop (Foo* self,
                         gulong value);
VALA_EXTERN gulong foo_get_ulong_prop2 (Foo* self);
VALA_EXTERN void foo_set_ulong_prop2 (Foo* self,
                          gulong value);
VALA_EXTERN gunichar foo_get_unichar_prop (Foo* self);
VALA_EXTERN void foo_set_unichar_prop (Foo* self,
                           gunichar value);
VALA_EXTERN GType foo_get_gtype_prop (Foo* self);
VALA_EXTERN void foo_set_gtype_prop (Foo* self,
                         GType value);
VALA_EXTERN GType foo_get_gtype_prop2 (Foo* self);
VALA_EXTERN void foo_set_gtype_prop2 (Foo* self,
                          GType value);
VALA_EXTERN GVariant* foo_get_variant_prop (Foo* self);
VALA_EXTERN void foo_set_variant_prop (Foo* self,
                           GVariant* value);
VALA_EXTERN GVariant* foo_get_variant_prop2 (Foo* self);
VALA_EXTERN void foo_set_variant_prop2 (Foo* self,
                            GVariant* value);
VALA_EXTERN void foo_get_struct_prop (Foo* self,
                          FooStruct * result);
VALA_EXTERN void foo_set_struct_prop (Foo* self,
                          FooStruct * value);
static gboolean _foo_struct_equal (const FooStruct * s1,
                            const FooStruct * s2);
VALA_EXTERN void foo_get_struct_prop2 (Foo* self,
                           FooStruct * result);
VALA_EXTERN void foo_set_struct_prop2 (Foo* self,
                           FooStruct * value);
VALA_EXTERN gchar** foo_get_strv_prop (Foo* self,
                           gint* result_length1);
VALA_EXTERN void foo_set_strv_prop (Foo* self,
                        gchar** value,
                        gint value_length1);
static gchar** _vala_array_dup1 (gchar** self,
                          gssize length);
VALA_EXTERN gchar** foo_get_strv_prop2 (Foo* self,
                            gint* result_length1);
VALA_EXTERN void foo_set_strv_prop2 (Foo* self,
                         gchar** value,
                         gint value_length1);
static gchar** _vala_array_dup2 (gchar** self,
                          gssize length);
static void foo_finalize (GObject * obj);
static GType foo_get_type_once (void);
static void _vala_foo_get_property (GObject * object,
                             guint property_id,
                             GValue * value,
                             GParamSpec * pspec);
static void _vala_foo_set_property (GObject * object,
                             guint property_id,
                             const GValue * value,
                             GParamSpec * pspec);
static void _vala_main (void);
static void _vala_array_destroy (gpointer array,
                          gssize array_length,
                          GDestroyNotify destroy_func);
static void _vala_array_free (gpointer array,
                       gssize array_length,
                       GDestroyNotify destroy_func);

static GType
foo_enum_get_type_once (void)
{
	static const GEnumValue values[] = {{FOO_ENUM_FOO, "FOO_ENUM_FOO", "foo"}, {FOO_ENUM_BAR, "FOO_ENUM_BAR", "bar"}, {0, NULL, NULL}};
	GType foo_enum_type_id;
	foo_enum_type_id = g_enum_register_static ("FooEnum", values);
	return foo_enum_type_id;
}

GType
foo_enum_get_type (void)
{
	static volatile gsize foo_enum_type_id__once = 0;
	if (g_once_init_enter (&foo_enum_type_id__once)) {
		GType foo_enum_type_id;
		foo_enum_type_id = foo_enum_get_type_once ();
		g_once_init_leave (&foo_enum_type_id__once, foo_enum_type_id);
	}
	return foo_enum_type_id__once;
}

static GType
foo_flag_get_type_once (void)
{
	static const GFlagsValue values[] = {{FOO_FLAG_FOO, "FOO_FLAG_FOO", "foo"}, {FOO_FLAG_BAR, "FOO_FLAG_BAR", "bar"}, {0, NULL, NULL}};
	GType foo_flag_type_id;
	foo_flag_type_id = g_flags_register_static ("FooFlag", values);
	return foo_flag_type_id;
}

GType
foo_flag_get_type (void)
{
	static volatile gsize foo_flag_type_id__once = 0;
	if (g_once_init_enter (&foo_flag_type_id__once)) {
		GType foo_flag_type_id;
		foo_flag_type_id = foo_flag_get_type_once ();
		g_once_init_leave (&foo_flag_type_id__once, foo_flag_type_id);
	}
	return foo_flag_type_id__once;
}

FooStruct*
foo_struct_dup (const FooStruct* self)
{
	FooStruct* dup;
	dup = g_new0 (FooStruct, 1);
	memcpy (dup, self, sizeof (FooStruct));
	return dup;
}

void
foo_struct_free (FooStruct* self)
{
	g_free (self);
}

static GType
foo_struct_get_type_once (void)
{
	GType foo_struct_type_id;
	foo_struct_type_id = g_boxed_type_register_static ("FooStruct", (GBoxedCopyFunc) foo_struct_dup, (GBoxedFreeFunc) foo_struct_free);
	return foo_struct_type_id;
}

GType
foo_struct_get_type (void)
{
	static volatile gsize foo_struct_type_id__once = 0;
	if (g_once_init_enter (&foo_struct_type_id__once)) {
		GType foo_struct_type_id;
		foo_struct_type_id = foo_struct_get_type_once ();
		g_once_init_leave (&foo_struct_type_id__once, foo_struct_type_id);
	}
	return foo_struct_type_id__once;
}

static inline gpointer
foo_get_instance_private (Foo* self)
{
	return G_STRUCT_MEMBER_P (self, Foo_private_offset);
}

Foo*
foo_construct (GType object_type)
{
	Foo * self = NULL;
	self = (Foo*) g_object_new (object_type, NULL);
	return self;
}

Foo*
foo_new (void)
{
	return foo_construct (TYPE_FOO);
}

gboolean
foo_get_bool_prop (Foo* self)
{
	gboolean result;
	g_return_val_if_fail (IS_FOO (self), FALSE);
	result = self->priv->_bool_prop;
	return result;
}

void
foo_set_bool_prop (Foo* self,
                   gboolean value)
{
	gboolean old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_bool_prop (self);
	if (old_value != value) {
		self->priv->_bool_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_BOOL_PROP_PROPERTY]);
	}
}

gboolean
foo_get_bool_prop2 (Foo* self)
{
	gboolean result;
	g_return_val_if_fail (IS_FOO (self), FALSE);
	result = self->priv->_bool_prop2;
	return result;
}

void
foo_set_bool_prop2 (Foo* self,
                    gboolean value)
{
	gboolean old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_bool_prop2 (self);
	if (old_value != value) {
		self->priv->_bool_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_BOOL_PROP2_PROPERTY]);
	}
}

gchar
foo_get_char_prop (Foo* self)
{
	gchar result;
	g_return_val_if_fail (IS_FOO (self), '\0');
	result = self->priv->_char_prop;
	return result;
}

void
foo_set_char_prop (Foo* self,
                   gchar value)
{
	gchar old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_char_prop (self);
	if (old_value != value) {
		self->priv->_char_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_CHAR_PROP_PROPERTY]);
	}
}

gchar
foo_get_char_prop2 (Foo* self)
{
	gchar result;
	g_return_val_if_fail (IS_FOO (self), '\0');
	result = self->priv->_char_prop2;
	return result;
}

void
foo_set_char_prop2 (Foo* self,
                    gchar value)
{
	gchar old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_char_prop2 (self);
	if (old_value != value) {
		self->priv->_char_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_CHAR_PROP2_PROPERTY]);
	}
}

gdouble
foo_get_double_prop (Foo* self)
{
	gdouble result;
	g_return_val_if_fail (IS_FOO (self), 0.0);
	result = self->priv->_double_prop;
	return result;
}

void
foo_set_double_prop (Foo* self,
                     gdouble value)
{
	gdouble old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_double_prop (self);
	if (old_value != value) {
		self->priv->_double_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_DOUBLE_PROP_PROPERTY]);
	}
}

gdouble
foo_get_double_prop2 (Foo* self)
{
	gdouble result;
	g_return_val_if_fail (IS_FOO (self), 0.0);
	result = self->priv->_double_prop2;
	return result;
}

void
foo_set_double_prop2 (Foo* self,
                      gdouble value)
{
	gdouble old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_double_prop2 (self);
	if (old_value != value) {
		self->priv->_double_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_DOUBLE_PROP2_PROPERTY]);
	}
}

FooEnum
foo_get_enum_prop (Foo* self)
{
	FooEnum result;
	g_return_val_if_fail (IS_FOO (self), 0);
	result = self->priv->_enum_prop;
	return result;
}

void
foo_set_enum_prop (Foo* self,
                   FooEnum value)
{
	FooEnum old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_enum_prop (self);
	if (old_value != value) {
		self->priv->_enum_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_ENUM_PROP_PROPERTY]);
	}
}

FooEnum
foo_get_enum_prop2 (Foo* self)
{
	FooEnum result;
	g_return_val_if_fail (IS_FOO (self), 0);
	result = self->priv->_enum_prop2;
	return result;
}

void
foo_set_enum_prop2 (Foo* self,
                    FooEnum value)
{
	FooEnum old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_enum_prop2 (self);
	if (old_value != value) {
		self->priv->_enum_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_ENUM_PROP2_PROPERTY]);
	}
}

FooFlag
foo_get_flag_prop (Foo* self)
{
	FooFlag result;
	g_return_val_if_fail (IS_FOO (self), 0U);
	result = self->priv->_flag_prop;
	return result;
}

void
foo_set_flag_prop (Foo* self,
                   FooFlag value)
{
	FooFlag old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_flag_prop (self);
	if (old_value != value) {
		self->priv->_flag_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_FLAG_PROP_PROPERTY]);
	}
}

FooFlag
foo_get_flag_prop2 (Foo* self)
{
	FooFlag result;
	g_return_val_if_fail (IS_FOO (self), 0U);
	result = self->priv->_flag_prop2;
	return result;
}

void
foo_set_flag_prop2 (Foo* self,
                    FooFlag value)
{
	FooFlag old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_flag_prop2 (self);
	if (old_value != value) {
		self->priv->_flag_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_FLAG_PROP2_PROPERTY]);
	}
}

gfloat
foo_get_float_prop (Foo* self)
{
	gfloat result;
	g_return_val_if_fail (IS_FOO (self), 0.0F);
	result = self->priv->_float_prop;
	return result;
}

void
foo_set_float_prop (Foo* self,
                    gfloat value)
{
	gfloat old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_float_prop (self);
	if (old_value != value) {
		self->priv->_float_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_FLOAT_PROP_PROPERTY]);
	}
}

gfloat
foo_get_float_prop2 (Foo* self)
{
	gfloat result;
	g_return_val_if_fail (IS_FOO (self), 0.0F);
	result = self->priv->_float_prop2;
	return result;
}

void
foo_set_float_prop2 (Foo* self,
                     gfloat value)
{
	gfloat old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_float_prop2 (self);
	if (old_value != value) {
		self->priv->_float_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_FLOAT_PROP2_PROPERTY]);
	}
}

gint
foo_get_int_prop (Foo* self)
{
	gint result;
	g_return_val_if_fail (IS_FOO (self), 0);
	result = self->priv->_int_prop;
	return result;
}

void
foo_set_int_prop (Foo* self,
                  gint value)
{
	gint old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_int_prop (self);
	if (old_value != value) {
		self->priv->_int_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_INT_PROP_PROPERTY]);
	}
}

gint
foo_get_int_prop2 (Foo* self)
{
	gint result;
	g_return_val_if_fail (IS_FOO (self), 0);
	result = self->priv->_int_prop2;
	return result;
}

void
foo_set_int_prop2 (Foo* self,
                   gint value)
{
	gint old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_int_prop2 (self);
	if (old_value != value) {
		self->priv->_int_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_INT_PROP2_PROPERTY]);
	}
}

gint64
foo_get_int64_prop (Foo* self)
{
	gint64 result;
	g_return_val_if_fail (IS_FOO (self), 0LL);
	result = self->priv->_int64_prop;
	return result;
}

void
foo_set_int64_prop (Foo* self,
                    gint64 value)
{
	gint64 old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_int64_prop (self);
	if (old_value != value) {
		self->priv->_int64_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_INT64_PROP_PROPERTY]);
	}
}

gint64
foo_get_int64_prop2 (Foo* self)
{
	gint64 result;
	g_return_val_if_fail (IS_FOO (self), 0LL);
	result = self->priv->_int64_prop2;
	return result;
}

void
foo_set_int64_prop2 (Foo* self,
                     gint64 value)
{
	gint64 old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_int64_prop2 (self);
	if (old_value != value) {
		self->priv->_int64_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_INT64_PROP2_PROPERTY]);
	}
}

glong
foo_get_long_prop (Foo* self)
{
	glong result;
	g_return_val_if_fail (IS_FOO (self), 0L);
	result = self->priv->_long_prop;
	return result;
}

void
foo_set_long_prop (Foo* self,
                   glong value)
{
	glong old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_long_prop (self);
	if (old_value != value) {
		self->priv->_long_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_LONG_PROP_PROPERTY]);
	}
}

glong
foo_get_long_prop2 (Foo* self)
{
	glong result;
	g_return_val_if_fail (IS_FOO (self), 0L);
	result = self->priv->_long_prop2;
	return result;
}

void
foo_set_long_prop2 (Foo* self,
                    glong value)
{
	glong old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_long_prop2 (self);
	if (old_value != value) {
		self->priv->_long_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_LONG_PROP2_PROPERTY]);
	}
}

GObject*
foo_get_object_prop (Foo* self)
{
	GObject* result;
	GObject* _tmp0_;
	g_return_val_if_fail (IS_FOO (self), NULL);
	_tmp0_ = self->priv->_object_prop;
	result = _tmp0_;
	return result;
}

static gpointer
_g_object_ref0 (gpointer self)
{
	return self ? g_object_ref (self) : NULL;
}

void
foo_set_object_prop (Foo* self,
                     GObject* value)
{
	GObject* old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_object_prop (self);
	if (old_value != value) {
		GObject* _tmp0_;
		_tmp0_ = _g_object_ref0 (value);
		_g_object_unref0 (self->priv->_object_prop);
		self->priv->_object_prop = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_OBJECT_PROP_PROPERTY]);
	}
}

GParamSpec*
foo_get_param_prop (Foo* self)
{
	GParamSpec* result;
	GParamSpec* _tmp0_;
	g_return_val_if_fail (IS_FOO (self), NULL);
	_tmp0_ = self->priv->_param_prop;
	result = _tmp0_;
	return result;
}

static gpointer
_g_param_spec_ref0 (gpointer self)
{
	return self ? g_param_spec_ref (self) : NULL;
}

void
foo_set_param_prop (Foo* self,
                    GParamSpec* value)
{
	GParamSpec* old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_param_prop (self);
	if (old_value != value) {
		GParamSpec* _tmp0_;
		_tmp0_ = _g_param_spec_ref0 (value);
		_g_param_spec_unref0 (self->priv->_param_prop);
		self->priv->_param_prop = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_PARAM_PROP_PROPERTY]);
	}
}

void*
foo_get_pointer_prop (Foo* self)
{
	void* result;
	void* _tmp0_;
	g_return_val_if_fail (IS_FOO (self), NULL);
	_tmp0_ = self->priv->_pointer_prop;
	result = _tmp0_;
	return result;
}

void
foo_set_pointer_prop (Foo* self,
                      void* value)
{
	void* old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_pointer_prop (self);
	if (old_value != value) {
		self->priv->_pointer_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_POINTER_PROP_PROPERTY]);
	}
}

const gchar*
foo_get_string_prop (Foo* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	g_return_val_if_fail (IS_FOO (self), NULL);
	_tmp0_ = self->priv->_string_prop;
	result = _tmp0_;
	return result;
}

void
foo_set_string_prop (Foo* self,
                     const gchar* value)
{
	gchar* old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_string_prop (self);
	if (g_strcmp0 (value, old_value) != 0) {
		gchar* _tmp0_;
		_tmp0_ = g_strdup (value);
		_g_free0 (self->priv->_string_prop);
		self->priv->_string_prop = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_STRING_PROP_PROPERTY]);
	}
}

const gchar*
foo_get_string_prop2 (Foo* self)
{
	const gchar* result;
	const gchar* _tmp0_;
	g_return_val_if_fail (IS_FOO (self), NULL);
	_tmp0_ = self->priv->_string_prop2;
	result = _tmp0_;
	return result;
}

void
foo_set_string_prop2 (Foo* self,
                      const gchar* value)
{
	gchar* old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_string_prop2 (self);
	if (g_strcmp0 (value, old_value) != 0) {
		gchar* _tmp0_;
		_tmp0_ = g_strdup (value);
		_g_free0 (self->priv->_string_prop2);
		self->priv->_string_prop2 = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_STRING_PROP2_PROPERTY]);
	}
}

guchar
foo_get_uchar_prop (Foo* self)
{
	guchar result;
	g_return_val_if_fail (IS_FOO (self), '\0');
	result = self->priv->_uchar_prop;
	return result;
}

void
foo_set_uchar_prop (Foo* self,
                    guchar value)
{
	guchar old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_uchar_prop (self);
	if (old_value != value) {
		self->priv->_uchar_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_UCHAR_PROP_PROPERTY]);
	}
}

guchar
foo_get_uchar_prop2 (Foo* self)
{
	guchar result;
	g_return_val_if_fail (IS_FOO (self), '\0');
	result = self->priv->_uchar_prop2;
	return result;
}

void
foo_set_uchar_prop2 (Foo* self,
                     guchar value)
{
	guchar old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_uchar_prop2 (self);
	if (old_value != value) {
		self->priv->_uchar_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_UCHAR_PROP2_PROPERTY]);
	}
}

guint
foo_get_uint_prop (Foo* self)
{
	guint result;
	g_return_val_if_fail (IS_FOO (self), 0U);
	result = self->priv->_uint_prop;
	return result;
}

void
foo_set_uint_prop (Foo* self,
                   guint value)
{
	guint old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_uint_prop (self);
	if (old_value != value) {
		self->priv->_uint_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_UINT_PROP_PROPERTY]);
	}
}

guint
foo_get_uint_prop2 (Foo* self)
{
	guint result;
	g_return_val_if_fail (IS_FOO (self), 0U);
	result = self->priv->_uint_prop2;
	return result;
}

void
foo_set_uint_prop2 (Foo* self,
                    guint value)
{
	guint old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_uint_prop2 (self);
	if (old_value != value) {
		self->priv->_uint_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_UINT_PROP2_PROPERTY]);
	}
}

guint64
foo_get_uint64_prop (Foo* self)
{
	guint64 result;
	g_return_val_if_fail (IS_FOO (self), 0ULL);
	result = self->priv->_uint64_prop;
	return result;
}

void
foo_set_uint64_prop (Foo* self,
                     guint64 value)
{
	guint64 old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_uint64_prop (self);
	if (old_value != value) {
		self->priv->_uint64_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_UINT64_PROP_PROPERTY]);
	}
}

guint64
foo_get_uint64_prop2 (Foo* self)
{
	guint64 result;
	g_return_val_if_fail (IS_FOO (self), 0ULL);
	result = self->priv->_uint64_prop2;
	return result;
}

void
foo_set_uint64_prop2 (Foo* self,
                      guint64 value)
{
	guint64 old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_uint64_prop2 (self);
	if (old_value != value) {
		self->priv->_uint64_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_UINT64_PROP2_PROPERTY]);
	}
}

gulong
foo_get_ulong_prop (Foo* self)
{
	gulong result;
	g_return_val_if_fail (IS_FOO (self), 0UL);
	result = self->priv->_ulong_prop;
	return result;
}

void
foo_set_ulong_prop (Foo* self,
                    gulong value)
{
	gulong old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_ulong_prop (self);
	if (old_value != value) {
		self->priv->_ulong_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_ULONG_PROP_PROPERTY]);
	}
}

gulong
foo_get_ulong_prop2 (Foo* self)
{
	gulong result;
	g_return_val_if_fail (IS_FOO (self), 0UL);
	result = self->priv->_ulong_prop2;
	return result;
}

void
foo_set_ulong_prop2 (Foo* self,
                     gulong value)
{
	gulong old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_ulong_prop2 (self);
	if (old_value != value) {
		self->priv->_ulong_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_ULONG_PROP2_PROPERTY]);
	}
}

gunichar
foo_get_unichar_prop (Foo* self)
{
	gunichar result;
	g_return_val_if_fail (IS_FOO (self), 0U);
	result = self->priv->_unichar_prop;
	return result;
}

void
foo_set_unichar_prop (Foo* self,
                      gunichar value)
{
	gunichar old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_unichar_prop (self);
	if (old_value != value) {
		self->priv->_unichar_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_UNICHAR_PROP_PROPERTY]);
	}
}

GType
foo_get_gtype_prop (Foo* self)
{
	GType result;
	g_return_val_if_fail (IS_FOO (self), 0UL);
	result = self->priv->_gtype_prop;
	return result;
}

void
foo_set_gtype_prop (Foo* self,
                    GType value)
{
	GType old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_gtype_prop (self);
	if (old_value != value) {
		self->priv->_gtype_prop = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_GTYPE_PROP_PROPERTY]);
	}
}

GType
foo_get_gtype_prop2 (Foo* self)
{
	GType result;
	g_return_val_if_fail (IS_FOO (self), 0UL);
	result = self->priv->_gtype_prop2;
	return result;
}

void
foo_set_gtype_prop2 (Foo* self,
                     GType value)
{
	GType old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_gtype_prop2 (self);
	if (old_value != value) {
		self->priv->_gtype_prop2 = value;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_GTYPE_PROP2_PROPERTY]);
	}
}

GVariant*
foo_get_variant_prop (Foo* self)
{
	GVariant* result;
	GVariant* _tmp0_;
	g_return_val_if_fail (IS_FOO (self), NULL);
	_tmp0_ = self->priv->_variant_prop;
	result = _tmp0_;
	return result;
}

static gpointer
_g_variant_ref0 (gpointer self)
{
	return self ? g_variant_ref (self) : NULL;
}

void
foo_set_variant_prop (Foo* self,
                      GVariant* value)
{
	GVariant* old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_variant_prop (self);
	if (old_value != value) {
		GVariant* _tmp0_;
		_tmp0_ = _g_variant_ref0 (value);
		_g_variant_unref0 (self->priv->_variant_prop);
		self->priv->_variant_prop = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_VARIANT_PROP_PROPERTY]);
	}
}

GVariant*
foo_get_variant_prop2 (Foo* self)
{
	GVariant* result;
	GVariant* _tmp0_;
	g_return_val_if_fail (IS_FOO (self), NULL);
	_tmp0_ = self->priv->_variant_prop2;
	result = _tmp0_;
	return result;
}

void
foo_set_variant_prop2 (Foo* self,
                       GVariant* value)
{
	GVariant* old_value;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_variant_prop2 (self);
	if (old_value != value) {
		GVariant* _tmp0_;
		_tmp0_ = _g_variant_ref0 (value);
		_g_variant_unref0 (self->priv->_variant_prop2);
		self->priv->_variant_prop2 = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_VARIANT_PROP2_PROPERTY]);
	}
}

void
foo_get_struct_prop (Foo* self,
                     FooStruct * result)
{
	FooStruct _tmp0_;
	g_return_if_fail (IS_FOO (self));
	_tmp0_ = self->priv->_struct_prop;
	*result = _tmp0_;
	return;
}

static gboolean
_foo_struct_equal (const FooStruct * s1,
                   const FooStruct * s2)
{
	if (s1 == s2) {
		return TRUE;
	}
	if (s1 == NULL) {
		return FALSE;
	}
	if (s2 == NULL) {
		return FALSE;
	}
	if (s1->i != s2->i) {
		return FALSE;
	}
	return TRUE;
}

void
foo_set_struct_prop (Foo* self,
                     FooStruct * value)
{
	FooStruct old_value;
	g_return_if_fail (IS_FOO (self));
	foo_get_struct_prop (self, &old_value);
	if (_foo_struct_equal (value, &old_value) != TRUE) {
		FooStruct _tmp0_;
		_tmp0_ = *value;
		self->priv->_struct_prop = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_STRUCT_PROP_PROPERTY]);
	}
}

void
foo_get_struct_prop2 (Foo* self,
                      FooStruct * result)
{
	FooStruct _tmp0_;
	g_return_if_fail (IS_FOO (self));
	_tmp0_ = self->priv->_struct_prop2;
	*result = _tmp0_;
	return;
}

void
foo_set_struct_prop2 (Foo* self,
                      FooStruct * value)
{
	FooStruct old_value;
	g_return_if_fail (IS_FOO (self));
	foo_get_struct_prop2 (self, &old_value);
	if (_foo_struct_equal (value, &old_value) != TRUE) {
		FooStruct _tmp0_;
		_tmp0_ = *value;
		self->priv->_struct_prop2 = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_STRUCT_PROP2_PROPERTY]);
	}
}

gchar**
foo_get_strv_prop (Foo* self,
                   gint* result_length1)
{
	gchar** result;
	gchar** _tmp0_;
	gint _tmp0__length1;
	gchar** _tmp1_;
	gint _tmp1__length1;
	g_return_val_if_fail (IS_FOO (self), NULL);
	_tmp0_ = self->priv->_strv_prop;
	_tmp0__length1 = self->priv->_strv_prop_length1;
	_tmp1_ = _tmp0_;
	_tmp1__length1 = _tmp0__length1;
	if (result_length1) {
		*result_length1 = _tmp1__length1;
	}
	result = _tmp1_;
	return result;
}

static gchar**
_vala_array_dup1 (gchar** self,
                  gssize length)
{
	if (length >= 0) {
		gchar** result;
		gssize i;
		result = g_new0 (gchar*, length + 1);
		for (i = 0; i < length; i++) {
			gchar* _tmp0_;
			_tmp0_ = g_strdup (self[i]);
			result[i] = _tmp0_;
		}
		return result;
	}
	return NULL;
}

void
foo_set_strv_prop (Foo* self,
                   gchar** value,
                   gint value_length1)
{
	gchar** old_value;
	gint old_value_length;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_strv_prop (self, &old_value_length);
	if (old_value != value) {
		gchar** _tmp0_;
		gint _tmp0__length1;
		_tmp0_ = (value != NULL) ? _vala_array_dup1 (value, value_length1) : value;
		_tmp0__length1 = value_length1;
		self->priv->_strv_prop = (_vala_array_free (self->priv->_strv_prop, self->priv->_strv_prop_length1, (GDestroyNotify) g_free), NULL);
		self->priv->_strv_prop = _tmp0_;
		self->priv->_strv_prop_length1 = _tmp0__length1;
		self->priv->__strv_prop_size_ = self->priv->_strv_prop_length1;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_STRV_PROP_PROPERTY]);
	}
}

gchar**
foo_get_strv_prop2 (Foo* self,
                    gint* result_length1)
{
	gchar** result;
	gchar** _tmp0_;
	gint _tmp0__length1;
	gchar** _tmp1_;
	gint _tmp1__length1;
	g_return_val_if_fail (IS_FOO (self), NULL);
	_tmp0_ = self->priv->_strv_prop2;
	_tmp0__length1 = self->priv->_strv_prop2_length1;
	_tmp1_ = _tmp0_;
	_tmp1__length1 = _tmp0__length1;
	if (result_length1) {
		*result_length1 = _tmp1__length1;
	}
	result = _tmp1_;
	return result;
}

static gchar**
_vala_array_dup2 (gchar** self,
                  gssize length)
{
	if (length >= 0) {
		gchar** result;
		gssize i;
		result = g_new0 (gchar*, length + 1);
		for (i = 0; i < length; i++) {
			gchar* _tmp0_;
			_tmp0_ = g_strdup (self[i]);
			result[i] = _tmp0_;
		}
		return result;
	}
	return NULL;
}

void
foo_set_strv_prop2 (Foo* self,
                    gchar** value,
                    gint value_length1)
{
	gchar** old_value;
	gint old_value_length;
	g_return_if_fail (IS_FOO (self));
	old_value = foo_get_strv_prop2 (self, &old_value_length);
	if (old_value != value) {
		gchar** _tmp0_;
		gint _tmp0__length1;
		_tmp0_ = (value != NULL) ? _vala_array_dup2 (value, value_length1) : value;
		_tmp0__length1 = value_length1;
		self->priv->_strv_prop2 = (_vala_array_free (self->priv->_strv_prop2, self->priv->_strv_prop2_length1, (GDestroyNotify) g_free), NULL);
		self->priv->_strv_prop2 = _tmp0_;
		self->priv->_strv_prop2_length1 = _tmp0__length1;
		self->priv->__strv_prop2_size_ = self->priv->_strv_prop2_length1;
		g_object_notify_by_pspec ((GObject *) self, foo_properties[FOO_STRV_PROP2_PROPERTY]);
	}
}

static void
foo_class_init (FooClass * klass,
                gpointer klass_data)
{
	foo_parent_class = g_type_class_peek_parent (klass);
	g_type_class_adjust_private_offset (klass, &Foo_private_offset);
	G_OBJECT_CLASS (klass)->get_property = _vala_foo_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_foo_set_property;
	G_OBJECT_CLASS (klass)->finalize = foo_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_BOOL_PROP_PROPERTY, foo_properties[FOO_BOOL_PROP_PROPERTY] = g_param_spec_boolean ("bool-prop", "bool-prop", "bool-prop", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_BOOL_PROP2_PROPERTY, foo_properties[FOO_BOOL_PROP2_PROPERTY] = g_param_spec_boolean ("bool-prop2", "bool-prop2", "bool-prop2", TRUE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_CHAR_PROP_PROPERTY, foo_properties[FOO_CHAR_PROP_PROPERTY] = g_param_spec_char ("char-prop", "char-prop", "char-prop", G_MININT8, G_MAXINT8, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_CHAR_PROP2_PROPERTY, foo_properties[FOO_CHAR_PROP2_PROPERTY] = g_param_spec_char ("char-prop2", "char-prop2", "char-prop2", G_MININT8, G_MAXINT8, 'c', G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_DOUBLE_PROP_PROPERTY, foo_properties[FOO_DOUBLE_PROP_PROPERTY] = g_param_spec_double ("double-prop", "double-prop", "double-prop", -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_DOUBLE_PROP2_PROPERTY, foo_properties[FOO_DOUBLE_PROP2_PROPERTY] = g_param_spec_double ("double-prop2", "double-prop2", "double-prop2", -G_MAXDOUBLE, G_MAXDOUBLE, 3.1415, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_ENUM_PROP_PROPERTY, foo_properties[FOO_ENUM_PROP_PROPERTY] = g_param_spec_enum ("enum-prop", "enum-prop", "enum-prop", TYPE_FOO_ENUM, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_ENUM_PROP2_PROPERTY, foo_properties[FOO_ENUM_PROP2_PROPERTY] = g_param_spec_enum ("enum-prop2", "enum-prop2", "enum-prop2", TYPE_FOO_ENUM, FOO_ENUM_BAR, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_FLAG_PROP_PROPERTY, foo_properties[FOO_FLAG_PROP_PROPERTY] = g_param_spec_flags ("flag-prop", "flag-prop", "flag-prop", TYPE_FOO_FLAG, 0U, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_FLAG_PROP2_PROPERTY, foo_properties[FOO_FLAG_PROP2_PROPERTY] = g_param_spec_flags ("flag-prop2", "flag-prop2", "flag-prop2", TYPE_FOO_FLAG, FOO_FLAG_BAR, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_FLOAT_PROP_PROPERTY, foo_properties[FOO_FLOAT_PROP_PROPERTY] = g_param_spec_float ("float-prop", "float-prop", "float-prop", -G_MAXFLOAT, G_MAXFLOAT, 0.0F, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_FLOAT_PROP2_PROPERTY, foo_properties[FOO_FLOAT_PROP2_PROPERTY] = g_param_spec_float ("float-prop2", "float-prop2", "float-prop2", -G_MAXFLOAT, G_MAXFLOAT, 47.11f, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_INT_PROP_PROPERTY, foo_properties[FOO_INT_PROP_PROPERTY] = g_param_spec_int ("int-prop", "int-prop", "int-prop", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_INT_PROP2_PROPERTY, foo_properties[FOO_INT_PROP2_PROPERTY] = g_param_spec_int ("int-prop2", "int-prop2", "int-prop2", G_MININT, G_MAXINT, G_MININT, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_INT64_PROP_PROPERTY, foo_properties[FOO_INT64_PROP_PROPERTY] = g_param_spec_int64 ("int64-prop", "int64-prop", "int64-prop", G_MININT64, G_MAXINT64, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_INT64_PROP2_PROPERTY, foo_properties[FOO_INT64_PROP2_PROPERTY] = g_param_spec_int64 ("int64-prop2", "int64-prop2", "int64-prop2", G_MININT64, G_MAXINT64, G_MININT64, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_LONG_PROP_PROPERTY, foo_properties[FOO_LONG_PROP_PROPERTY] = g_param_spec_long ("long-prop", "long-prop", "long-prop", G_MINLONG, G_MAXLONG, 0L, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_LONG_PROP2_PROPERTY, foo_properties[FOO_LONG_PROP2_PROPERTY] = g_param_spec_long ("long-prop2", "long-prop2", "long-prop2", G_MINLONG, G_MAXLONG, G_MAXLONG, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_OBJECT_PROP_PROPERTY, foo_properties[FOO_OBJECT_PROP_PROPERTY] = g_param_spec_object ("object-prop", "object-prop", "object-prop", G_TYPE_OBJECT, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_PARAM_PROP_PROPERTY, foo_properties[FOO_PARAM_PROP_PROPERTY] = g_param_spec_param ("param-prop", "param-prop", "param-prop", G_TYPE_PARAM, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_POINTER_PROP_PROPERTY, foo_properties[FOO_POINTER_PROP_PROPERTY] = g_param_spec_pointer ("pointer-prop", "pointer-prop", "pointer-prop", G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_STRING_PROP_PROPERTY, foo_properties[FOO_STRING_PROP_PROPERTY] = g_param_spec_string ("string-prop", "string-prop", "string-prop", NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_STRING_PROP2_PROPERTY, foo_properties[FOO_STRING_PROP2_PROPERTY] = g_param_spec_string ("string-prop2", "string-prop2", "string-prop2", NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_UCHAR_PROP_PROPERTY, foo_properties[FOO_UCHAR_PROP_PROPERTY] = g_param_spec_uchar ("uchar-prop", "uchar-prop", "uchar-prop", 0, G_MAXUINT8, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_UCHAR_PROP2_PROPERTY, foo_properties[FOO_UCHAR_PROP2_PROPERTY] = g_param_spec_uchar ("uchar-prop2", "uchar-prop2", "uchar-prop2", 0, G_MAXUINT8, (guchar) 'u', G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_UINT_PROP_PROPERTY, foo_properties[FOO_UINT_PROP_PROPERTY] = g_param_spec_uint ("uint-prop", "uint-prop", "uint-prop", 0, G_MAXUINT, 0U, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_UINT_PROP2_PROPERTY, foo_properties[FOO_UINT_PROP2_PROPERTY] = g_param_spec_uint ("uint-prop2", "uint-prop2", "uint-prop2", 0, G_MAXUINT, G_MAXUINT, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_UINT64_PROP_PROPERTY, foo_properties[FOO_UINT64_PROP_PROPERTY] = g_param_spec_uint64 ("uint64-prop", "uint64-prop", "uint64-prop", 0, G_MAXUINT64, 0U, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_UINT64_PROP2_PROPERTY, foo_properties[FOO_UINT64_PROP2_PROPERTY] = g_param_spec_uint64 ("uint64-prop2", "uint64-prop2", "uint64-prop2", 0, G_MAXUINT64, G_MAXUINT64, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_ULONG_PROP_PROPERTY, foo_properties[FOO_ULONG_PROP_PROPERTY] = g_param_spec_ulong ("ulong-prop", "ulong-prop", "ulong-prop", 0, G_MAXULONG, 0UL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_ULONG_PROP2_PROPERTY, foo_properties[FOO_ULONG_PROP2_PROPERTY] = g_param_spec_ulong ("ulong-prop2", "ulong-prop2", "ulong-prop2", 0, G_MAXULONG, G_MAXULONG, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_UNICHAR_PROP_PROPERTY, foo_properties[FOO_UNICHAR_PROP_PROPERTY] = g_param_spec_uint ("unichar-prop", "unichar-prop", "unichar-prop", 0, G_MAXUINT, 0U, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_GTYPE_PROP_PROPERTY, foo_properties[FOO_GTYPE_PROP_PROPERTY] = g_param_spec_gtype ("gtype-prop", "gtype-prop", "gtype-prop", G_TYPE_NONE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_GTYPE_PROP2_PROPERTY, foo_properties[FOO_GTYPE_PROP2_PROPERTY] = g_param_spec_gtype ("gtype-prop2", "gtype-prop2", "gtype-prop2", G_TYPE_STRING, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_VARIANT_PROP_PROPERTY, foo_properties[FOO_VARIANT_PROP_PROPERTY] = g_param_spec_variant ("variant-prop", "variant-prop", "variant-prop", G_VARIANT_TYPE_ANY, NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_VARIANT_PROP2_PROPERTY, foo_properties[FOO_VARIANT_PROP2_PROPERTY] = g_param_spec_variant ("variant-prop2", "variant-prop2", "variant-prop2", G_VARIANT_TYPE_ANY, NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_STRUCT_PROP_PROPERTY, foo_properties[FOO_STRUCT_PROP_PROPERTY] = g_param_spec_boxed ("struct-prop", "struct-prop", "struct-prop", TYPE_FOO_STRUCT, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_STRUCT_PROP2_PROPERTY, foo_properties[FOO_STRUCT_PROP2_PROPERTY] = g_param_spec_boxed ("struct-prop2", "struct-prop2", "struct-prop2", TYPE_FOO_STRUCT, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_STRV_PROP_PROPERTY, foo_properties[FOO_STRV_PROP_PROPERTY] = g_param_spec_boxed ("strv-prop", "strv-prop", "strv-prop", G_TYPE_STRV, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), FOO_STRV_PROP2_PROPERTY, foo_properties[FOO_STRV_PROP2_PROPERTY] = g_param_spec_boxed ("strv-prop2", "strv-prop2", "strv-prop2", G_TYPE_STRV, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
}

static void
foo_instance_init (Foo * self,
                   gpointer klass)
{
	gchar* _tmp0_;
	GVariant* _tmp1_;
	FooStruct _tmp2_ = {0};
	gchar* _tmp3_;
	gchar* _tmp4_;
	gchar** _tmp5_;
	self->priv = foo_get_instance_private (self);
	self->priv->_bool_prop2 = TRUE;
	self->priv->_char_prop2 = 'c';
	self->priv->_double_prop2 = 3.1415;
	self->priv->_enum_prop2 = FOO_ENUM_BAR;
	self->priv->_flag_prop2 = FOO_FLAG_BAR;
	self->priv->_float_prop2 = 47.11f;
	self->priv->_int_prop2 = G_MININT;
	self->priv->_int64_prop2 = G_MININT64;
	self->priv->_long_prop2 = G_MAXLONG;
	_tmp0_ = g_strdup ("foo");
	self->priv->_string_prop2 = _tmp0_;
	self->priv->_uchar_prop2 = (guchar) 'u';
	self->priv->_uint_prop2 = G_MAXUINT;
	self->priv->_uint64_prop2 = G_MAXUINT64;
	self->priv->_ulong_prop2 = G_MAXULONG;
	self->priv->_gtype_prop2 = G_TYPE_STRING;
	_tmp1_ = g_variant_new ("as", NULL);
	g_variant_ref_sink (_tmp1_);
	self->priv->_variant_prop2 = _tmp1_;
	memset (&_tmp2_, 0, sizeof (FooStruct));
	_tmp2_.i = 4711;
	self->priv->_struct_prop2 = _tmp2_;
	_tmp3_ = g_strdup ("foo");
	_tmp4_ = g_strdup ("bar");
	_tmp5_ = g_new0 (gchar*, 2 + 1);
	_tmp5_[0] = _tmp3_;
	_tmp5_[1] = _tmp4_;
	self->priv->_strv_prop2 = _tmp5_;
	self->priv->_strv_prop2_length1 = 2;
	self->priv->__strv_prop2_size_ = self->priv->_strv_prop2_length1;
}

static void
foo_finalize (GObject * obj)
{
	Foo * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_FOO, Foo);
	_g_object_unref0 (self->priv->_object_prop);
	_g_param_spec_unref0 (self->priv->_param_prop);
	_g_free0 (self->priv->_string_prop);
	_g_free0 (self->priv->_string_prop2);
	_g_variant_unref0 (self->priv->_variant_prop);
	_g_variant_unref0 (self->priv->_variant_prop2);
	self->priv->_strv_prop = (_vala_array_free (self->priv->_strv_prop, self->priv->_strv_prop_length1, (GDestroyNotify) g_free), NULL);
	self->priv->_strv_prop2 = (_vala_array_free (self->priv->_strv_prop2, self->priv->_strv_prop2_length1, (GDestroyNotify) g_free), NULL);
	G_OBJECT_CLASS (foo_parent_class)->finalize (obj);
}

static GType
foo_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (FooClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) foo_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (Foo), 0, (GInstanceInitFunc) foo_instance_init, NULL };
	GType foo_type_id;
	foo_type_id = g_type_register_static (G_TYPE_OBJECT, "Foo", &g_define_type_info, 0);
	Foo_private_offset = g_type_add_instance_private (foo_type_id, sizeof (FooPrivate));
	return foo_type_id;
}

GType
foo_get_type (void)
{
	static volatile gsize foo_type_id__once = 0;
	if (g_once_init_enter (&foo_type_id__once)) {
		GType foo_type_id;
		foo_type_id = foo_get_type_once ();
		g_once_init_leave (&foo_type_id__once, foo_type_id);
	}
	return foo_type_id__once;
}

static void
_vala_foo_get_property (GObject * object,
                        guint property_id,
                        GValue * value,
                        GParamSpec * pspec)
{
	Foo * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, TYPE_FOO, Foo);
	switch (property_id) {
		case FOO_BOOL_PROP_PROPERTY:
		g_value_set_boolean (value, foo_get_bool_prop (self));
		break;
		case FOO_BOOL_PROP2_PROPERTY:
		g_value_set_boolean (value, foo_get_bool_prop2 (self));
		break;
		case FOO_CHAR_PROP_PROPERTY:
		g_value_set_schar (value, foo_get_char_prop (self));
		break;
		case FOO_CHAR_PROP2_PROPERTY:
		g_value_set_schar (value, foo_get_char_prop2 (self));
		break;
		case FOO_DOUBLE_PROP_PROPERTY:
		g_value_set_double (value, foo_get_double_prop (self));
		break;
		case FOO_DOUBLE_PROP2_PROPERTY:
		g_value_set_double (value, foo_get_double_prop2 (self));
		break;
		case FOO_ENUM_PROP_PROPERTY:
		g_value_set_enum (value, foo_get_enum_prop (self));
		break;
		case FOO_ENUM_PROP2_PROPERTY:
		g_value_set_enum (value, foo_get_enum_prop2 (self));
		break;
		case FOO_FLAG_PROP_PROPERTY:
		g_value_set_flags (value, foo_get_flag_prop (self));
		break;
		case FOO_FLAG_PROP2_PROPERTY:
		g_value_set_flags (value, foo_get_flag_prop2 (self));
		break;
		case FOO_FLOAT_PROP_PROPERTY:
		g_value_set_float (value, foo_get_float_prop (self));
		break;
		case FOO_FLOAT_PROP2_PROPERTY:
		g_value_set_float (value, foo_get_float_prop2 (self));
		break;
		case FOO_INT_PROP_PROPERTY:
		g_value_set_int (value, foo_get_int_prop (self));
		break;
		case FOO_INT_PROP2_PROPERTY:
		g_value_set_int (value, foo_get_int_prop2 (self));
		break;
		case FOO_INT64_PROP_PROPERTY:
		g_value_set_int64 (value, foo_get_int64_prop (self));
		break;
		case FOO_INT64_PROP2_PROPERTY:
		g_value_set_int64 (value, foo_get_int64_prop2 (self));
		break;
		case FOO_LONG_PROP_PROPERTY:
		g_value_set_long (value, foo_get_long_prop (self));
		break;
		case FOO_LONG_PROP2_PROPERTY:
		g_value_set_long (value, foo_get_long_prop2 (self));
		break;
		case FOO_OBJECT_PROP_PROPERTY:
		g_value_set_object (value, foo_get_object_prop (self));
		break;
		case FOO_PARAM_PROP_PROPERTY:
		g_value_set_param (value, foo_get_param_prop (self));
		break;
		case FOO_POINTER_PROP_PROPERTY:
		g_value_set_pointer (value, foo_get_pointer_prop (self));
		break;
		case FOO_STRING_PROP_PROPERTY:
		g_value_set_string (value, foo_get_string_prop (self));
		break;
		case FOO_STRING_PROP2_PROPERTY:
		g_value_set_string (value, foo_get_string_prop2 (self));
		break;
		case FOO_UCHAR_PROP_PROPERTY:
		g_value_set_uchar (value, foo_get_uchar_prop (self));
		break;
		case FOO_UCHAR_PROP2_PROPERTY:
		g_value_set_uchar (value, foo_get_uchar_prop2 (self));
		break;
		case FOO_UINT_PROP_PROPERTY:
		g_value_set_uint (value, foo_get_uint_prop (self));
		break;
		case FOO_UINT_PROP2_PROPERTY:
		g_value_set_uint (value, foo_get_uint_prop2 (self));
		break;
		case FOO_UINT64_PROP_PROPERTY:
		g_value_set_uint64 (value, foo_get_uint64_prop (self));
		break;
		case FOO_UINT64_PROP2_PROPERTY:
		g_value_set_uint64 (value, foo_get_uint64_prop2 (self));
		break;
		case FOO_ULONG_PROP_PROPERTY:
		g_value_set_ulong (value, foo_get_ulong_prop (self));
		break;
		case FOO_ULONG_PROP2_PROPERTY:
		g_value_set_ulong (value, foo_get_ulong_prop2 (self));
		break;
		case FOO_UNICHAR_PROP_PROPERTY:
		g_value_set_uint (value, foo_get_unichar_prop (self));
		break;
		case FOO_GTYPE_PROP_PROPERTY:
		g_value_set_gtype (value, foo_get_gtype_prop (self));
		break;
		case FOO_GTYPE_PROP2_PROPERTY:
		g_value_set_gtype (value, foo_get_gtype_prop2 (self));
		break;
		case FOO_VARIANT_PROP_PROPERTY:
		g_value_set_variant (value, foo_get_variant_prop (self));
		break;
		case FOO_VARIANT_PROP2_PROPERTY:
		g_value_set_variant (value, foo_get_variant_prop2 (self));
		break;
		case FOO_STRUCT_PROP_PROPERTY:
		{
			FooStruct boxed;
			foo_get_struct_prop (self, &boxed);
			g_value_set_boxed (value, &boxed);
		}
		break;
		case FOO_STRUCT_PROP2_PROPERTY:
		{
			FooStruct boxed;
			foo_get_struct_prop2 (self, &boxed);
			g_value_set_boxed (value, &boxed);
		}
		break;
		case FOO_STRV_PROP_PROPERTY:
		{
			int length;
			g_value_set_boxed (value, foo_get_strv_prop (self, &length));
		}
		break;
		case FOO_STRV_PROP2_PROPERTY:
		{
			int length;
			g_value_set_boxed (value, foo_get_strv_prop2 (self, &length));
		}
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static void
_vala_foo_set_property (GObject * object,
                        guint property_id,
                        const GValue * value,
                        GParamSpec * pspec)
{
	Foo * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, TYPE_FOO, Foo);
	switch (property_id) {
		case FOO_BOOL_PROP_PROPERTY:
		foo_set_bool_prop (self, g_value_get_boolean (value));
		break;
		case FOO_BOOL_PROP2_PROPERTY:
		foo_set_bool_prop2 (self, g_value_get_boolean (value));
		break;
		case FOO_CHAR_PROP_PROPERTY:
		foo_set_char_prop (self, g_value_get_schar (value));
		break;
		case FOO_CHAR_PROP2_PROPERTY:
		foo_set_char_prop2 (self, g_value_get_schar (value));
		break;
		case FOO_DOUBLE_PROP_PROPERTY:
		foo_set_double_prop (self, g_value_get_double (value));
		break;
		case FOO_DOUBLE_PROP2_PROPERTY:
		foo_set_double_prop2 (self, g_value_get_double (value));
		break;
		case FOO_ENUM_PROP_PROPERTY:
		foo_set_enum_prop (self, g_value_get_enum (value));
		break;
		case FOO_ENUM_PROP2_PROPERTY:
		foo_set_enum_prop2 (self, g_value_get_enum (value));
		break;
		case FOO_FLAG_PROP_PROPERTY:
		foo_set_flag_prop (self, g_value_get_flags (value));
		break;
		case FOO_FLAG_PROP2_PROPERTY:
		foo_set_flag_prop2 (self, g_value_get_flags (value));
		break;
		case FOO_FLOAT_PROP_PROPERTY:
		foo_set_float_prop (self, g_value_get_float (value));
		break;
		case FOO_FLOAT_PROP2_PROPERTY:
		foo_set_float_prop2 (self, g_value_get_float (value));
		break;
		case FOO_INT_PROP_PROPERTY:
		foo_set_int_prop (self, g_value_get_int (value));
		break;
		case FOO_INT_PROP2_PROPERTY:
		foo_set_int_prop2 (self, g_value_get_int (value));
		break;
		case FOO_INT64_PROP_PROPERTY:
		foo_set_int64_prop (self, g_value_get_int64 (value));
		break;
		case FOO_INT64_PROP2_PROPERTY:
		foo_set_int64_prop2 (self, g_value_get_int64 (value));
		break;
		case FOO_LONG_PROP_PROPERTY:
		foo_set_long_prop (self, g_value_get_long (value));
		break;
		case FOO_LONG_PROP2_PROPERTY:
		foo_set_long_prop2 (self, g_value_get_long (value));
		break;
		case FOO_OBJECT_PROP_PROPERTY:
		foo_set_object_prop (self, g_value_get_object (value));
		break;
		case FOO_PARAM_PROP_PROPERTY:
		foo_set_param_prop (self, g_value_get_param (value));
		break;
		case FOO_POINTER_PROP_PROPERTY:
		foo_set_pointer_prop (self, g_value_get_pointer (value));
		break;
		case FOO_STRING_PROP_PROPERTY:
		foo_set_string_prop (self, g_value_get_string (value));
		break;
		case FOO_STRING_PROP2_PROPERTY:
		foo_set_string_prop2 (self, g_value_get_string (value));
		break;
		case FOO_UCHAR_PROP_PROPERTY:
		foo_set_uchar_prop (self, g_value_get_uchar (value));
		break;
		case FOO_UCHAR_PROP2_PROPERTY:
		foo_set_uchar_prop2 (self, g_value_get_uchar (value));
		break;
		case FOO_UINT_PROP_PROPERTY:
		foo_set_uint_prop (self, g_value_get_uint (value));
		break;
		case FOO_UINT_PROP2_PROPERTY:
		foo_set_uint_prop2 (self, g_value_get_uint (value));
		break;
		case FOO_UINT64_PROP_PROPERTY:
		foo_set_uint64_prop (self, g_value_get_uint64 (value));
		break;
		case FOO_UINT64_PROP2_PROPERTY:
		foo_set_uint64_prop2 (self, g_value_get_uint64 (value));
		break;
		case FOO_ULONG_PROP_PROPERTY:
		foo_set_ulong_prop (self, g_value_get_ulong (value));
		break;
		case FOO_ULONG_PROP2_PROPERTY:
		foo_set_ulong_prop2 (self, g_value_get_ulong (value));
		break;
		case FOO_UNICHAR_PROP_PROPERTY:
		foo_set_unichar_prop (self, g_value_get_uint (value));
		break;
		case FOO_GTYPE_PROP_PROPERTY:
		foo_set_gtype_prop (self, g_value_get_gtype (value));
		break;
		case FOO_GTYPE_PROP2_PROPERTY:
		foo_set_gtype_prop2 (self, g_value_get_gtype (value));
		break;
		case FOO_VARIANT_PROP_PROPERTY:
		foo_set_variant_prop (self, g_value_get_variant (value));
		break;
		case FOO_VARIANT_PROP2_PROPERTY:
		foo_set_variant_prop2 (self, g_value_get_variant (value));
		break;
		case FOO_STRUCT_PROP_PROPERTY:
		foo_set_struct_prop (self, g_value_get_boxed (value));
		break;
		case FOO_STRUCT_PROP2_PROPERTY:
		foo_set_struct_prop2 (self, g_value_get_boxed (value));
		break;
		case FOO_STRV_PROP_PROPERTY:
		{
			gpointer boxed;
			boxed = g_value_get_boxed (value);
			foo_set_strv_prop (self, boxed, (boxed == NULL) ? 0 : g_strv_length (boxed));
		}
		break;
		case FOO_STRV_PROP2_PROPERTY:
		{
			gpointer boxed;
			boxed = g_value_get_boxed (value);
			foo_set_strv_prop2 (self, boxed, (boxed == NULL) ? 0 : g_strv_length (boxed));
		}
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static void
_vala_main (void)
{
	Foo* foo = NULL;
	Foo* _tmp0_;
	GObjectClass* foo_class = NULL;
	GObjectClass* _tmp1_;
	GParamSpec* _tmp2_;
	gboolean _tmp3_;
	gboolean _tmp4_;
	GParamSpec* _tmp5_;
	gchar _tmp6_;
	gchar _tmp7_;
	GParamSpec* _tmp8_;
	gdouble _tmp9_;
	gdouble _tmp10_;
	GParamSpec* _tmp11_;
	FooEnum _tmp12_;
	FooEnum _tmp13_;
	GParamSpec* _tmp14_;
	FooFlag _tmp15_;
	FooFlag _tmp16_;
	GParamSpec* _tmp17_;
	gfloat _tmp18_;
	gfloat _tmp19_;
	GParamSpec* _tmp20_;
	gint _tmp21_;
	gint _tmp22_;
	GParamSpec* _tmp23_;
	gint64 _tmp24_;
	gint64 _tmp25_;
	GParamSpec* _tmp26_;
	glong _tmp27_;
	glong _tmp28_;
	GParamSpec* _tmp29_;
	GParamSpec* _tmp30_;
	GParamSpec* _tmp31_;
	GParamSpec* _tmp32_;
	const gchar* _tmp33_;
	const gchar* _tmp34_;
	GParamSpec* _tmp35_;
	guchar _tmp36_;
	guchar _tmp37_;
	GParamSpec* _tmp38_;
	guint _tmp39_;
	guint _tmp40_;
	GParamSpec* _tmp41_;
	guint64 _tmp42_;
	guint64 _tmp43_;
	GParamSpec* _tmp44_;
	gulong _tmp45_;
	gulong _tmp46_;
	GParamSpec* _tmp47_;
	GParamSpec* _tmp48_;
	GType _tmp49_;
	GType _tmp50_;
	GParamSpec* _tmp51_;
	GVariant* _tmp52_;
	GVariant* _tmp53_;
	const GVariantType* _tmp54_;
	GParamSpec* _tmp55_;
	FooStruct _tmp56_ = {0};
	FooStruct _tmp57_;
	GParamSpec* _tmp58_;
	gchar** _tmp59_;
	gint _tmp59__length1;
	gint _tmp60_ = 0;
	gchar** _tmp61_;
	gint _tmp61__length1;
	const gchar* _tmp62_;
	_tmp0_ = foo_new ();
	foo = _tmp0_;
	_tmp1_ = G_OBJECT_GET_CLASS (G_TYPE_CHECK_INSTANCE_CAST (foo, G_TYPE_OBJECT, GObject));
	foo_class = _tmp1_;
	_tmp2_ = g_object_class_find_property (foo_class, "bool-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, G_TYPE_PARAM_BOOLEAN), "foo_class.find_property (\"bool-prop\") is ParamSpecBoolean");
	_tmp3_ = foo_get_bool_prop2 (foo);
	_tmp4_ = _tmp3_;
	_vala_assert (_tmp4_ == TRUE, "foo.bool_prop2 == true");
	_tmp5_ = g_object_class_find_property (foo_class, "char-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, G_TYPE_PARAM_CHAR), "foo_class.find_property (\"char-prop\") is ParamSpecChar");
	_tmp6_ = foo_get_char_prop2 (foo);
	_tmp7_ = _tmp6_;
	_vala_assert (_tmp7_ == 'c', "foo.char_prop2 == 'c'");
	_tmp8_ = g_object_class_find_property (foo_class, "double-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, G_TYPE_PARAM_DOUBLE), "foo_class.find_property (\"double-prop\") is ParamSpecDouble");
	_tmp9_ = foo_get_double_prop2 (foo);
	_tmp10_ = _tmp9_;
	_vala_assert (_tmp10_ == 3.1415, "foo.double_prop2 == 3.1415");
	_tmp11_ = g_object_class_find_property (foo_class, "enum-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, G_TYPE_PARAM_ENUM), "foo_class.find_property (\"enum-prop\") is ParamSpecEnum");
	_tmp12_ = foo_get_enum_prop2 (foo);
	_tmp13_ = _tmp12_;
	_vala_assert (_tmp13_ == FOO_ENUM_BAR, "foo.enum_prop2 == FooEnum.BAR");
	_tmp14_ = g_object_class_find_property (foo_class, "flag-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp14_, G_TYPE_PARAM_FLAGS), "foo_class.find_property (\"flag-prop\") is ParamSpecFlags");
	_tmp15_ = foo_get_flag_prop2 (foo);
	_tmp16_ = _tmp15_;
	_vala_assert (_tmp16_ == FOO_FLAG_BAR, "foo.flag_prop2 == FooFlag.BAR");
	_tmp17_ = g_object_class_find_property (foo_class, "float-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, G_TYPE_PARAM_FLOAT), "foo_class.find_property (\"float-prop\") is ParamSpecFloat");
	_tmp18_ = foo_get_float_prop2 (foo);
	_tmp19_ = _tmp18_;
	_vala_assert (_tmp19_ == 47.11f, "foo.float_prop2 == 47.11f");
	_tmp20_ = g_object_class_find_property (foo_class, "int-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, G_TYPE_PARAM_INT), "foo_class.find_property (\"int-prop\") is ParamSpecInt");
	_tmp21_ = foo_get_int_prop2 (foo);
	_tmp22_ = _tmp21_;
	_vala_assert (_tmp22_ == G_MININT, "foo.int_prop2 == int.MIN");
	_tmp23_ = g_object_class_find_property (foo_class, "int64-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, G_TYPE_PARAM_INT64), "foo_class.find_property (\"int64-prop\") is ParamSpecInt64");
	_tmp24_ = foo_get_int64_prop2 (foo);
	_tmp25_ = _tmp24_;
	_vala_assert (_tmp25_ == G_MININT64, "foo.int64_prop2 == int64.MIN");
	_tmp26_ = g_object_class_find_property (foo_class, "long-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp26_, G_TYPE_PARAM_LONG), "foo_class.find_property (\"long-prop\") is ParamSpecLong");
	_tmp27_ = foo_get_long_prop2 (foo);
	_tmp28_ = _tmp27_;
	_vala_assert (_tmp28_ == G_MAXLONG, "foo.long_prop2 == long.MAX");
	_tmp29_ = g_object_class_find_property (foo_class, "object-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp29_, G_TYPE_PARAM_OBJECT), "foo_class.find_property (\"object-prop\") is ParamSpecObject");
	_tmp30_ = g_object_class_find_property (foo_class, "param-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, G_TYPE_PARAM_PARAM), "foo_class.find_property (\"param-prop\") is ParamSpecParam");
	_tmp31_ = g_object_class_find_property (foo_class, "pointer-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp31_, G_TYPE_PARAM_POINTER), "foo_class.find_property (\"pointer-prop\") is ParamSpecPointer");
	_tmp32_ = g_object_class_find_property (foo_class, "string-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, G_TYPE_PARAM_STRING), "foo_class.find_property (\"string-prop\") is ParamSpecString");
	_tmp33_ = foo_get_string_prop2 (foo);
	_tmp34_ = _tmp33_;
	_vala_assert (g_strcmp0 (_tmp34_, "foo") == 0, "foo.string_prop2 == \"foo\"");
	_tmp35_ = g_object_class_find_property (foo_class, "uchar-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp35_, G_TYPE_PARAM_UCHAR), "foo_class.find_property (\"uchar-prop\") is ParamSpecUChar");
	_tmp36_ = foo_get_uchar_prop2 (foo);
	_tmp37_ = _tmp36_;
	_vala_assert (_tmp37_ == ((guchar) 'u'), "foo.uchar_prop2 == 'u'");
	_tmp38_ = g_object_class_find_property (foo_class, "uint-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp38_, G_TYPE_PARAM_UINT), "foo_class.find_property (\"uint-prop\") is ParamSpecUInt");
	_tmp39_ = foo_get_uint_prop2 (foo);
	_tmp40_ = _tmp39_;
	_vala_assert (_tmp40_ == G_MAXUINT, "foo.uint_prop2 == uint.MAX");
	_tmp41_ = g_object_class_find_property (foo_class, "uint64-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp41_, G_TYPE_PARAM_UINT64), "foo_class.find_property (\"uint64-prop\") is ParamSpecUInt64");
	_tmp42_ = foo_get_uint64_prop2 (foo);
	_tmp43_ = _tmp42_;
	_vala_assert (_tmp43_ == G_MAXUINT64, "foo.uint64_prop2 == uint64.MAX");
	_tmp44_ = g_object_class_find_property (foo_class, "ulong-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp44_, G_TYPE_PARAM_ULONG), "foo_class.find_property (\"ulong-prop\") is ParamSpecULong");
	_tmp45_ = foo_get_ulong_prop2 (foo);
	_tmp46_ = _tmp45_;
	_vala_assert (_tmp46_ == G_MAXULONG, "foo.ulong_prop2 == ulong.MAX");
	_tmp47_ = g_object_class_find_property (foo_class, "unichar-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp47_, G_TYPE_PARAM_UINT), "foo_class.find_property (\"unichar-prop\") is ParamSpecUInt");
	_tmp48_ = g_object_class_find_property (foo_class, "gtype-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp48_, G_TYPE_PARAM_GTYPE), "foo_class.find_property (\"gtype-prop\") is ParamSpecGType");
	_tmp49_ = foo_get_gtype_prop2 (foo);
	_tmp50_ = _tmp49_;
	_vala_assert (_tmp50_ == G_TYPE_STRING, "foo.gtype_prop2 == typeof (string)");
	_tmp51_ = g_object_class_find_property (foo_class, "variant-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp51_, G_TYPE_PARAM_VARIANT), "foo_class.find_property (\"variant-prop\") is ParamSpecVariant");
	_tmp52_ = foo_get_variant_prop2 (foo);
	_tmp53_ = _tmp52_;
	_tmp54_ = G_VARIANT_TYPE_STRING_ARRAY;
	_vala_assert (g_variant_is_of_type (_tmp53_, _tmp54_), "foo.variant_prop2.is_of_type (VariantType.STRING_ARRAY)");
	_tmp55_ = g_object_class_find_property (foo_class, "struct-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp55_, G_TYPE_PARAM_BOXED), "foo_class.find_property (\"struct-prop\") is ParamSpecBoxed");
	foo_get_struct_prop2 (foo, &_tmp56_);
	_tmp57_ = _tmp56_;
	_vala_assert (_tmp57_.i == 4711, "foo.struct_prop2.i == 4711");
	_tmp58_ = g_object_class_find_property (foo_class, "strv-prop");
	_vala_assert (G_TYPE_CHECK_INSTANCE_TYPE (_tmp58_, G_TYPE_PARAM_BOXED), "foo_class.find_property (\"strv-prop\") is ParamSpecBoxed");
	_tmp59_ = foo_get_strv_prop2 (foo, &_tmp60_);
	_tmp59__length1 = _tmp60_;
	_tmp61_ = _tmp59_;
	_tmp61__length1 = _tmp59__length1;
	_tmp62_ = _tmp61_[1];
	_vala_assert (g_strcmp0 (_tmp62_, "bar") == 0, "foo.strv_prop2[1] == \"bar\"");
	_g_object_unref0 (foo);
}

int
main (int argc,
      char ** argv)
{
	_vala_main ();
	return 0;
}

static void
_vala_array_destroy (gpointer array,
                     gssize array_length,
                     GDestroyNotify destroy_func)
{
	if ((array != NULL) && (destroy_func != NULL)) {
		gssize i;
		for (i = 0; i < array_length; i = i + 1) {
			if (((gpointer*) array)[i] != NULL) {
				destroy_func (((gpointer*) array)[i]);
			}
		}
	}
}

static void
_vala_array_free (gpointer array,
                  gssize array_length,
                  GDestroyNotify destroy_func)
{
	_vala_array_destroy (array, array_length, destroy_func);
	g_free (array);
}

