#ifdef __clang__
#define CBINDGEN_NONNULL _Nonnull
#else
#define CBINDGEN_NONNULL
#endif


#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>

typedef struct Opaque Opaque;

typedef struct References {
  const struct Opaque *CBINDGEN_NONNULL a;
  struct Opaque *CBINDGEN_NONNULL b;
  const struct Opaque *c;
  struct Opaque *d;
} References;

typedef struct Pointers_u64 {
  float *CBINDGEN_NONNULL a;
  uint64_t *CBINDGEN_NONNULL b;
  struct Opaque *CBINDGEN_NONNULL c;
  uint64_t *CBINDGEN_NONNULL *CBINDGEN_NONNULL d;
  float *CBINDGEN_NONNULL *CBINDGEN_NONNULL e;
  struct Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL f;
  uint64_t *g;
  int32_t *h;
  int32_t *CBINDGEN_NONNULL *i;
  const uint64_t *j;
  uint64_t *k;
} Pointers_u64;

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

void value_arg(struct References arg);

void mutltiple_args(int32_t *CBINDGEN_NONNULL arg,
                    struct Pointers_u64 *foo,
                    struct Opaque *CBINDGEN_NONNULL *CBINDGEN_NONNULL d);

void ref_arg(const struct Pointers_u64 *CBINDGEN_NONNULL arg);

void mut_ref_arg(struct Pointers_u64 *CBINDGEN_NONNULL arg);

void optional_ref_arg(const struct Pointers_u64 *arg);

void optional_mut_ref_arg(struct Pointers_u64 *arg);

void nullable_const_ptr(const struct Pointers_u64 *arg);

void nullable_mut_ptr(struct Pointers_u64 *arg);

#ifdef __cplusplus
}  // extern "C"
#endif  // __cplusplus
