]> git.wh0rd.org - ICEs.git/blobdiff - 360229/xapian_wrap.i.0
more
[ICEs.git] / 360229 / xapian_wrap.i.0
diff --git a/360229/xapian_wrap.i.0 b/360229/xapian_wrap.i.0
new file mode 100644 (file)
index 0000000..9d11b4c
--- /dev/null
@@ -0,0 +1,63091 @@
+template<typename T> class SwigValueWrapper {
+  struct SwigMovePointer {
+    T *ptr;
+    SwigMovePointer(T *p) : ptr(p) { }
+    ~SwigMovePointer() { delete ptr; }
+    SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; }
+  } pointer;
+  SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
+  SwigValueWrapper(const SwigValueWrapper<T>& rhs);
+public:
+  SwigValueWrapper() : pointer(0) { }
+  SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; }
+  operator T&() const { return *pointer.ptr; }
+  T *operator&() { return pointer.ptr; }
+};
+template <typename T> T SwigValueInit() {
+  return T();
+}
+extern "C" {
+typedef long unsigned int size_t;
+typedef unsigned char __u_char;
+typedef unsigned short int __u_short;
+typedef unsigned int __u_int;
+typedef unsigned long int __u_long;
+typedef signed char __int8_t;
+typedef unsigned char __uint8_t;
+typedef signed short int __int16_t;
+typedef unsigned short int __uint16_t;
+typedef signed int __int32_t;
+typedef unsigned int __uint32_t;
+typedef signed long int __int64_t;
+typedef unsigned long int __uint64_t;
+typedef long int __quad_t;
+typedef unsigned long int __u_quad_t;
+typedef unsigned long int __dev_t;
+typedef unsigned int __uid_t;
+typedef unsigned int __gid_t;
+typedef unsigned long int __ino_t;
+typedef unsigned long int __ino64_t;
+typedef unsigned int __mode_t;
+typedef unsigned long int __nlink_t;
+typedef long int __off_t;
+typedef long int __off64_t;
+typedef int __pid_t;
+typedef struct { int __val[2]; } __fsid_t;
+typedef long int __clock_t;
+typedef unsigned long int __rlim_t;
+typedef unsigned long int __rlim64_t;
+typedef unsigned int __id_t;
+typedef long int __time_t;
+typedef unsigned int __useconds_t;
+typedef long int __suseconds_t;
+typedef int __daddr_t;
+typedef long int __swblk_t;
+typedef int __key_t;
+typedef int __clockid_t;
+typedef void * __timer_t;
+typedef long int __blksize_t;
+typedef long int __blkcnt_t;
+typedef long int __blkcnt64_t;
+typedef unsigned long int __fsblkcnt_t;
+typedef unsigned long int __fsblkcnt64_t;
+typedef unsigned long int __fsfilcnt_t;
+typedef unsigned long int __fsfilcnt64_t;
+typedef long int __ssize_t;
+typedef __off64_t __loff_t;
+typedef __quad_t *__qaddr_t;
+typedef char *__caddr_t;
+typedef long int __intptr_t;
+typedef unsigned int __socklen_t;
+struct _IO_FILE;
+typedef struct _IO_FILE FILE;
+typedef struct _IO_FILE __FILE;
+typedef struct
+{
+  int __count;
+  union
+  {
+    unsigned int __wch;
+    char __wchb[4];
+  } __value;
+} __mbstate_t;
+typedef struct
+{
+  __off_t __pos;
+  __mbstate_t __state;
+} _G_fpos_t;
+typedef struct
+{
+  __off64_t __pos;
+  __mbstate_t __state;
+} _G_fpos64_t;
+typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
+typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
+typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
+typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
+typedef __builtin_va_list __gnuc_va_list;
+struct _IO_jump_t; struct _IO_FILE;
+typedef void _IO_lock_t;
+struct _IO_marker {
+  struct _IO_marker *_next;
+  struct _IO_FILE *_sbuf;
+  int _pos;
+};
+enum __codecvt_result
+{
+  __codecvt_ok,
+  __codecvt_partial,
+  __codecvt_error,
+  __codecvt_noconv
+};
+struct _IO_FILE {
+  int _flags;
+  char* _IO_read_ptr;
+  char* _IO_read_end;
+  char* _IO_read_base;
+  char* _IO_write_base;
+  char* _IO_write_ptr;
+  char* _IO_write_end;
+  char* _IO_buf_base;
+  char* _IO_buf_end;
+  char *_IO_save_base;
+  char *_IO_backup_base;
+  char *_IO_save_end;
+  struct _IO_marker *_markers;
+  struct _IO_FILE *_chain;
+  int _fileno;
+  int _flags2;
+  __off_t _old_offset;
+  unsigned short _cur_column;
+  signed char _vtable_offset;
+  char _shortbuf[1];
+  _IO_lock_t *_lock;
+  __off64_t _offset;
+  void *__pad1;
+  void *__pad2;
+  void *__pad3;
+  void *__pad4;
+  size_t __pad5;
+  int _mode;
+  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
+};
+struct _IO_FILE_plus;
+extern struct _IO_FILE_plus _IO_2_1_stdin_;
+extern struct _IO_FILE_plus _IO_2_1_stdout_;
+extern struct _IO_FILE_plus _IO_2_1_stderr_;
+typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
+typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
+     size_t __n);
+typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
+typedef int __io_close_fn (void *__cookie);
+typedef __io_read_fn cookie_read_function_t;
+typedef __io_write_fn cookie_write_function_t;
+typedef __io_seek_fn cookie_seek_function_t;
+typedef __io_close_fn cookie_close_function_t;
+typedef struct
+{
+  __io_read_fn *read;
+  __io_write_fn *write;
+  __io_seek_fn *seek;
+  __io_close_fn *close;
+} _IO_cookie_io_functions_t;
+typedef _IO_cookie_io_functions_t cookie_io_functions_t;
+struct _IO_cookie_file;
+extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
+        void *__cookie, _IO_cookie_io_functions_t __fns);
+extern "C" {
+extern int __underflow (_IO_FILE *);
+extern int __uflow (_IO_FILE *);
+extern int __overflow (_IO_FILE *, int);
+extern int _IO_getc (_IO_FILE *__fp);
+extern int _IO_putc (int __c, _IO_FILE *__fp);
+extern int _IO_feof (_IO_FILE *__fp) throw ();
+extern int _IO_ferror (_IO_FILE *__fp) throw ();
+extern int _IO_peekc_locked (_IO_FILE *__fp);
+extern void _IO_flockfile (_IO_FILE *) throw ();
+extern void _IO_funlockfile (_IO_FILE *) throw ();
+extern int _IO_ftrylockfile (_IO_FILE *) throw ();
+extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
+   __gnuc_va_list, int *__restrict);
+extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
+    __gnuc_va_list);
+extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
+extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
+extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
+extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
+extern void _IO_free_backup_area (_IO_FILE *) throw ();
+}
+typedef __gnuc_va_list va_list;
+typedef _G_fpos64_t fpos_t;
+typedef _G_fpos64_t fpos64_t;
+extern struct _IO_FILE *stdin;
+extern struct _IO_FILE *stdout;
+extern struct _IO_FILE *stderr;
+extern int remove (__const char *__filename) throw ();
+extern int rename (__const char *__old, __const char *__new) throw ();
+extern int renameat (int __oldfd, __const char *__old, int __newfd,
+       __const char *__new) throw ();
+extern FILE *tmpfile (void) __asm__ ("" "tmpfile64") ;
+extern FILE *tmpfile64 (void) ;
+extern char *tmpnam (char *__s) throw () ;
+extern char *tmpnam_r (char *__s) throw () ;
+extern char *tempnam (__const char *__dir, __const char *__pfx)
+     throw () __attribute__ ((__malloc__)) ;
+extern int fclose (FILE *__stream);
+extern int fflush (FILE *__stream);
+extern int fflush_unlocked (FILE *__stream);
+extern int fcloseall (void);
+extern FILE *fopen (__const char *__restrict __filename, __const char *__restrict __modes) __asm__ ("" "fopen64")
+  ;
+extern FILE *freopen (__const char *__restrict __filename, __const char *__restrict __modes, FILE *__restrict __stream) __asm__ ("" "freopen64")
+  ;
+extern FILE *fopen64 (__const char *__restrict __filename,
+        __const char *__restrict __modes) ;
+extern FILE *freopen64 (__const char *__restrict __filename,
+   __const char *__restrict __modes,
+   FILE *__restrict __stream) ;
+extern FILE *fdopen (int __fd, __const char *__modes) throw () ;
+extern FILE *fopencookie (void *__restrict __magic_cookie,
+     __const char *__restrict __modes,
+     _IO_cookie_io_functions_t __io_funcs) throw () ;
+extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes)
+  throw () ;
+extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () ;
+extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();
+extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
+      int __modes, size_t __n) throw ();
+extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
+         size_t __size) throw ();
+extern void setlinebuf (FILE *__stream) throw ();
+extern int fprintf (FILE *__restrict __stream,
+      __const char *__restrict __format, ...);
+extern int printf (__const char *__restrict __format, ...);
+extern int sprintf (char *__restrict __s,
+      __const char *__restrict __format, ...) throw ();
+extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
+       __gnuc_va_list __arg);
+extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg);
+extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
+       __gnuc_va_list __arg) throw ();
+extern int snprintf (char *__restrict __s, size_t __maxlen,
+       __const char *__restrict __format, ...)
+     throw () __attribute__ ((__format__ (__printf__, 3, 4)));
+extern int vsnprintf (char *__restrict __s, size_t __maxlen,
+        __const char *__restrict __format, __gnuc_va_list __arg)
+     throw () __attribute__ ((__format__ (__printf__, 3, 0)));
+extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
+        __gnuc_va_list __arg)
+     throw () __attribute__ ((__format__ (__printf__, 2, 0))) ;
+extern int __asprintf (char **__restrict __ptr,
+         __const char *__restrict __fmt, ...)
+     throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
+extern int asprintf (char **__restrict __ptr,
+       __const char *__restrict __fmt, ...)
+     throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
+extern int vdprintf (int __fd, __const char *__restrict __fmt,
+       __gnuc_va_list __arg)
+     __attribute__ ((__format__ (__printf__, 2, 0)));
+extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
+     __attribute__ ((__format__ (__printf__, 2, 3)));
+extern int fscanf (FILE *__restrict __stream,
+     __const char *__restrict __format, ...) ;
+extern int scanf (__const char *__restrict __format, ...) ;
+extern int sscanf (__const char *__restrict __s,
+     __const char *__restrict __format, ...) throw ();
+extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
+      __gnuc_va_list __arg)
+     __attribute__ ((__format__ (__scanf__, 2, 0))) ;
+extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
+     __attribute__ ((__format__ (__scanf__, 1, 0))) ;
+extern int vsscanf (__const char *__restrict __s,
+      __const char *__restrict __format, __gnuc_va_list __arg)
+     throw () __attribute__ ((__format__ (__scanf__, 2, 0)));
+extern int fgetc (FILE *__stream);
+extern int getc (FILE *__stream);
+extern int getchar (void);
+extern int getc_unlocked (FILE *__stream);
+extern int getchar_unlocked (void);
+extern int fgetc_unlocked (FILE *__stream);
+extern int fputc (int __c, FILE *__stream);
+extern int putc (int __c, FILE *__stream);
+extern int putchar (int __c);
+extern int fputc_unlocked (int __c, FILE *__stream);
+extern int putc_unlocked (int __c, FILE *__stream);
+extern int putchar_unlocked (int __c);
+extern int getw (FILE *__stream);
+extern int putw (int __w, FILE *__stream);
+extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+     ;
+extern char *gets (char *__s) ;
+extern char *fgets_unlocked (char *__restrict __s, int __n,
+        FILE *__restrict __stream) ;
+extern __ssize_t __getdelim (char **__restrict __lineptr,
+          size_t *__restrict __n, int __delimiter,
+          FILE *__restrict __stream) ;
+extern __ssize_t getdelim (char **__restrict __lineptr,
+        size_t *__restrict __n, int __delimiter,
+        FILE *__restrict __stream) ;
+extern __ssize_t getline (char **__restrict __lineptr,
+       size_t *__restrict __n,
+       FILE *__restrict __stream) ;
+extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);
+extern int puts (__const char *__s);
+extern int ungetc (int __c, FILE *__stream);
+extern size_t fread (void *__restrict __ptr, size_t __size,
+       size_t __n, FILE *__restrict __stream) ;
+extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
+        size_t __n, FILE *__restrict __s) ;
+extern int fputs_unlocked (__const char *__restrict __s,
+      FILE *__restrict __stream);
+extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
+         size_t __n, FILE *__restrict __stream) ;
+extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
+          size_t __n, FILE *__restrict __stream) ;
+extern int fseek (FILE *__stream, long int __off, int __whence);
+extern long int ftell (FILE *__stream) ;
+extern void rewind (FILE *__stream);
+extern int fseeko (FILE *__stream, __off64_t __off, int __whence) __asm__ ("" "fseeko64");
+extern __off64_t ftello (FILE *__stream) __asm__ ("" "ftello64");
+extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos) __asm__ ("" "fgetpos64");
+extern int fsetpos (FILE *__stream, __const fpos_t *__pos) __asm__ ("" "fsetpos64");
+extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
+extern __off64_t ftello64 (FILE *__stream) ;
+extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
+extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos);
+extern void clearerr (FILE *__stream) throw ();
+extern int feof (FILE *__stream) throw () ;
+extern int ferror (FILE *__stream) throw () ;
+extern void clearerr_unlocked (FILE *__stream) throw ();
+extern int feof_unlocked (FILE *__stream) throw () ;
+extern int ferror_unlocked (FILE *__stream) throw () ;
+extern void perror (__const char *__s);
+extern int sys_nerr;
+extern __const char *__const sys_errlist[];
+extern int _sys_nerr;
+extern __const char *__const _sys_errlist[];
+extern int fileno (FILE *__stream) throw () ;
+extern int fileno_unlocked (FILE *__stream) throw () ;
+extern FILE *popen (__const char *__command, __const char *__modes) ;
+extern int pclose (FILE *__stream);
+extern char *ctermid (char *__s) throw ();
+extern char *cuserid (char *__s);
+struct obstack;
+extern int obstack_printf (struct obstack *__restrict __obstack,
+      __const char *__restrict __format, ...)
+     throw () __attribute__ ((__format__ (__printf__, 2, 3)));
+extern int obstack_vprintf (struct obstack *__restrict __obstack,
+       __const char *__restrict __format,
+       __gnuc_va_list __args)
+     throw () __attribute__ ((__format__ (__printf__, 2, 0)));
+extern void flockfile (FILE *__stream) throw ();
+extern int ftrylockfile (FILE *__stream) throw () ;
+extern void funlockfile (FILE *__stream) throw ();
+}
+extern "C" {
+extern void *memcpy (void *__restrict __dest,
+       __const void *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern void *memmove (void *__dest, __const void *__src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
+        int __c, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern void *memset (void *__s, int __c, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern "C++"
+{
+extern void *memchr (void *__s, int __c, size_t __n)
+      throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern __const void *memchr (__const void *__s, int __c, size_t __n)
+      throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+}
+extern "C++" void *rawmemchr (void *__s, int __c)
+     throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern "C++" __const void *rawmemchr (__const void *__s, int __c)
+     throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern "C++" void *memrchr (void *__s, int __c, size_t __n)
+      throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern "C++" __const void *memrchr (__const void *__s, int __c, size_t __n)
+      throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern char *strncpy (char *__restrict __dest,
+        __const char *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
+        size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int strcmp (__const char *__s1, __const char *__s2)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int strcoll (__const char *__s1, __const char *__s2)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern size_t strxfrm (char *__restrict __dest,
+         __const char *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (2)));
+typedef struct __locale_struct
+{
+  struct locale_data *__locales[13];
+  const unsigned short int *__ctype_b;
+  const int *__ctype_tolower;
+  const int *__ctype_toupper;
+  const char *__names[13];
+} *__locale_t;
+typedef __locale_t locale_t;
+extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
+extern size_t strxfrm_l (char *__dest, __const char *__src, size_t __n,
+    __locale_t __l) throw () __attribute__ ((__nonnull__ (2, 4)));
+extern char *strdup (__const char *__s)
+     throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
+extern char *strndup (__const char *__string, size_t __n)
+     throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
+extern "C++"
+{
+extern char *strchr (char *__s, int __c)
+     throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern __const char *strchr (__const char *__s, int __c)
+     throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+}
+extern "C++"
+{
+extern char *strrchr (char *__s, int __c)
+     throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern __const char *strrchr (__const char *__s, int __c)
+     throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+}
+extern "C++" char *strchrnul (char *__s, int __c)
+     throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern "C++" __const char *strchrnul (__const char *__s, int __c)
+     throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern size_t strcspn (__const char *__s, __const char *__reject)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern size_t strspn (__const char *__s, __const char *__accept)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern "C++"
+{
+extern char *strpbrk (char *__s, __const char *__accept)
+     throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern __const char *strpbrk (__const char *__s, __const char *__accept)
+     throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+}
+extern "C++"
+{
+extern char *strstr (char *__haystack, __const char *__needle)
+     throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern __const char *strstr (__const char *__haystack,
+        __const char *__needle)
+     throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+}
+extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern char *__strtok_r (char *__restrict __s,
+    __const char *__restrict __delim,
+    char **__restrict __save_ptr)
+     throw () __attribute__ ((__nonnull__ (2, 3)));
+extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
+         char **__restrict __save_ptr)
+     throw () __attribute__ ((__nonnull__ (2, 3)));
+extern "C++" char *strcasestr (char *__haystack, __const char *__needle)
+     throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern "C++" __const char *strcasestr (__const char *__haystack,
+           __const char *__needle)
+     throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern void *memmem (__const void *__haystack, size_t __haystacklen,
+       __const void *__needle, size_t __needlelen)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)));
+extern void *__mempcpy (void *__restrict __dest,
+   __const void *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern void *mempcpy (void *__restrict __dest,
+        __const void *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern size_t strlen (__const char *__s)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern size_t strnlen (__const char *__string, size_t __maxlen)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern char *strerror (int __errnum) throw ();
+extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern char *strerror_l (int __errnum, __locale_t __l) throw ();
+extern void __bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+extern void bcopy (__const void *__src, void *__dest, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern void bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern "C++"
+{
+extern char *index (char *__s, int __c)
+     throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern __const char *index (__const char *__s, int __c)
+     throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+}
+extern "C++"
+{
+extern char *rindex (char *__s, int __c)
+     throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern __const char *rindex (__const char *__s, int __c)
+     throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+}
+extern int ffs (int __i) throw () __attribute__ ((__const__));
+extern int ffsl (long int __l) throw () __attribute__ ((__const__));
+__extension__ extern int ffsll (long long int __ll)
+     throw () __attribute__ ((__const__));
+extern int strcasecmp (__const char *__s1, __const char *__s2)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int strcasecmp_l (__const char *__s1, __const char *__s2,
+    __locale_t __loc)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
+extern int strncasecmp_l (__const char *__s1, __const char *__s2,
+     size_t __n, __locale_t __loc)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
+extern char *strsep (char **__restrict __stringp,
+       __const char *__restrict __delim)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern char *strsignal (int __sig) throw ();
+extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern char *__stpncpy (char *__restrict __dest,
+   __const char *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern char *stpncpy (char *__restrict __dest,
+        __const char *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int strverscmp (__const char *__s1, __const char *__s2)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *strfry (char *__string) throw () __attribute__ ((__nonnull__ (1)));
+extern void *memfrob (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+extern "C++" char *basename (char *__filename)
+     throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
+extern "C++" __const char *basename (__const char *__filename)
+     throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
+}
+extern "C" {
+extern int *__errno_location (void) throw () __attribute__ ((__const__));
+extern char *program_invocation_name, *program_invocation_short_name;
+}
+typedef int error_t;
+extern "C" {
+union wait
+  {
+    int w_status;
+    struct
+      {
+ unsigned int __w_termsig:7;
+ unsigned int __w_coredump:1;
+ unsigned int __w_retcode:8;
+ unsigned int:16;
+      } __wait_terminated;
+    struct
+      {
+ unsigned int __w_stopval:8;
+ unsigned int __w_stopsig:8;
+ unsigned int:16;
+      } __wait_stopped;
+  };
+typedef struct
+  {
+    int quot;
+    int rem;
+  } div_t;
+typedef struct
+  {
+    long int quot;
+    long int rem;
+  } ldiv_t;
+__extension__ typedef struct
+  {
+    long long int quot;
+    long long int rem;
+  } lldiv_t;
+extern size_t __ctype_get_mb_cur_max (void) throw () ;
+extern double atof (__const char *__nptr)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
+extern int atoi (__const char *__nptr)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
+extern long int atol (__const char *__nptr)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
+__extension__ extern long long int atoll (__const char *__nptr)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
+extern double strtod (__const char *__restrict __nptr,
+        char **__restrict __endptr)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern float strtof (__const char *__restrict __nptr,
+       char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1))) ;
+extern long double strtold (__const char *__restrict __nptr,
+       char **__restrict __endptr)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern long int strtol (__const char *__restrict __nptr,
+   char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern unsigned long int strtoul (__const char *__restrict __nptr,
+      char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+__extension__
+extern long long int strtoq (__const char *__restrict __nptr,
+        char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+__extension__
+extern unsigned long long int strtouq (__const char *__restrict __nptr,
+           char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+__extension__
+extern long long int strtoll (__const char *__restrict __nptr,
+         char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+__extension__
+extern unsigned long long int strtoull (__const char *__restrict __nptr,
+     char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern long int strtol_l (__const char *__restrict __nptr,
+     char **__restrict __endptr, int __base,
+     __locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4))) ;
+extern unsigned long int strtoul_l (__const char *__restrict __nptr,
+        char **__restrict __endptr,
+        int __base, __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 4))) ;
+__extension__
+extern long long int strtoll_l (__const char *__restrict __nptr,
+    char **__restrict __endptr, int __base,
+    __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 4))) ;
+__extension__
+extern unsigned long long int strtoull_l (__const char *__restrict __nptr,
+       char **__restrict __endptr,
+       int __base, __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 4))) ;
+extern double strtod_l (__const char *__restrict __nptr,
+   char **__restrict __endptr, __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 3))) ;
+extern float strtof_l (__const char *__restrict __nptr,
+         char **__restrict __endptr, __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 3))) ;
+extern long double strtold_l (__const char *__restrict __nptr,
+         char **__restrict __endptr,
+         __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 3))) ;
+extern char *l64a (long int __n) throw () ;
+extern long int a64l (__const char *__s)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
+extern "C" {
+typedef __u_char u_char;
+typedef __u_short u_short;
+typedef __u_int u_int;
+typedef __u_long u_long;
+typedef __quad_t quad_t;
+typedef __u_quad_t u_quad_t;
+typedef __fsid_t fsid_t;
+typedef __loff_t loff_t;
+typedef __ino64_t ino_t;
+typedef __ino64_t ino64_t;
+typedef __dev_t dev_t;
+typedef __gid_t gid_t;
+typedef __mode_t mode_t;
+typedef __nlink_t nlink_t;
+typedef __uid_t uid_t;
+typedef __off64_t off_t;
+typedef __off64_t off64_t;
+typedef __pid_t pid_t;
+typedef __id_t id_t;
+typedef __ssize_t ssize_t;
+typedef __daddr_t daddr_t;
+typedef __caddr_t caddr_t;
+typedef __key_t key_t;
+typedef __clock_t clock_t;
+typedef __time_t time_t;
+typedef __clockid_t clockid_t;
+typedef __timer_t timer_t;
+typedef __useconds_t useconds_t;
+typedef __suseconds_t suseconds_t;
+typedef unsigned long int ulong;
+typedef unsigned short int ushort;
+typedef unsigned int uint;
+typedef int int8_t __attribute__ ((__mode__ (__QI__)));
+typedef int int16_t __attribute__ ((__mode__ (__HI__)));
+typedef int int32_t __attribute__ ((__mode__ (__SI__)));
+typedef int int64_t __attribute__ ((__mode__ (__DI__)));
+typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
+typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
+typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
+typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
+typedef int register_t __attribute__ ((__mode__ (__word__)));
+typedef int __sig_atomic_t;
+typedef struct
+  {
+    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
+  } __sigset_t;
+typedef __sigset_t sigset_t;
+struct timespec
+  {
+    __time_t tv_sec;
+    long int tv_nsec;
+  };
+struct timeval
+  {
+    __time_t tv_sec;
+    __suseconds_t tv_usec;
+  };
+typedef long int __fd_mask;
+typedef struct
+  {
+    __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
+  } fd_set;
+typedef __fd_mask fd_mask;
+extern "C" {
+extern int select (int __nfds, fd_set *__restrict __readfds,
+     fd_set *__restrict __writefds,
+     fd_set *__restrict __exceptfds,
+     struct timeval *__restrict __timeout);
+extern int pselect (int __nfds, fd_set *__restrict __readfds,
+      fd_set *__restrict __writefds,
+      fd_set *__restrict __exceptfds,
+      const struct timespec *__restrict __timeout,
+      const __sigset_t *__restrict __sigmask);
+}
+__extension__
+extern unsigned int gnu_dev_major (unsigned long long int __dev)
+     throw ();
+__extension__
+extern unsigned int gnu_dev_minor (unsigned long long int __dev)
+     throw ();
+__extension__
+extern unsigned long long int gnu_dev_makedev (unsigned int __major,
+            unsigned int __minor)
+     throw ();
+typedef __blksize_t blksize_t;
+typedef __blkcnt64_t blkcnt_t;
+typedef __fsblkcnt64_t fsblkcnt_t;
+typedef __fsfilcnt64_t fsfilcnt_t;
+typedef __blkcnt64_t blkcnt64_t;
+typedef __fsblkcnt64_t fsblkcnt64_t;
+typedef __fsfilcnt64_t fsfilcnt64_t;
+typedef unsigned long int pthread_t;
+typedef union
+{
+  char __size[56];
+  long int __align;
+} pthread_attr_t;
+typedef struct __pthread_internal_list
+{
+  struct __pthread_internal_list *__prev;
+  struct __pthread_internal_list *__next;
+} __pthread_list_t;
+typedef union
+{
+  struct __pthread_mutex_s
+  {
+    int __lock;
+    unsigned int __count;
+    int __owner;
+    unsigned int __nusers;
+    int __kind;
+    int __spins;
+    __pthread_list_t __list;
+  } __data;
+  char __size[40];
+  long int __align;
+} pthread_mutex_t;
+typedef union
+{
+  char __size[4];
+  int __align;
+} pthread_mutexattr_t;
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __futex;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
+    void *__mutex;
+    unsigned int __nwaiters;
+    unsigned int __broadcast_seq;
+  } __data;
+  char __size[48];
+  __extension__ long long int __align;
+} pthread_cond_t;
+typedef union
+{
+  char __size[4];
+  int __align;
+} pthread_condattr_t;
+typedef unsigned int pthread_key_t;
+typedef int pthread_once_t;
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __nr_readers;
+    unsigned int __readers_wakeup;
+    unsigned int __writer_wakeup;
+    unsigned int __nr_readers_queued;
+    unsigned int __nr_writers_queued;
+    int __writer;
+    int __shared;
+    unsigned long int __pad1;
+    unsigned long int __pad2;
+    unsigned int __flags;
+  } __data;
+  char __size[56];
+  long int __align;
+} pthread_rwlock_t;
+typedef union
+{
+  char __size[8];
+  long int __align;
+} pthread_rwlockattr_t;
+typedef volatile int pthread_spinlock_t;
+typedef union
+{
+  char __size[32];
+  long int __align;
+} pthread_barrier_t;
+typedef union
+{
+  char __size[4];
+  int __align;
+} pthread_barrierattr_t;
+}
+extern long int random (void) throw ();
+extern void srandom (unsigned int __seed) throw ();
+extern char *initstate (unsigned int __seed, char *__statebuf,
+   size_t __statelen) throw () __attribute__ ((__nonnull__ (2)));
+extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1)));
+struct random_data
+  {
+    int32_t *fptr;
+    int32_t *rptr;
+    int32_t *state;
+    int rand_type;
+    int rand_deg;
+    int rand_sep;
+    int32_t *end_ptr;
+  };
+extern int random_r (struct random_data *__restrict __buf,
+       int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int srandom_r (unsigned int __seed, struct random_data *__buf)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
+   size_t __statelen,
+   struct random_data *__restrict __buf)
+     throw () __attribute__ ((__nonnull__ (2, 4)));
+extern int setstate_r (char *__restrict __statebuf,
+         struct random_data *__restrict __buf)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int rand (void) throw ();
+extern void srand (unsigned int __seed) throw ();
+extern int rand_r (unsigned int *__seed) throw ();
+extern double drand48 (void) throw ();
+extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1)));
+extern long int lrand48 (void) throw ();
+extern long int nrand48 (unsigned short int __xsubi[3])
+     throw () __attribute__ ((__nonnull__ (1)));
+extern long int mrand48 (void) throw ();
+extern long int jrand48 (unsigned short int __xsubi[3])
+     throw () __attribute__ ((__nonnull__ (1)));
+extern void srand48 (long int __seedval) throw ();
+extern unsigned short int *seed48 (unsigned short int __seed16v[3])
+     throw () __attribute__ ((__nonnull__ (1)));
+extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1)));
+struct drand48_data
+  {
+    unsigned short int __x[3];
+    unsigned short int __old_x[3];
+    unsigned short int __c;
+    unsigned short int __init;
+    unsigned long long int __a;
+  };
+extern int drand48_r (struct drand48_data *__restrict __buffer,
+        double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int erand48_r (unsigned short int __xsubi[3],
+        struct drand48_data *__restrict __buffer,
+        double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int lrand48_r (struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int nrand48_r (unsigned short int __xsubi[3],
+        struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int mrand48_r (struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int jrand48_r (unsigned short int __xsubi[3],
+        struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern int seed48_r (unsigned short int __seed16v[3],
+       struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int lcong48_r (unsigned short int __param[7],
+        struct drand48_data *__buffer)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
+extern void *calloc (size_t __nmemb, size_t __size)
+     throw () __attribute__ ((__malloc__)) ;
+extern void *realloc (void *__ptr, size_t __size)
+     throw () __attribute__ ((__warn_unused_result__));
+extern void free (void *__ptr) throw ();
+extern void cfree (void *__ptr) throw ();
+extern "C" {
+extern void *alloca (size_t __size) throw ();
+}
+extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
+extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern void abort (void) throw () __attribute__ ((__noreturn__));
+extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1)));
+extern "C++" int at_quick_exit (void (*__func) (void))
+     throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1)));
+extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern void exit (int __status) throw () __attribute__ ((__noreturn__));
+extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__));
+extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));
+extern char *getenv (__const char *__name) throw () __attribute__ ((__nonnull__ (1))) ;
+extern char *__secure_getenv (__const char *__name)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1)));
+extern int setenv (__const char *__name, __const char *__value, int __replace)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern int unsetenv (__const char *__name) throw ();
+extern int clearenv (void) throw ();
+extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ;
+extern int mkstemp (char *__template) __asm__ ("" "mkstemp64")
+     __attribute__ ((__nonnull__ (1))) ;
+extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ;
+extern int mkstemps (char *__template, int __suffixlen) __asm__ ("" "mkstemps64") __attribute__ ((__nonnull__ (1))) ;
+extern int mkstemps64 (char *__template, int __suffixlen)
+     __attribute__ ((__nonnull__ (1))) ;
+extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ;
+extern int mkostemp (char *__template, int __flags) __asm__ ("" "mkostemp64")
+     __attribute__ ((__nonnull__ (1))) ;
+extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
+extern int mkostemps (char *__template, int __suffixlen, int __flags) __asm__ ("" "mkostemps64")
+     __attribute__ ((__nonnull__ (1))) ;
+extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
+     __attribute__ ((__nonnull__ (1))) ;
+extern int system (__const char *__command) ;
+extern char *canonicalize_file_name (__const char *__name)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern char *realpath (__const char *__restrict __name,
+         char *__restrict __resolved) throw () ;
+typedef int (*__compar_fn_t) (__const void *, __const void *);
+typedef __compar_fn_t comparison_fn_t;
+typedef int (*__compar_d_fn_t) (__const void *, __const void *, void *);
+extern void *bsearch (__const void *__key, __const void *__base,
+        size_t __nmemb, size_t __size, __compar_fn_t __compar)
+     __attribute__ ((__nonnull__ (1, 2, 5))) ;
+extern void qsort (void *__base, size_t __nmemb, size_t __size,
+     __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
+extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
+       __compar_d_fn_t __compar, void *__arg)
+  __attribute__ ((__nonnull__ (1, 4)));
+extern int abs (int __x) throw () __attribute__ ((__const__)) ;
+extern long int labs (long int __x) throw () __attribute__ ((__const__)) ;
+__extension__ extern long long int llabs (long long int __x)
+     throw () __attribute__ ((__const__)) ;
+extern div_t div (int __numer, int __denom)
+     throw () __attribute__ ((__const__)) ;
+extern ldiv_t ldiv (long int __numer, long int __denom)
+     throw () __attribute__ ((__const__)) ;
+__extension__ extern lldiv_t lldiv (long long int __numer,
+        long long int __denom)
+     throw () __attribute__ ((__const__)) ;
+extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
+extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
+extern char *gcvt (double __value, int __ndigit, char *__buf)
+     throw () __attribute__ ((__nonnull__ (3))) ;
+extern char *qecvt (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign)
+     throw () __attribute__ ((__nonnull__ (3, 4))) ;
+extern char *qfcvt (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign)
+     throw () __attribute__ ((__nonnull__ (3, 4))) ;
+extern char *qgcvt (long double __value, int __ndigit, char *__buf)
+     throw () __attribute__ ((__nonnull__ (3))) ;
+extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign, char *__restrict __buf,
+     size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign, char *__restrict __buf,
+     size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+extern int qecvt_r (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign,
+      char *__restrict __buf, size_t __len)
+     throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+extern int qfcvt_r (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign,
+      char *__restrict __buf, size_t __len)
+     throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+extern int mblen (__const char *__s, size_t __n) throw () ;
+extern int mbtowc (wchar_t *__restrict __pwc,
+     __const char *__restrict __s, size_t __n) throw () ;
+extern int wctomb (char *__s, wchar_t __wchar) throw () ;
+extern size_t mbstowcs (wchar_t *__restrict __pwcs,
+   __const char *__restrict __s, size_t __n) throw ();
+extern size_t wcstombs (char *__restrict __s,
+   __const wchar_t *__restrict __pwcs, size_t __n)
+     throw ();
+extern int rpmatch (__const char *__response) throw () __attribute__ ((__nonnull__ (1))) ;
+extern int getsubopt (char **__restrict __optionp,
+        char *__const *__restrict __tokens,
+        char **__restrict __valuep)
+     throw () __attribute__ ((__nonnull__ (1, 2, 3))) ;
+extern void setkey (__const char *__key) throw () __attribute__ ((__nonnull__ (1)));
+extern int posix_openpt (int __oflag) ;
+extern int grantpt (int __fd) throw ();
+extern int unlockpt (int __fd) throw ();
+extern char *ptsname (int __fd) throw () ;
+extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern int getpt (void);
+extern int getloadavg (double __loadavg[], int __nelem)
+     throw () __attribute__ ((__nonnull__ (1)));
+}
+extern "C" {
+typedef __intptr_t intptr_t;
+typedef __socklen_t socklen_t;
+extern int access (__const char *__name, int __type) throw () __attribute__ ((__nonnull__ (1)));
+extern int euidaccess (__const char *__name, int __type)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int eaccess (__const char *__name, int __type)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int faccessat (int __fd, __const char *__file, int __type, int __flag)
+     throw () __attribute__ ((__nonnull__ (2))) ;
+extern __off64_t lseek (int __fd, __off64_t __offset, int __whence) throw () __asm__ ("" "lseek64");
+extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence)
+     throw ();
+extern int close (int __fd);
+extern ssize_t read (int __fd, void *__buf, size_t __nbytes) ;
+extern ssize_t write (int __fd, __const void *__buf, size_t __n) ;
+extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pread64") ;
+extern ssize_t pwrite (int __fd, __const void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pwrite64") ;
+extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
+   __off64_t __offset) ;
+extern ssize_t pwrite64 (int __fd, __const void *__buf, size_t __n,
+    __off64_t __offset) ;
+extern int pipe (int __pipedes[2]) throw () ;
+extern int pipe2 (int __pipedes[2], int __flags) throw () ;
+extern unsigned int alarm (unsigned int __seconds) throw ();
+extern unsigned int sleep (unsigned int __seconds);
+extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
+     throw ();
+extern int usleep (__useconds_t __useconds);
+extern int pause (void);
+extern int chown (__const char *__file, __uid_t __owner, __gid_t __group)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern int fchown (int __fd, __uid_t __owner, __gid_t __group) throw () ;
+extern int lchown (__const char *__file, __uid_t __owner, __gid_t __group)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern int fchownat (int __fd, __const char *__file, __uid_t __owner,
+       __gid_t __group, int __flag)
+     throw () __attribute__ ((__nonnull__ (2))) ;
+extern int chdir (__const char *__path) throw () __attribute__ ((__nonnull__ (1))) ;
+extern int fchdir (int __fd) throw () ;
+extern char *getcwd (char *__buf, size_t __size) throw () ;
+extern char *get_current_dir_name (void) throw ();
+extern char *getwd (char *__buf)
+     throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) ;
+extern int dup (int __fd) throw () ;
+extern int dup2 (int __fd, int __fd2) throw ();
+extern int dup3 (int __fd, int __fd2, int __flags) throw ();
+extern char **__environ;
+extern char **environ;
+extern int execve (__const char *__path, char *__const __argv[],
+     char *__const __envp[]) throw () __attribute__ ((__nonnull__ (1)));
+extern int fexecve (int __fd, char *__const __argv[], char *__const __envp[])
+     throw ();
+extern int execv (__const char *__path, char *__const __argv[])
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int execle (__const char *__path, __const char *__arg, ...)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int execl (__const char *__path, __const char *__arg, ...)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int execvp (__const char *__file, char *__const __argv[])
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int execlp (__const char *__file, __const char *__arg, ...)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int execvpe (__const char *__file, char *__const __argv[],
+      char *__const __envp[])
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int nice (int __inc) throw () ;
+extern void _exit (int __status) __attribute__ ((__noreturn__));
+enum
+  {
+    _PC_LINK_MAX,
+    _PC_MAX_CANON,
+    _PC_MAX_INPUT,
+    _PC_NAME_MAX,
+    _PC_PATH_MAX,
+    _PC_PIPE_BUF,
+    _PC_CHOWN_RESTRICTED,
+    _PC_NO_TRUNC,
+    _PC_VDISABLE,
+    _PC_SYNC_IO,
+    _PC_ASYNC_IO,
+    _PC_PRIO_IO,
+    _PC_SOCK_MAXBUF,
+    _PC_FILESIZEBITS,
+    _PC_REC_INCR_XFER_SIZE,
+    _PC_REC_MAX_XFER_SIZE,
+    _PC_REC_MIN_XFER_SIZE,
+    _PC_REC_XFER_ALIGN,
+    _PC_ALLOC_SIZE_MIN,
+    _PC_SYMLINK_MAX,
+    _PC_2_SYMLINKS
+  };
+enum
+  {
+    _SC_ARG_MAX,
+    _SC_CHILD_MAX,
+    _SC_CLK_TCK,
+    _SC_NGROUPS_MAX,
+    _SC_OPEN_MAX,
+    _SC_STREAM_MAX,
+    _SC_TZNAME_MAX,
+    _SC_JOB_CONTROL,
+    _SC_SAVED_IDS,
+    _SC_REALTIME_SIGNALS,
+    _SC_PRIORITY_SCHEDULING,
+    _SC_TIMERS,
+    _SC_ASYNCHRONOUS_IO,
+    _SC_PRIORITIZED_IO,
+    _SC_SYNCHRONIZED_IO,
+    _SC_FSYNC,
+    _SC_MAPPED_FILES,
+    _SC_MEMLOCK,
+    _SC_MEMLOCK_RANGE,
+    _SC_MEMORY_PROTECTION,
+    _SC_MESSAGE_PASSING,
+    _SC_SEMAPHORES,
+    _SC_SHARED_MEMORY_OBJECTS,
+    _SC_AIO_LISTIO_MAX,
+    _SC_AIO_MAX,
+    _SC_AIO_PRIO_DELTA_MAX,
+    _SC_DELAYTIMER_MAX,
+    _SC_MQ_OPEN_MAX,
+    _SC_MQ_PRIO_MAX,
+    _SC_VERSION,
+    _SC_PAGESIZE,
+    _SC_RTSIG_MAX,
+    _SC_SEM_NSEMS_MAX,
+    _SC_SEM_VALUE_MAX,
+    _SC_SIGQUEUE_MAX,
+    _SC_TIMER_MAX,
+    _SC_BC_BASE_MAX,
+    _SC_BC_DIM_MAX,
+    _SC_BC_SCALE_MAX,
+    _SC_BC_STRING_MAX,
+    _SC_COLL_WEIGHTS_MAX,
+    _SC_EQUIV_CLASS_MAX,
+    _SC_EXPR_NEST_MAX,
+    _SC_LINE_MAX,
+    _SC_RE_DUP_MAX,
+    _SC_CHARCLASS_NAME_MAX,
+    _SC_2_VERSION,
+    _SC_2_C_BIND,
+    _SC_2_C_DEV,
+    _SC_2_FORT_DEV,
+    _SC_2_FORT_RUN,
+    _SC_2_SW_DEV,
+    _SC_2_LOCALEDEF,
+    _SC_PII,
+    _SC_PII_XTI,
+    _SC_PII_SOCKET,
+    _SC_PII_INTERNET,
+    _SC_PII_OSI,
+    _SC_POLL,
+    _SC_SELECT,
+    _SC_UIO_MAXIOV,
+    _SC_IOV_MAX = _SC_UIO_MAXIOV,
+    _SC_PII_INTERNET_STREAM,
+    _SC_PII_INTERNET_DGRAM,
+    _SC_PII_OSI_COTS,
+    _SC_PII_OSI_CLTS,
+    _SC_PII_OSI_M,
+    _SC_T_IOV_MAX,
+    _SC_THREADS,
+    _SC_THREAD_SAFE_FUNCTIONS,
+    _SC_GETGR_R_SIZE_MAX,
+    _SC_GETPW_R_SIZE_MAX,
+    _SC_LOGIN_NAME_MAX,
+    _SC_TTY_NAME_MAX,
+    _SC_THREAD_DESTRUCTOR_ITERATIONS,
+    _SC_THREAD_KEYS_MAX,
+    _SC_THREAD_STACK_MIN,
+    _SC_THREAD_THREADS_MAX,
+    _SC_THREAD_ATTR_STACKADDR,
+    _SC_THREAD_ATTR_STACKSIZE,
+    _SC_THREAD_PRIORITY_SCHEDULING,
+    _SC_THREAD_PRIO_INHERIT,
+    _SC_THREAD_PRIO_PROTECT,
+    _SC_THREAD_PROCESS_SHARED,
+    _SC_NPROCESSORS_CONF,
+    _SC_NPROCESSORS_ONLN,
+    _SC_PHYS_PAGES,
+    _SC_AVPHYS_PAGES,
+    _SC_ATEXIT_MAX,
+    _SC_PASS_MAX,
+    _SC_XOPEN_VERSION,
+    _SC_XOPEN_XCU_VERSION,
+    _SC_XOPEN_UNIX,
+    _SC_XOPEN_CRYPT,
+    _SC_XOPEN_ENH_I18N,
+    _SC_XOPEN_SHM,
+    _SC_2_CHAR_TERM,
+    _SC_2_C_VERSION,
+    _SC_2_UPE,
+    _SC_XOPEN_XPG2,
+    _SC_XOPEN_XPG3,
+    _SC_XOPEN_XPG4,
+    _SC_CHAR_BIT,
+    _SC_CHAR_MAX,
+    _SC_CHAR_MIN,
+    _SC_INT_MAX,
+    _SC_INT_MIN,
+    _SC_LONG_BIT,
+    _SC_WORD_BIT,
+    _SC_MB_LEN_MAX,
+    _SC_NZERO,
+    _SC_SSIZE_MAX,
+    _SC_SCHAR_MAX,
+    _SC_SCHAR_MIN,
+    _SC_SHRT_MAX,
+    _SC_SHRT_MIN,
+    _SC_UCHAR_MAX,
+    _SC_UINT_MAX,
+    _SC_ULONG_MAX,
+    _SC_USHRT_MAX,
+    _SC_NL_ARGMAX,
+    _SC_NL_LANGMAX,
+    _SC_NL_MSGMAX,
+    _SC_NL_NMAX,
+    _SC_NL_SETMAX,
+    _SC_NL_TEXTMAX,
+    _SC_XBS5_ILP32_OFF32,
+    _SC_XBS5_ILP32_OFFBIG,
+    _SC_XBS5_LP64_OFF64,
+    _SC_XBS5_LPBIG_OFFBIG,
+    _SC_XOPEN_LEGACY,
+    _SC_XOPEN_REALTIME,
+    _SC_XOPEN_REALTIME_THREADS,
+    _SC_ADVISORY_INFO,
+    _SC_BARRIERS,
+    _SC_BASE,
+    _SC_C_LANG_SUPPORT,
+    _SC_C_LANG_SUPPORT_R,
+    _SC_CLOCK_SELECTION,
+    _SC_CPUTIME,
+    _SC_THREAD_CPUTIME,
+    _SC_DEVICE_IO,
+    _SC_DEVICE_SPECIFIC,
+    _SC_DEVICE_SPECIFIC_R,
+    _SC_FD_MGMT,
+    _SC_FIFO,
+    _SC_PIPE,
+    _SC_FILE_ATTRIBUTES,
+    _SC_FILE_LOCKING,
+    _SC_FILE_SYSTEM,
+    _SC_MONOTONIC_CLOCK,
+    _SC_MULTI_PROCESS,
+    _SC_SINGLE_PROCESS,
+    _SC_NETWORKING,
+    _SC_READER_WRITER_LOCKS,
+    _SC_SPIN_LOCKS,
+    _SC_REGEXP,
+    _SC_REGEX_VERSION,
+    _SC_SHELL,
+    _SC_SIGNALS,
+    _SC_SPAWN,
+    _SC_SPORADIC_SERVER,
+    _SC_THREAD_SPORADIC_SERVER,
+    _SC_SYSTEM_DATABASE,
+    _SC_SYSTEM_DATABASE_R,
+    _SC_TIMEOUTS,
+    _SC_TYPED_MEMORY_OBJECTS,
+    _SC_USER_GROUPS,
+    _SC_USER_GROUPS_R,
+    _SC_2_PBS,
+    _SC_2_PBS_ACCOUNTING,
+    _SC_2_PBS_LOCATE,
+    _SC_2_PBS_MESSAGE,
+    _SC_2_PBS_TRACK,
+    _SC_SYMLOOP_MAX,
+    _SC_STREAMS,
+    _SC_2_PBS_CHECKPOINT,
+    _SC_V6_ILP32_OFF32,
+    _SC_V6_ILP32_OFFBIG,
+    _SC_V6_LP64_OFF64,
+    _SC_V6_LPBIG_OFFBIG,
+    _SC_HOST_NAME_MAX,
+    _SC_TRACE,
+    _SC_TRACE_EVENT_FILTER,
+    _SC_TRACE_INHERIT,
+    _SC_TRACE_LOG,
+    _SC_LEVEL1_ICACHE_SIZE,
+    _SC_LEVEL1_ICACHE_ASSOC,
+    _SC_LEVEL1_ICACHE_LINESIZE,
+    _SC_LEVEL1_DCACHE_SIZE,
+    _SC_LEVEL1_DCACHE_ASSOC,
+    _SC_LEVEL1_DCACHE_LINESIZE,
+    _SC_LEVEL2_CACHE_SIZE,
+    _SC_LEVEL2_CACHE_ASSOC,
+    _SC_LEVEL2_CACHE_LINESIZE,
+    _SC_LEVEL3_CACHE_SIZE,
+    _SC_LEVEL3_CACHE_ASSOC,
+    _SC_LEVEL3_CACHE_LINESIZE,
+    _SC_LEVEL4_CACHE_SIZE,
+    _SC_LEVEL4_CACHE_ASSOC,
+    _SC_LEVEL4_CACHE_LINESIZE,
+    _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
+    _SC_RAW_SOCKETS,
+    _SC_V7_ILP32_OFF32,
+    _SC_V7_ILP32_OFFBIG,
+    _SC_V7_LP64_OFF64,
+    _SC_V7_LPBIG_OFFBIG,
+    _SC_SS_REPL_MAX,
+    _SC_TRACE_EVENT_NAME_MAX,
+    _SC_TRACE_NAME_MAX,
+    _SC_TRACE_SYS_MAX,
+    _SC_TRACE_USER_EVENT_MAX,
+    _SC_XOPEN_STREAMS,
+    _SC_THREAD_ROBUST_PRIO_INHERIT,
+    _SC_THREAD_ROBUST_PRIO_PROTECT
+  };
+enum
+  {
+    _CS_PATH,
+    _CS_V6_WIDTH_RESTRICTED_ENVS,
+    _CS_GNU_LIBC_VERSION,
+    _CS_GNU_LIBPTHREAD_VERSION,
+    _CS_V5_WIDTH_RESTRICTED_ENVS,
+    _CS_V7_WIDTH_RESTRICTED_ENVS,
+    _CS_LFS_CFLAGS = 1000,
+    _CS_LFS_LDFLAGS,
+    _CS_LFS_LIBS,
+    _CS_LFS_LINTFLAGS,
+    _CS_LFS64_CFLAGS,
+    _CS_LFS64_LDFLAGS,
+    _CS_LFS64_LIBS,
+    _CS_LFS64_LINTFLAGS,
+    _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,
+    _CS_XBS5_ILP32_OFF32_LDFLAGS,
+    _CS_XBS5_ILP32_OFF32_LIBS,
+    _CS_XBS5_ILP32_OFF32_LINTFLAGS,
+    _CS_XBS5_ILP32_OFFBIG_CFLAGS,
+    _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
+    _CS_XBS5_ILP32_OFFBIG_LIBS,
+    _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
+    _CS_XBS5_LP64_OFF64_CFLAGS,
+    _CS_XBS5_LP64_OFF64_LDFLAGS,
+    _CS_XBS5_LP64_OFF64_LIBS,
+    _CS_XBS5_LP64_OFF64_LINTFLAGS,
+    _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
+    _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
+    _CS_XBS5_LPBIG_OFFBIG_LIBS,
+    _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
+    _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
+    _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
+    _CS_POSIX_V6_ILP32_OFF32_LIBS,
+    _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
+    _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
+    _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
+    _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
+    _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
+    _CS_POSIX_V6_LP64_OFF64_CFLAGS,
+    _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
+    _CS_POSIX_V6_LP64_OFF64_LIBS,
+    _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
+    _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
+    _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
+    _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
+    _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
+    _CS_POSIX_V7_ILP32_OFF32_CFLAGS,
+    _CS_POSIX_V7_ILP32_OFF32_LDFLAGS,
+    _CS_POSIX_V7_ILP32_OFF32_LIBS,
+    _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS,
+    _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS,
+    _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS,
+    _CS_POSIX_V7_ILP32_OFFBIG_LIBS,
+    _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS,
+    _CS_POSIX_V7_LP64_OFF64_CFLAGS,
+    _CS_POSIX_V7_LP64_OFF64_LDFLAGS,
+    _CS_POSIX_V7_LP64_OFF64_LIBS,
+    _CS_POSIX_V7_LP64_OFF64_LINTFLAGS,
+    _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS,
+    _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS,
+    _CS_POSIX_V7_LPBIG_OFFBIG_LIBS,
+    _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
+  };
+extern long int pathconf (__const char *__path, int __name)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern long int fpathconf (int __fd, int __name) throw ();
+extern long int sysconf (int __name) throw ();
+extern size_t confstr (int __name, char *__buf, size_t __len) throw ();
+extern __pid_t getpid (void) throw ();
+extern __pid_t getppid (void) throw ();
+extern __pid_t getpgrp (void) throw ();
+extern __pid_t __getpgid (__pid_t __pid) throw ();
+extern __pid_t getpgid (__pid_t __pid) throw ();
+extern int setpgid (__pid_t __pid, __pid_t __pgid) throw ();
+extern int setpgrp (void) throw ();
+extern __pid_t setsid (void) throw ();
+extern __pid_t getsid (__pid_t __pid) throw ();
+extern __uid_t getuid (void) throw ();
+extern __uid_t geteuid (void) throw ();
+extern __gid_t getgid (void) throw ();
+extern __gid_t getegid (void) throw ();
+extern int getgroups (int __size, __gid_t __list[]) throw () ;
+extern int group_member (__gid_t __gid) throw ();
+extern int setuid (__uid_t __uid) throw ();
+extern int setreuid (__uid_t __ruid, __uid_t __euid) throw ();
+extern int seteuid (__uid_t __uid) throw ();
+extern int setgid (__gid_t __gid) throw ();
+extern int setregid (__gid_t __rgid, __gid_t __egid) throw ();
+extern int setegid (__gid_t __gid) throw ();
+extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid)
+     throw ();
+extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid)
+     throw ();
+extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid)
+     throw ();
+extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid)
+     throw ();
+extern __pid_t fork (void) throw ();
+extern __pid_t vfork (void) throw ();
+extern char *ttyname (int __fd) throw ();
+extern int ttyname_r (int __fd, char *__buf, size_t __buflen)
+     throw () __attribute__ ((__nonnull__ (2))) ;
+extern int isatty (int __fd) throw ();
+extern int ttyslot (void) throw ();
+extern int link (__const char *__from, __const char *__to)
+     throw () __attribute__ ((__nonnull__ (1, 2))) ;
+extern int linkat (int __fromfd, __const char *__from, int __tofd,
+     __const char *__to, int __flags)
+     throw () __attribute__ ((__nonnull__ (2, 4))) ;
+extern int symlink (__const char *__from, __const char *__to)
+     throw () __attribute__ ((__nonnull__ (1, 2))) ;
+extern ssize_t readlink (__const char *__restrict __path,
+    char *__restrict __buf, size_t __len)
+     throw () __attribute__ ((__nonnull__ (1, 2))) ;
+extern int symlinkat (__const char *__from, int __tofd,
+        __const char *__to) throw () __attribute__ ((__nonnull__ (1, 3))) ;
+extern ssize_t readlinkat (int __fd, __const char *__restrict __path,
+      char *__restrict __buf, size_t __len)
+     throw () __attribute__ ((__nonnull__ (2, 3))) ;
+extern int unlink (__const char *__name) throw () __attribute__ ((__nonnull__ (1)));
+extern int unlinkat (int __fd, __const char *__name, int __flag)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern int rmdir (__const char *__path) throw () __attribute__ ((__nonnull__ (1)));
+extern __pid_t tcgetpgrp (int __fd) throw ();
+extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) throw ();
+extern char *getlogin (void);
+extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1)));
+extern int setlogin (__const char *__name) throw () __attribute__ ((__nonnull__ (1)));
+extern "C" {
+extern char *optarg;
+extern int optind;
+extern int opterr;
+extern int optopt;
+extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+       throw ();
+}
+extern int gethostname (char *__name, size_t __len) throw () __attribute__ ((__nonnull__ (1)));
+extern int sethostname (__const char *__name, size_t __len)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern int sethostid (long int __id) throw () ;
+extern int getdomainname (char *__name, size_t __len)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern int setdomainname (__const char *__name, size_t __len)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern int vhangup (void) throw ();
+extern int revoke (__const char *__file) throw () __attribute__ ((__nonnull__ (1))) ;
+extern int profil (unsigned short int *__sample_buffer, size_t __size,
+     size_t __offset, unsigned int __scale)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int acct (__const char *__name) throw ();
+extern char *getusershell (void) throw ();
+extern void endusershell (void) throw ();
+extern void setusershell (void) throw ();
+extern int daemon (int __nochdir, int __noclose) throw () ;
+extern int chroot (__const char *__path) throw () __attribute__ ((__nonnull__ (1))) ;
+extern char *getpass (__const char *__prompt) __attribute__ ((__nonnull__ (1)));
+extern int fsync (int __fd);
+extern long int gethostid (void);
+extern void sync (void) throw ();
+extern int getpagesize (void) throw () __attribute__ ((__const__));
+extern int getdtablesize (void) throw ();
+extern int truncate (__const char *__file, __off64_t __length) throw () __asm__ ("" "truncate64") __attribute__ ((__nonnull__ (1))) ;
+extern int truncate64 (__const char *__file, __off64_t __length)
+     throw () __attribute__ ((__nonnull__ (1))) ;
+extern int ftruncate (int __fd, __off64_t __length) throw () __asm__ ("" "ftruncate64") ;
+extern int ftruncate64 (int __fd, __off64_t __length) throw () ;
+extern int brk (void *__addr) throw () ;
+extern void *sbrk (intptr_t __delta) throw ();
+extern long int syscall (long int __sysno, ...) throw ();
+extern int lockf (int __fd, int __cmd, __off64_t __len) __asm__ ("" "lockf64") ;
+extern int lockf64 (int __fd, int __cmd, __off64_t __len) ;
+extern int fdatasync (int __fildes);
+extern char *crypt (__const char *__key, __const char *__salt)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern void encrypt (char *__block, int __edflag) throw () __attribute__ ((__nonnull__ (1)));
+extern void swab (__const void *__restrict __from, void *__restrict __to,
+    ssize_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern char *ctermid (char *__s) throw ();
+}
+extern "C" {
+extern void __assert_fail (__const char *__assertion, __const char *__file,
+      unsigned int __line, __const char *__function)
+     throw () __attribute__ ((__noreturn__));
+extern void __assert_perror_fail (int __errnum, __const char *__file,
+      unsigned int __line,
+      __const char *__function)
+     throw () __attribute__ ((__noreturn__));
+extern void __assert (const char *__assertion, const char *__file, int __line)
+     throw () __attribute__ ((__noreturn__));
+}
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long int uint64_t;
+typedef signed char int_least8_t;
+typedef short int int_least16_t;
+typedef int int_least32_t;
+typedef long int int_least64_t;
+typedef unsigned char uint_least8_t;
+typedef unsigned short int uint_least16_t;
+typedef unsigned int uint_least32_t;
+typedef unsigned long int uint_least64_t;
+typedef signed char int_fast8_t;
+typedef long int int_fast16_t;
+typedef long int int_fast32_t;
+typedef long int int_fast64_t;
+typedef unsigned char uint_fast8_t;
+typedef unsigned long int uint_fast16_t;
+typedef unsigned long int uint_fast32_t;
+typedef unsigned long int uint_fast64_t;
+typedef unsigned long int uintptr_t;
+typedef long int intmax_t;
+typedef unsigned long int uintmax_t;
+typedef uintptr_t Py_uintptr_t;
+typedef intptr_t Py_intptr_t;
+typedef ssize_t Py_ssize_t;
+extern "C" {
+typedef float float_t;
+typedef double double_t;
+extern double acos (double __x) throw (); extern double __acos (double __x) throw ();
+extern double asin (double __x) throw (); extern double __asin (double __x) throw ();
+extern double atan (double __x) throw (); extern double __atan (double __x) throw ();
+extern double atan2 (double __y, double __x) throw (); extern double __atan2 (double __y, double __x) throw ();
+extern double cos (double __x) throw (); extern double __cos (double __x) throw ();
+extern double sin (double __x) throw (); extern double __sin (double __x) throw ();
+extern double tan (double __x) throw (); extern double __tan (double __x) throw ();
+extern double cosh (double __x) throw (); extern double __cosh (double __x) throw ();
+extern double sinh (double __x) throw (); extern double __sinh (double __x) throw ();
+extern double tanh (double __x) throw (); extern double __tanh (double __x) throw ();
+extern void sincos (double __x, double *__sinx, double *__cosx) throw (); extern void __sincos (double __x, double *__sinx, double *__cosx) throw ();
+extern double acosh (double __x) throw (); extern double __acosh (double __x) throw ();
+extern double asinh (double __x) throw (); extern double __asinh (double __x) throw ();
+extern double atanh (double __x) throw (); extern double __atanh (double __x) throw ();
+extern double exp (double __x) throw (); extern double __exp (double __x) throw ();
+extern double frexp (double __x, int *__exponent) throw (); extern double __frexp (double __x, int *__exponent) throw ();
+extern double ldexp (double __x, int __exponent) throw (); extern double __ldexp (double __x, int __exponent) throw ();
+extern double log (double __x) throw (); extern double __log (double __x) throw ();
+extern double log10 (double __x) throw (); extern double __log10 (double __x) throw ();
+extern double modf (double __x, double *__iptr) throw (); extern double __modf (double __x, double *__iptr) throw ();
+extern double exp10 (double __x) throw (); extern double __exp10 (double __x) throw ();
+extern double pow10 (double __x) throw (); extern double __pow10 (double __x) throw ();
+extern double expm1 (double __x) throw (); extern double __expm1 (double __x) throw ();
+extern double log1p (double __x) throw (); extern double __log1p (double __x) throw ();
+extern double logb (double __x) throw (); extern double __logb (double __x) throw ();
+extern double exp2 (double __x) throw (); extern double __exp2 (double __x) throw ();
+extern double log2 (double __x) throw (); extern double __log2 (double __x) throw ();
+extern double pow (double __x, double __y) throw (); extern double __pow (double __x, double __y) throw ();
+extern double sqrt (double __x) throw (); extern double __sqrt (double __x) throw ();
+extern double hypot (double __x, double __y) throw (); extern double __hypot (double __x, double __y) throw ();
+extern double cbrt (double __x) throw (); extern double __cbrt (double __x) throw ();
+extern double ceil (double __x) throw () __attribute__ ((__const__)); extern double __ceil (double __x) throw () __attribute__ ((__const__));
+extern double fabs (double __x) throw () __attribute__ ((__const__)); extern double __fabs (double __x) throw () __attribute__ ((__const__));
+extern double floor (double __x) throw () __attribute__ ((__const__)); extern double __floor (double __x) throw () __attribute__ ((__const__));
+extern double fmod (double __x, double __y) throw (); extern double __fmod (double __x, double __y) throw ();
+extern int __isinf (double __value) throw () __attribute__ ((__const__));
+extern int __finite (double __value) throw () __attribute__ ((__const__));
+extern int isinf (double __value) throw () __attribute__ ((__const__));
+extern int finite (double __value) throw () __attribute__ ((__const__));
+extern double drem (double __x, double __y) throw (); extern double __drem (double __x, double __y) throw ();
+extern double significand (double __x) throw (); extern double __significand (double __x) throw ();
+extern double copysign (double __x, double __y) throw () __attribute__ ((__const__)); extern double __copysign (double __x, double __y) throw () __attribute__ ((__const__));
+extern double nan (__const char *__tagb) throw () __attribute__ ((__const__)); extern double __nan (__const char *__tagb) throw () __attribute__ ((__const__));
+extern int __isnan (double __value) throw () __attribute__ ((__const__));
+extern int isnan (double __value) throw () __attribute__ ((__const__));
+extern double j0 (double) throw (); extern double __j0 (double) throw ();
+extern double j1 (double) throw (); extern double __j1 (double) throw ();
+extern double jn (int, double) throw (); extern double __jn (int, double) throw ();
+extern double y0 (double) throw (); extern double __y0 (double) throw ();
+extern double y1 (double) throw (); extern double __y1 (double) throw ();
+extern double yn (int, double) throw (); extern double __yn (int, double) throw ();
+extern double erf (double) throw (); extern double __erf (double) throw ();
+extern double erfc (double) throw (); extern double __erfc (double) throw ();
+extern double lgamma (double) throw (); extern double __lgamma (double) throw ();
+extern double tgamma (double) throw (); extern double __tgamma (double) throw ();
+extern double gamma (double) throw (); extern double __gamma (double) throw ();
+extern double lgamma_r (double, int *__signgamp) throw (); extern double __lgamma_r (double, int *__signgamp) throw ();
+extern double rint (double __x) throw (); extern double __rint (double __x) throw ();
+extern double nextafter (double __x, double __y) throw () __attribute__ ((__const__)); extern double __nextafter (double __x, double __y) throw () __attribute__ ((__const__));
+extern double nexttoward (double __x, long double __y) throw () __attribute__ ((__const__)); extern double __nexttoward (double __x, long double __y) throw () __attribute__ ((__const__));
+extern double remainder (double __x, double __y) throw (); extern double __remainder (double __x, double __y) throw ();
+extern double scalbn (double __x, int __n) throw (); extern double __scalbn (double __x, int __n) throw ();
+extern int ilogb (double __x) throw (); extern int __ilogb (double __x) throw ();
+extern double scalbln (double __x, long int __n) throw (); extern double __scalbln (double __x, long int __n) throw ();
+extern double nearbyint (double __x) throw (); extern double __nearbyint (double __x) throw ();
+extern double round (double __x) throw () __attribute__ ((__const__)); extern double __round (double __x) throw () __attribute__ ((__const__));
+extern double trunc (double __x) throw () __attribute__ ((__const__)); extern double __trunc (double __x) throw () __attribute__ ((__const__));
+extern double remquo (double __x, double __y, int *__quo) throw (); extern double __remquo (double __x, double __y, int *__quo) throw ();
+extern long int lrint (double __x) throw (); extern long int __lrint (double __x) throw ();
+extern long long int llrint (double __x) throw (); extern long long int __llrint (double __x) throw ();
+extern long int lround (double __x) throw (); extern long int __lround (double __x) throw ();
+extern long long int llround (double __x) throw (); extern long long int __llround (double __x) throw ();
+extern double fdim (double __x, double __y) throw (); extern double __fdim (double __x, double __y) throw ();
+extern double fmax (double __x, double __y) throw (); extern double __fmax (double __x, double __y) throw ();
+extern double fmin (double __x, double __y) throw (); extern double __fmin (double __x, double __y) throw ();
+extern int __fpclassify (double __value) throw ()
+     __attribute__ ((__const__));
+extern int __signbit (double __value) throw ()
+     __attribute__ ((__const__));
+extern double fma (double __x, double __y, double __z) throw (); extern double __fma (double __x, double __y, double __z) throw ();
+extern double scalb (double __x, double __n) throw (); extern double __scalb (double __x, double __n) throw ();
+extern float acosf (float __x) throw (); extern float __acosf (float __x) throw ();
+extern float asinf (float __x) throw (); extern float __asinf (float __x) throw ();
+extern float atanf (float __x) throw (); extern float __atanf (float __x) throw ();
+extern float atan2f (float __y, float __x) throw (); extern float __atan2f (float __y, float __x) throw ();
+extern float cosf (float __x) throw (); extern float __cosf (float __x) throw ();
+extern float sinf (float __x) throw (); extern float __sinf (float __x) throw ();
+extern float tanf (float __x) throw (); extern float __tanf (float __x) throw ();
+extern float coshf (float __x) throw (); extern float __coshf (float __x) throw ();
+extern float sinhf (float __x) throw (); extern float __sinhf (float __x) throw ();
+extern float tanhf (float __x) throw (); extern float __tanhf (float __x) throw ();
+extern void sincosf (float __x, float *__sinx, float *__cosx) throw (); extern void __sincosf (float __x, float *__sinx, float *__cosx) throw ();
+extern float acoshf (float __x) throw (); extern float __acoshf (float __x) throw ();
+extern float asinhf (float __x) throw (); extern float __asinhf (float __x) throw ();
+extern float atanhf (float __x) throw (); extern float __atanhf (float __x) throw ();
+extern float expf (float __x) throw (); extern float __expf (float __x) throw ();
+extern float frexpf (float __x, int *__exponent) throw (); extern float __frexpf (float __x, int *__exponent) throw ();
+extern float ldexpf (float __x, int __exponent) throw (); extern float __ldexpf (float __x, int __exponent) throw ();
+extern float logf (float __x) throw (); extern float __logf (float __x) throw ();
+extern float log10f (float __x) throw (); extern float __log10f (float __x) throw ();
+extern float modff (float __x, float *__iptr) throw (); extern float __modff (float __x, float *__iptr) throw ();
+extern float exp10f (float __x) throw (); extern float __exp10f (float __x) throw ();
+extern float pow10f (float __x) throw (); extern float __pow10f (float __x) throw ();
+extern float expm1f (float __x) throw (); extern float __expm1f (float __x) throw ();
+extern float log1pf (float __x) throw (); extern float __log1pf (float __x) throw ();
+extern float logbf (float __x) throw (); extern float __logbf (float __x) throw ();
+extern float exp2f (float __x) throw (); extern float __exp2f (float __x) throw ();
+extern float log2f (float __x) throw (); extern float __log2f (float __x) throw ();
+extern float powf (float __x, float __y) throw (); extern float __powf (float __x, float __y) throw ();
+extern float sqrtf (float __x) throw (); extern float __sqrtf (float __x) throw ();
+extern float hypotf (float __x, float __y) throw (); extern float __hypotf (float __x, float __y) throw ();
+extern float cbrtf (float __x) throw (); extern float __cbrtf (float __x) throw ();
+extern float ceilf (float __x) throw () __attribute__ ((__const__)); extern float __ceilf (float __x) throw () __attribute__ ((__const__));
+extern float fabsf (float __x) throw () __attribute__ ((__const__)); extern float __fabsf (float __x) throw () __attribute__ ((__const__));
+extern float floorf (float __x) throw () __attribute__ ((__const__)); extern float __floorf (float __x) throw () __attribute__ ((__const__));
+extern float fmodf (float __x, float __y) throw (); extern float __fmodf (float __x, float __y) throw ();
+extern int __isinff (float __value) throw () __attribute__ ((__const__));
+extern int __finitef (float __value) throw () __attribute__ ((__const__));
+extern int isinff (float __value) throw () __attribute__ ((__const__));
+extern int finitef (float __value) throw () __attribute__ ((__const__));
+extern float dremf (float __x, float __y) throw (); extern float __dremf (float __x, float __y) throw ();
+extern float significandf (float __x) throw (); extern float __significandf (float __x) throw ();
+extern float copysignf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) throw () __attribute__ ((__const__));
+extern float nanf (__const char *__tagb) throw () __attribute__ ((__const__)); extern float __nanf (__const char *__tagb) throw () __attribute__ ((__const__));
+extern int __isnanf (float __value) throw () __attribute__ ((__const__));
+extern int isnanf (float __value) throw () __attribute__ ((__const__));
+extern float j0f (float) throw (); extern float __j0f (float) throw ();
+extern float j1f (float) throw (); extern float __j1f (float) throw ();
+extern float jnf (int, float) throw (); extern float __jnf (int, float) throw ();
+extern float y0f (float) throw (); extern float __y0f (float) throw ();
+extern float y1f (float) throw (); extern float __y1f (float) throw ();
+extern float ynf (int, float) throw (); extern float __ynf (int, float) throw ();
+extern float erff (float) throw (); extern float __erff (float) throw ();
+extern float erfcf (float) throw (); extern float __erfcf (float) throw ();
+extern float lgammaf (float) throw (); extern float __lgammaf (float) throw ();
+extern float tgammaf (float) throw (); extern float __tgammaf (float) throw ();
+extern float gammaf (float) throw (); extern float __gammaf (float) throw ();
+extern float lgammaf_r (float, int *__signgamp) throw (); extern float __lgammaf_r (float, int *__signgamp) throw ();
+extern float rintf (float __x) throw (); extern float __rintf (float __x) throw ();
+extern float nextafterf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __nextafterf (float __x, float __y) throw () __attribute__ ((__const__));
+extern float nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__)); extern float __nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__));
+extern float remainderf (float __x, float __y) throw (); extern float __remainderf (float __x, float __y) throw ();
+extern float scalbnf (float __x, int __n) throw (); extern float __scalbnf (float __x, int __n) throw ();
+extern int ilogbf (float __x) throw (); extern int __ilogbf (float __x) throw ();
+extern float scalblnf (float __x, long int __n) throw (); extern float __scalblnf (float __x, long int __n) throw ();
+extern float nearbyintf (float __x) throw (); extern float __nearbyintf (float __x) throw ();
+extern float roundf (float __x) throw () __attribute__ ((__const__)); extern float __roundf (float __x) throw () __attribute__ ((__const__));
+extern float truncf (float __x) throw () __attribute__ ((__const__)); extern float __truncf (float __x) throw () __attribute__ ((__const__));
+extern float remquof (float __x, float __y, int *__quo) throw (); extern float __remquof (float __x, float __y, int *__quo) throw ();
+extern long int lrintf (float __x) throw (); extern long int __lrintf (float __x) throw ();
+extern long long int llrintf (float __x) throw (); extern long long int __llrintf (float __x) throw ();
+extern long int lroundf (float __x) throw (); extern long int __lroundf (float __x) throw ();
+extern long long int llroundf (float __x) throw (); extern long long int __llroundf (float __x) throw ();
+extern float fdimf (float __x, float __y) throw (); extern float __fdimf (float __x, float __y) throw ();
+extern float fmaxf (float __x, float __y) throw (); extern float __fmaxf (float __x, float __y) throw ();
+extern float fminf (float __x, float __y) throw (); extern float __fminf (float __x, float __y) throw ();
+extern int __fpclassifyf (float __value) throw ()
+     __attribute__ ((__const__));
+extern int __signbitf (float __value) throw ()
+     __attribute__ ((__const__));
+extern float fmaf (float __x, float __y, float __z) throw (); extern float __fmaf (float __x, float __y, float __z) throw ();
+extern float scalbf (float __x, float __n) throw (); extern float __scalbf (float __x, float __n) throw ();
+extern long double acosl (long double __x) throw (); extern long double __acosl (long double __x) throw ();
+extern long double asinl (long double __x) throw (); extern long double __asinl (long double __x) throw ();
+extern long double atanl (long double __x) throw (); extern long double __atanl (long double __x) throw ();
+extern long double atan2l (long double __y, long double __x) throw (); extern long double __atan2l (long double __y, long double __x) throw ();
+extern long double cosl (long double __x) throw (); extern long double __cosl (long double __x) throw ();
+extern long double sinl (long double __x) throw (); extern long double __sinl (long double __x) throw ();
+extern long double tanl (long double __x) throw (); extern long double __tanl (long double __x) throw ();
+extern long double coshl (long double __x) throw (); extern long double __coshl (long double __x) throw ();
+extern long double sinhl (long double __x) throw (); extern long double __sinhl (long double __x) throw ();
+extern long double tanhl (long double __x) throw (); extern long double __tanhl (long double __x) throw ();
+extern void sincosl (long double __x, long double *__sinx, long double *__cosx) throw (); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) throw ();
+extern long double acoshl (long double __x) throw (); extern long double __acoshl (long double __x) throw ();
+extern long double asinhl (long double __x) throw (); extern long double __asinhl (long double __x) throw ();
+extern long double atanhl (long double __x) throw (); extern long double __atanhl (long double __x) throw ();
+extern long double expl (long double __x) throw (); extern long double __expl (long double __x) throw ();
+extern long double frexpl (long double __x, int *__exponent) throw (); extern long double __frexpl (long double __x, int *__exponent) throw ();
+extern long double ldexpl (long double __x, int __exponent) throw (); extern long double __ldexpl (long double __x, int __exponent) throw ();
+extern long double logl (long double __x) throw (); extern long double __logl (long double __x) throw ();
+extern long double log10l (long double __x) throw (); extern long double __log10l (long double __x) throw ();
+extern long double modfl (long double __x, long double *__iptr) throw (); extern long double __modfl (long double __x, long double *__iptr) throw ();
+extern long double exp10l (long double __x) throw (); extern long double __exp10l (long double __x) throw ();
+extern long double pow10l (long double __x) throw (); extern long double __pow10l (long double __x) throw ();
+extern long double expm1l (long double __x) throw (); extern long double __expm1l (long double __x) throw ();
+extern long double log1pl (long double __x) throw (); extern long double __log1pl (long double __x) throw ();
+extern long double logbl (long double __x) throw (); extern long double __logbl (long double __x) throw ();
+extern long double exp2l (long double __x) throw (); extern long double __exp2l (long double __x) throw ();
+extern long double log2l (long double __x) throw (); extern long double __log2l (long double __x) throw ();
+extern long double powl (long double __x, long double __y) throw (); extern long double __powl (long double __x, long double __y) throw ();
+extern long double sqrtl (long double __x) throw (); extern long double __sqrtl (long double __x) throw ();
+extern long double hypotl (long double __x, long double __y) throw (); extern long double __hypotl (long double __x, long double __y) throw ();
+extern long double cbrtl (long double __x) throw (); extern long double __cbrtl (long double __x) throw ();
+extern long double ceill (long double __x) throw () __attribute__ ((__const__)); extern long double __ceill (long double __x) throw () __attribute__ ((__const__));
+extern long double fabsl (long double __x) throw () __attribute__ ((__const__)); extern long double __fabsl (long double __x) throw () __attribute__ ((__const__));
+extern long double floorl (long double __x) throw () __attribute__ ((__const__)); extern long double __floorl (long double __x) throw () __attribute__ ((__const__));
+extern long double fmodl (long double __x, long double __y) throw (); extern long double __fmodl (long double __x, long double __y) throw ();
+extern int __isinfl (long double __value) throw () __attribute__ ((__const__));
+extern int __finitel (long double __value) throw () __attribute__ ((__const__));
+extern int isinfl (long double __value) throw () __attribute__ ((__const__));
+extern int finitel (long double __value) throw () __attribute__ ((__const__));
+extern long double dreml (long double __x, long double __y) throw (); extern long double __dreml (long double __x, long double __y) throw ();
+extern long double significandl (long double __x) throw (); extern long double __significandl (long double __x) throw ();
+extern long double copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) throw () __attribute__ ((__const__));
+extern long double nanl (__const char *__tagb) throw () __attribute__ ((__const__)); extern long double __nanl (__const char *__tagb) throw () __attribute__ ((__const__));
+extern int __isnanl (long double __value) throw () __attribute__ ((__const__));
+extern int isnanl (long double __value) throw () __attribute__ ((__const__));
+extern long double j0l (long double) throw (); extern long double __j0l (long double) throw ();
+extern long double j1l (long double) throw (); extern long double __j1l (long double) throw ();
+extern long double jnl (int, long double) throw (); extern long double __jnl (int, long double) throw ();
+extern long double y0l (long double) throw (); extern long double __y0l (long double) throw ();
+extern long double y1l (long double) throw (); extern long double __y1l (long double) throw ();
+extern long double ynl (int, long double) throw (); extern long double __ynl (int, long double) throw ();
+extern long double erfl (long double) throw (); extern long double __erfl (long double) throw ();
+extern long double erfcl (long double) throw (); extern long double __erfcl (long double) throw ();
+extern long double lgammal (long double) throw (); extern long double __lgammal (long double) throw ();
+extern long double tgammal (long double) throw (); extern long double __tgammal (long double) throw ();
+extern long double gammal (long double) throw (); extern long double __gammal (long double) throw ();
+extern long double lgammal_r (long double, int *__signgamp) throw (); extern long double __lgammal_r (long double, int *__signgamp) throw ();
+extern long double rintl (long double __x) throw (); extern long double __rintl (long double __x) throw ();
+extern long double nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__));
+extern long double nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__));
+extern long double remainderl (long double __x, long double __y) throw (); extern long double __remainderl (long double __x, long double __y) throw ();
+extern long double scalbnl (long double __x, int __n) throw (); extern long double __scalbnl (long double __x, int __n) throw ();
+extern int ilogbl (long double __x) throw (); extern int __ilogbl (long double __x) throw ();
+extern long double scalblnl (long double __x, long int __n) throw (); extern long double __scalblnl (long double __x, long int __n) throw ();
+extern long double nearbyintl (long double __x) throw (); extern long double __nearbyintl (long double __x) throw ();
+extern long double roundl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundl (long double __x) throw () __attribute__ ((__const__));
+extern long double truncl (long double __x) throw () __attribute__ ((__const__)); extern long double __truncl (long double __x) throw () __attribute__ ((__const__));
+extern long double remquol (long double __x, long double __y, int *__quo) throw (); extern long double __remquol (long double __x, long double __y, int *__quo) throw ();
+extern long int lrintl (long double __x) throw (); extern long int __lrintl (long double __x) throw ();
+extern long long int llrintl (long double __x) throw (); extern long long int __llrintl (long double __x) throw ();
+extern long int lroundl (long double __x) throw (); extern long int __lroundl (long double __x) throw ();
+extern long long int llroundl (long double __x) throw (); extern long long int __llroundl (long double __x) throw ();
+extern long double fdiml (long double __x, long double __y) throw (); extern long double __fdiml (long double __x, long double __y) throw ();
+extern long double fmaxl (long double __x, long double __y) throw (); extern long double __fmaxl (long double __x, long double __y) throw ();
+extern long double fminl (long double __x, long double __y) throw (); extern long double __fminl (long double __x, long double __y) throw ();
+extern int __fpclassifyl (long double __value) throw ()
+     __attribute__ ((__const__));
+extern int __signbitl (long double __value) throw ()
+     __attribute__ ((__const__));
+extern long double fmal (long double __x, long double __y, long double __z) throw (); extern long double __fmal (long double __x, long double __y, long double __z) throw ();
+extern long double scalbl (long double __x, long double __n) throw (); extern long double __scalbl (long double __x, long double __n) throw ();
+extern int signgam;
+enum
+  {
+    FP_NAN,
+    FP_INFINITE,
+    FP_ZERO,
+    FP_SUBNORMAL,
+    FP_NORMAL
+  };
+typedef enum
+{
+  _IEEE_ = -1,
+  _SVID_,
+  _XOPEN_,
+  _POSIX_,
+  _ISOC_
+} _LIB_VERSION_TYPE;
+extern _LIB_VERSION_TYPE _LIB_VERSION;
+struct __exception
+  {
+    int type;
+    char *name;
+    double arg1;
+    double arg2;
+    double retval;
+  };
+extern int matherr (struct __exception *__exc) throw ();
+}
+extern "C" {
+struct timezone
+  {
+    int tz_minuteswest;
+    int tz_dsttime;
+  };
+typedef struct timezone *__restrict __timezone_ptr_t;
+extern int gettimeofday (struct timeval *__restrict __tv,
+    __timezone_ptr_t __tz) throw () __attribute__ ((__nonnull__ (1)));
+extern int settimeofday (__const struct timeval *__tv,
+    __const struct timezone *__tz)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int adjtime (__const struct timeval *__delta,
+      struct timeval *__olddelta) throw ();
+enum __itimer_which
+  {
+    ITIMER_REAL = 0,
+    ITIMER_VIRTUAL = 1,
+    ITIMER_PROF = 2
+  };
+struct itimerval
+  {
+    struct timeval it_interval;
+    struct timeval it_value;
+  };
+typedef int __itimer_which_t;
+extern int getitimer (__itimer_which_t __which,
+        struct itimerval *__value) throw ();
+extern int setitimer (__itimer_which_t __which,
+        __const struct itimerval *__restrict __new,
+        struct itimerval *__restrict __old) throw ();
+extern int utimes (__const char *__file, __const struct timeval __tvp[2])
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int lutimes (__const char *__file, __const struct timeval __tvp[2])
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int futimes (int __fd, __const struct timeval __tvp[2]) throw ();
+extern int futimesat (int __fd, __const char *__file,
+        __const struct timeval __tvp[2]) throw ();
+}
+extern "C" {
+struct tm
+{
+  int tm_sec;
+  int tm_min;
+  int tm_hour;
+  int tm_mday;
+  int tm_mon;
+  int tm_year;
+  int tm_wday;
+  int tm_yday;
+  int tm_isdst;
+  long int tm_gmtoff;
+  __const char *tm_zone;
+};
+struct itimerspec
+  {
+    struct timespec it_interval;
+    struct timespec it_value;
+  };
+struct sigevent;
+extern clock_t clock (void) throw ();
+extern time_t time (time_t *__timer) throw ();
+extern double difftime (time_t __time1, time_t __time0)
+     throw () __attribute__ ((__const__));
+extern time_t mktime (struct tm *__tp) throw ();
+extern size_t strftime (char *__restrict __s, size_t __maxsize,
+   __const char *__restrict __format,
+   __const struct tm *__restrict __tp) throw ();
+extern char *strptime (__const char *__restrict __s,
+         __const char *__restrict __fmt, struct tm *__tp)
+     throw ();
+extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
+     __const char *__restrict __format,
+     __const struct tm *__restrict __tp,
+     __locale_t __loc) throw ();
+extern char *strptime_l (__const char *__restrict __s,
+    __const char *__restrict __fmt, struct tm *__tp,
+    __locale_t __loc) throw ();
+extern struct tm *gmtime (__const time_t *__timer) throw ();
+extern struct tm *localtime (__const time_t *__timer) throw ();
+extern struct tm *gmtime_r (__const time_t *__restrict __timer,
+       struct tm *__restrict __tp) throw ();
+extern struct tm *localtime_r (__const time_t *__restrict __timer,
+          struct tm *__restrict __tp) throw ();
+extern char *asctime (__const struct tm *__tp) throw ();
+extern char *ctime (__const time_t *__timer) throw ();
+extern char *asctime_r (__const struct tm *__restrict __tp,
+   char *__restrict __buf) throw ();
+extern char *ctime_r (__const time_t *__restrict __timer,
+        char *__restrict __buf) throw ();
+extern char *__tzname[2];
+extern int __daylight;
+extern long int __timezone;
+extern char *tzname[2];
+extern void tzset (void) throw ();
+extern int daylight;
+extern long int timezone;
+extern int stime (__const time_t *__when) throw ();
+extern time_t timegm (struct tm *__tp) throw ();
+extern time_t timelocal (struct tm *__tp) throw ();
+extern int dysize (int __year) throw () __attribute__ ((__const__));
+extern int nanosleep (__const struct timespec *__requested_time,
+        struct timespec *__remaining);
+extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw ();
+extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw ();
+extern int clock_settime (clockid_t __clock_id, __const struct timespec *__tp)
+     throw ();
+extern int clock_nanosleep (clockid_t __clock_id, int __flags,
+       __const struct timespec *__req,
+       struct timespec *__rem);
+extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw ();
+extern int timer_create (clockid_t __clock_id,
+    struct sigevent *__restrict __evp,
+    timer_t *__restrict __timerid) throw ();
+extern int timer_delete (timer_t __timerid) throw ();
+extern int timer_settime (timer_t __timerid, int __flags,
+     __const struct itimerspec *__restrict __value,
+     struct itimerspec *__restrict __ovalue) throw ();
+extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
+     throw ();
+extern int timer_getoverrun (timer_t __timerid) throw ();
+extern int getdate_err;
+extern struct tm *getdate (__const char *__string);
+extern int getdate_r (__const char *__restrict __string,
+        struct tm *__restrict __resbufp);
+}
+extern "C" {
+struct stat
+  {
+    __dev_t st_dev;
+    __ino_t st_ino;
+    __nlink_t st_nlink;
+    __mode_t st_mode;
+    __uid_t st_uid;
+    __gid_t st_gid;
+    int __pad0;
+    __dev_t st_rdev;
+    __off_t st_size;
+    __blksize_t st_blksize;
+    __blkcnt_t st_blocks;
+    struct timespec st_atim;
+    struct timespec st_mtim;
+    struct timespec st_ctim;
+    long int __unused[3];
+  };
+struct stat64
+  {
+    __dev_t st_dev;
+    __ino64_t st_ino;
+    __nlink_t st_nlink;
+    __mode_t st_mode;
+    __uid_t st_uid;
+    __gid_t st_gid;
+    int __pad0;
+    __dev_t st_rdev;
+    __off_t st_size;
+    __blksize_t st_blksize;
+    __blkcnt64_t st_blocks;
+    struct timespec st_atim;
+    struct timespec st_mtim;
+    struct timespec st_ctim;
+    long int __unused[3];
+  };
+extern int stat (__const char *__restrict __file, struct stat *__restrict __buf) throw () __asm__ ("" "stat64")
+     __attribute__ ((__nonnull__ (1, 2)));
+extern int fstat (int __fd, struct stat *__buf) throw () __asm__ ("" "fstat64")
+     __attribute__ ((__nonnull__ (2)));
+extern int stat64 (__const char *__restrict __file,
+     struct stat64 *__restrict __buf) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int fstat64 (int __fd, struct stat64 *__buf) throw () __attribute__ ((__nonnull__ (2)));
+extern int fstatat (int __fd, __const char *__restrict __file, struct stat *__restrict __buf, int __flag) throw () __asm__ ("" "fstatat64") __attribute__ ((__nonnull__ (2, 3)));
+extern int fstatat64 (int __fd, __const char *__restrict __file,
+        struct stat64 *__restrict __buf, int __flag)
+     throw () __attribute__ ((__nonnull__ (2, 3)));
+extern int lstat (__const char *__restrict __file, struct stat *__restrict __buf) throw () __asm__ ("" "lstat64")
+     __attribute__ ((__nonnull__ (1, 2)));
+extern int lstat64 (__const char *__restrict __file,
+      struct stat64 *__restrict __buf)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int chmod (__const char *__file, __mode_t __mode)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int lchmod (__const char *__file, __mode_t __mode)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int fchmod (int __fd, __mode_t __mode) throw ();
+extern int fchmodat (int __fd, __const char *__file, __mode_t __mode,
+       int __flag)
+     throw () __attribute__ ((__nonnull__ (2))) ;
+extern __mode_t umask (__mode_t __mask) throw ();
+extern __mode_t getumask (void) throw ();
+extern int mkdir (__const char *__path, __mode_t __mode)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int mkdirat (int __fd, __const char *__path, __mode_t __mode)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern int mknod (__const char *__path, __mode_t __mode, __dev_t __dev)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int mknodat (int __fd, __const char *__path, __mode_t __mode,
+      __dev_t __dev) throw () __attribute__ ((__nonnull__ (2)));
+extern int mkfifo (__const char *__path, __mode_t __mode)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int mkfifoat (int __fd, __const char *__path, __mode_t __mode)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern int utimensat (int __fd, __const char *__path,
+        __const struct timespec __times[2],
+        int __flags)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern int futimens (int __fd, __const struct timespec __times[2]) throw ();
+extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf) throw () __asm__ ("" "__fxstat64")
+     __attribute__ ((__nonnull__ (3)));
+extern int __xstat (int __ver, __const char *__filename, struct stat *__stat_buf) throw () __asm__ ("" "__xstat64")
+     __attribute__ ((__nonnull__ (2, 3)));
+extern int __lxstat (int __ver, __const char *__filename, struct stat *__stat_buf) throw () __asm__ ("" "__lxstat64")
+     __attribute__ ((__nonnull__ (2, 3)));
+extern int __fxstatat (int __ver, int __fildes, __const char *__filename, struct stat *__stat_buf, int __flag) throw () __asm__ ("" "__fxstatat64") __attribute__ ((__nonnull__ (3, 4)));
+extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
+     throw () __attribute__ ((__nonnull__ (3)));
+extern int __xstat64 (int __ver, __const char *__filename,
+        struct stat64 *__stat_buf) throw () __attribute__ ((__nonnull__ (2, 3)));
+extern int __lxstat64 (int __ver, __const char *__filename,
+         struct stat64 *__stat_buf) throw () __attribute__ ((__nonnull__ (2, 3)));
+extern int __fxstatat64 (int __ver, int __fildes, __const char *__filename,
+    struct stat64 *__stat_buf, int __flag)
+     throw () __attribute__ ((__nonnull__ (3, 4)));
+extern int __xmknod (int __ver, __const char *__path, __mode_t __mode,
+       __dev_t *__dev) throw () __attribute__ ((__nonnull__ (2, 4)));
+extern int __xmknodat (int __ver, int __fd, __const char *__path,
+         __mode_t __mode, __dev_t *__dev)
+     throw () __attribute__ ((__nonnull__ (3, 5)));
+}
+extern "C" {
+}
+extern "C" {
+void * PyMem_Malloc(size_t);
+void * PyMem_Realloc(void *, size_t);
+void PyMem_Free(void *);
+}
+extern "C" {
+typedef struct _object {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+} PyObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type; Py_ssize_t ob_size;
+} PyVarObject;
+typedef PyObject * (*unaryfunc)(PyObject *);
+typedef PyObject * (*binaryfunc)(PyObject *, PyObject *);
+typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *);
+typedef int (*inquiry)(PyObject *);
+typedef Py_ssize_t (*lenfunc)(PyObject *);
+typedef int (*coercion)(PyObject **, PyObject **);
+typedef PyObject *(*intargfunc)(PyObject *, int) __attribute__((__deprecated__));
+typedef PyObject *(*intintargfunc)(PyObject *, int, int) __attribute__((__deprecated__));
+typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t);
+typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t);
+typedef int(*intobjargproc)(PyObject *, int, PyObject *);
+typedef int(*intintobjargproc)(PyObject *, int, int, PyObject *);
+typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *);
+typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
+typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *);
+typedef int (*getreadbufferproc)(PyObject *, int, void **);
+typedef int (*getwritebufferproc)(PyObject *, int, void **);
+typedef int (*getsegcountproc)(PyObject *, int *);
+typedef int (*getcharbufferproc)(PyObject *, int, char **);
+typedef Py_ssize_t (*readbufferproc)(PyObject *, Py_ssize_t, void **);
+typedef Py_ssize_t (*writebufferproc)(PyObject *, Py_ssize_t, void **);
+typedef Py_ssize_t (*segcountproc)(PyObject *, Py_ssize_t *);
+typedef Py_ssize_t (*charbufferproc)(PyObject *, Py_ssize_t, char **);
+typedef struct bufferinfo {
+    void *buf;
+    PyObject *obj;
+    Py_ssize_t len;
+    Py_ssize_t itemsize;
+    int readonly;
+    int ndim;
+    char *format;
+    Py_ssize_t *shape;
+    Py_ssize_t *strides;
+    Py_ssize_t *suboffsets;
+    void *internal;
+} Py_buffer;
+typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
+typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
+typedef int (*objobjproc)(PyObject *, PyObject *);
+typedef int (*visitproc)(PyObject *, void *);
+typedef int (*traverseproc)(PyObject *, visitproc, void *);
+typedef struct {
+    binaryfunc nb_add;
+    binaryfunc nb_subtract;
+    binaryfunc nb_multiply;
+    binaryfunc nb_divide;
+    binaryfunc nb_remainder;
+    binaryfunc nb_divmod;
+    ternaryfunc nb_power;
+    unaryfunc nb_negative;
+    unaryfunc nb_positive;
+    unaryfunc nb_absolute;
+    inquiry nb_nonzero;
+    unaryfunc nb_invert;
+    binaryfunc nb_lshift;
+    binaryfunc nb_rshift;
+    binaryfunc nb_and;
+    binaryfunc nb_xor;
+    binaryfunc nb_or;
+    coercion nb_coerce;
+    unaryfunc nb_int;
+    unaryfunc nb_long;
+    unaryfunc nb_float;
+    unaryfunc nb_oct;
+    unaryfunc nb_hex;
+    binaryfunc nb_inplace_add;
+    binaryfunc nb_inplace_subtract;
+    binaryfunc nb_inplace_multiply;
+    binaryfunc nb_inplace_divide;
+    binaryfunc nb_inplace_remainder;
+    ternaryfunc nb_inplace_power;
+    binaryfunc nb_inplace_lshift;
+    binaryfunc nb_inplace_rshift;
+    binaryfunc nb_inplace_and;
+    binaryfunc nb_inplace_xor;
+    binaryfunc nb_inplace_or;
+    binaryfunc nb_floor_divide;
+    binaryfunc nb_true_divide;
+    binaryfunc nb_inplace_floor_divide;
+    binaryfunc nb_inplace_true_divide;
+    unaryfunc nb_index;
+} PyNumberMethods;
+typedef struct {
+    lenfunc sq_length;
+    binaryfunc sq_concat;
+    ssizeargfunc sq_repeat;
+    ssizeargfunc sq_item;
+    ssizessizeargfunc sq_slice;
+    ssizeobjargproc sq_ass_item;
+    ssizessizeobjargproc sq_ass_slice;
+    objobjproc sq_contains;
+    binaryfunc sq_inplace_concat;
+    ssizeargfunc sq_inplace_repeat;
+} PySequenceMethods;
+typedef struct {
+    lenfunc mp_length;
+    binaryfunc mp_subscript;
+    objobjargproc mp_ass_subscript;
+} PyMappingMethods;
+typedef struct {
+    readbufferproc bf_getreadbuffer;
+    writebufferproc bf_getwritebuffer;
+    segcountproc bf_getsegcount;
+    charbufferproc bf_getcharbuffer;
+    getbufferproc bf_getbuffer;
+    releasebufferproc bf_releasebuffer;
+} PyBufferProcs;
+typedef void (*freefunc)(void *);
+typedef void (*destructor)(PyObject *);
+typedef int (*printfunc)(PyObject *, FILE *, int);
+typedef PyObject *(*getattrfunc)(PyObject *, char *);
+typedef PyObject *(*getattrofunc)(PyObject *, PyObject *);
+typedef int (*setattrfunc)(PyObject *, char *, PyObject *);
+typedef int (*setattrofunc)(PyObject *, PyObject *, PyObject *);
+typedef int (*cmpfunc)(PyObject *, PyObject *);
+typedef PyObject *(*reprfunc)(PyObject *);
+typedef long (*hashfunc)(PyObject *);
+typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int);
+typedef PyObject *(*getiterfunc) (PyObject *);
+typedef PyObject *(*iternextfunc) (PyObject *);
+typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *);
+typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *);
+typedef int (*initproc)(PyObject *, PyObject *, PyObject *);
+typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *);
+typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t);
+typedef struct _typeobject {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type; Py_ssize_t ob_size;
+    const char *tp_name;
+    Py_ssize_t tp_basicsize, tp_itemsize;
+    destructor tp_dealloc;
+    printfunc tp_print;
+    getattrfunc tp_getattr;
+    setattrfunc tp_setattr;
+    cmpfunc tp_compare;
+    reprfunc tp_repr;
+    PyNumberMethods *tp_as_number;
+    PySequenceMethods *tp_as_sequence;
+    PyMappingMethods *tp_as_mapping;
+    hashfunc tp_hash;
+    ternaryfunc tp_call;
+    reprfunc tp_str;
+    getattrofunc tp_getattro;
+    setattrofunc tp_setattro;
+    PyBufferProcs *tp_as_buffer;
+    long tp_flags;
+    const char *tp_doc;
+    traverseproc tp_traverse;
+    inquiry tp_clear;
+    richcmpfunc tp_richcompare;
+    Py_ssize_t tp_weaklistoffset;
+    getiterfunc tp_iter;
+    iternextfunc tp_iternext;
+    struct PyMethodDef *tp_methods;
+    struct PyMemberDef *tp_members;
+    struct PyGetSetDef *tp_getset;
+    struct _typeobject *tp_base;
+    PyObject *tp_dict;
+    descrgetfunc tp_descr_get;
+    descrsetfunc tp_descr_set;
+    Py_ssize_t tp_dictoffset;
+    initproc tp_init;
+    allocfunc tp_alloc;
+    newfunc tp_new;
+    freefunc tp_free;
+    inquiry tp_is_gc;
+    PyObject *tp_bases;
+    PyObject *tp_mro;
+    PyObject *tp_cache;
+    PyObject *tp_subclasses;
+    PyObject *tp_weaklist;
+    destructor tp_del;
+    unsigned int tp_version_tag;
+} PyTypeObject;
+typedef struct _heaptypeobject {
+    PyTypeObject ht_type;
+    PyNumberMethods as_number;
+    PyMappingMethods as_mapping;
+    PySequenceMethods as_sequence;
+    PyBufferProcs as_buffer;
+    PyObject *ht_name, *ht_slots;
+} PyHeapTypeObject;
+int PyType_IsSubtype(PyTypeObject *, PyTypeObject *);
+extern PyTypeObject PyType_Type;
+extern PyTypeObject PyBaseObject_Type;
+extern PyTypeObject PySuper_Type;
+int PyType_Ready(PyTypeObject *);
+PyObject * PyType_GenericAlloc(PyTypeObject *, Py_ssize_t);
+PyObject * PyType_GenericNew(PyTypeObject *,
+                                               PyObject *, PyObject *);
+PyObject * _PyType_Lookup(PyTypeObject *, PyObject *);
+unsigned int PyType_ClearCache(void);
+void PyType_Modified(PyTypeObject *);
+int PyObject_Print(PyObject *, FILE *, int);
+void _PyObject_Dump(PyObject *);
+PyObject * PyObject_Repr(PyObject *);
+PyObject * _PyObject_Str(PyObject *);
+PyObject * PyObject_Str(PyObject *);
+PyObject * PyObject_Unicode(PyObject *);
+int PyObject_Compare(PyObject *, PyObject *);
+PyObject * PyObject_RichCompare(PyObject *, PyObject *, int);
+int PyObject_RichCompareBool(PyObject *, PyObject *, int);
+PyObject * PyObject_GetAttrString(PyObject *, const char *);
+int PyObject_SetAttrString(PyObject *, const char *, PyObject *);
+int PyObject_HasAttrString(PyObject *, const char *);
+PyObject * PyObject_GetAttr(PyObject *, PyObject *);
+int PyObject_SetAttr(PyObject *, PyObject *, PyObject *);
+int PyObject_HasAttr(PyObject *, PyObject *);
+PyObject ** _PyObject_GetDictPtr(PyObject *);
+PyObject * PyObject_SelfIter(PyObject *);
+PyObject * PyObject_GenericGetAttr(PyObject *, PyObject *);
+int PyObject_GenericSetAttr(PyObject *,
+                                              PyObject *, PyObject *);
+long PyObject_Hash(PyObject *);
+long PyObject_HashNotImplemented(PyObject *);
+int PyObject_IsTrue(PyObject *);
+int PyObject_Not(PyObject *);
+int PyCallable_Check(PyObject *);
+int PyNumber_Coerce(PyObject **, PyObject **);
+int PyNumber_CoerceEx(PyObject **, PyObject **);
+void PyObject_ClearWeakRefs(PyObject *);
+extern int _PyObject_SlotCompare(PyObject *, PyObject *);
+PyObject * PyObject_Dir(PyObject *);
+int Py_ReprEnter(PyObject *);
+void Py_ReprLeave(PyObject *);
+long _Py_HashDouble(double);
+long _Py_HashPointer(void*);
+void Py_IncRef(PyObject *);
+void Py_DecRef(PyObject *);
+extern PyObject _Py_NoneStruct;
+extern PyObject _Py_NotImplementedStruct;
+extern int _Py_SwappedOp[];
+void _PyTrash_deposit_object(PyObject*);
+void _PyTrash_destroy_chain(void);
+extern int _PyTrash_delete_nesting;
+extern PyObject * _PyTrash_delete_later;
+}
+extern "C" {
+void * PyObject_Malloc(size_t);
+void * PyObject_Realloc(void *, size_t);
+void PyObject_Free(void *);
+PyObject * PyObject_Init(PyObject *, PyTypeObject *);
+PyVarObject * PyObject_InitVar(PyVarObject *,
+                                                 PyTypeObject *, Py_ssize_t);
+PyObject * _PyObject_New(PyTypeObject *);
+PyVarObject * _PyObject_NewVar(PyTypeObject *, Py_ssize_t);
+Py_ssize_t PyGC_Collect(void);
+PyVarObject * _PyObject_GC_Resize(PyVarObject *, Py_ssize_t);
+typedef union _gc_head {
+    struct {
+        union _gc_head *gc_next;
+        union _gc_head *gc_prev;
+        Py_ssize_t gc_refs;
+    } gc;
+    long double dummy;
+} PyGC_Head;
+extern PyGC_Head *_PyGC_generation0;
+PyObject * _PyObject_GC_Malloc(size_t);
+PyObject * _PyObject_GC_New(PyTypeObject *);
+PyVarObject * _PyObject_GC_NewVar(PyTypeObject *, Py_ssize_t);
+void PyObject_GC_Track(void *);
+void PyObject_GC_UnTrack(void *);
+void PyObject_GC_Del(void *);
+}
+extern "C" {
+extern int Py_DebugFlag;
+extern int Py_VerboseFlag;
+extern int Py_InteractiveFlag;
+extern int Py_InspectFlag;
+extern int Py_OptimizeFlag;
+extern int Py_NoSiteFlag;
+extern int Py_BytesWarningFlag;
+extern int Py_UseClassExceptionsFlag;
+extern int Py_FrozenFlag;
+extern int Py_TabcheckFlag;
+extern int Py_UnicodeFlag;
+extern int Py_IgnoreEnvironmentFlag;
+extern int Py_DivisionWarningFlag;
+extern int Py_DontWriteBytecodeFlag;
+extern int Py_NoUserSiteDirectory;
+extern int _Py_QnewFlag;
+extern int Py_Py3kWarningFlag;
+void Py_FatalError(const char *message);
+}
+extern "C" {
+enum
+{
+  _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
+  _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
+  _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
+  _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
+  _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
+  _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
+  _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
+  _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
+  _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
+  _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
+  _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
+  _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
+};
+extern __const unsigned short int **__ctype_b_loc (void)
+     throw () __attribute__ ((__const));
+extern __const __int32_t **__ctype_tolower_loc (void)
+     throw () __attribute__ ((__const));
+extern __const __int32_t **__ctype_toupper_loc (void)
+     throw () __attribute__ ((__const));
+extern int isalnum (int) throw ();
+extern int isalpha (int) throw ();
+extern int iscntrl (int) throw ();
+extern int isdigit (int) throw ();
+extern int islower (int) throw ();
+extern int isgraph (int) throw ();
+extern int isprint (int) throw ();
+extern int ispunct (int) throw ();
+extern int isspace (int) throw ();
+extern int isupper (int) throw ();
+extern int isxdigit (int) throw ();
+extern int tolower (int __c) throw ();
+extern int toupper (int __c) throw ();
+extern int isblank (int) throw ();
+extern int isctype (int __c, int __mask) throw ();
+extern int isascii (int __c) throw ();
+extern int toascii (int __c) throw ();
+extern int _toupper (int) throw ();
+extern int _tolower (int) throw ();
+extern int isalnum_l (int, __locale_t) throw ();
+extern int isalpha_l (int, __locale_t) throw ();
+extern int iscntrl_l (int, __locale_t) throw ();
+extern int isdigit_l (int, __locale_t) throw ();
+extern int islower_l (int, __locale_t) throw ();
+extern int isgraph_l (int, __locale_t) throw ();
+extern int isprint_l (int, __locale_t) throw ();
+extern int ispunct_l (int, __locale_t) throw ();
+extern int isspace_l (int, __locale_t) throw ();
+extern int isupper_l (int, __locale_t) throw ();
+extern int isxdigit_l (int, __locale_t) throw ();
+extern int isblank_l (int, __locale_t) throw ();
+extern int __tolower_l (int __c, __locale_t __l) throw ();
+extern int tolower_l (int __c, __locale_t __l) throw ();
+extern int __toupper_l (int __c, __locale_t __l) throw ();
+extern int toupper_l (int __c, __locale_t __l) throw ();
+}
+typedef unsigned int wint_t;
+typedef __mbstate_t mbstate_t;
+extern "C" {
+struct tm;
+extern wchar_t *wcscpy (wchar_t *__restrict __dest,
+   __const wchar_t *__restrict __src) throw ();
+extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
+    __const wchar_t *__restrict __src, size_t __n)
+     throw ();
+extern wchar_t *wcscat (wchar_t *__restrict __dest,
+   __const wchar_t *__restrict __src) throw ();
+extern wchar_t *wcsncat (wchar_t *__restrict __dest,
+    __const wchar_t *__restrict __src, size_t __n)
+     throw ();
+extern int wcscmp (__const wchar_t *__s1, __const wchar_t *__s2)
+     throw () __attribute__ ((__pure__));
+extern int wcsncmp (__const wchar_t *__s1, __const wchar_t *__s2, size_t __n)
+     throw () __attribute__ ((__pure__));
+extern int wcscasecmp (__const wchar_t *__s1, __const wchar_t *__s2) throw ();
+extern int wcsncasecmp (__const wchar_t *__s1, __const wchar_t *__s2,
+   size_t __n) throw ();
+extern int wcscasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
+    __locale_t __loc) throw ();
+extern int wcsncasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
+     size_t __n, __locale_t __loc) throw ();
+extern int wcscoll (__const wchar_t *__s1, __const wchar_t *__s2) throw ();
+extern size_t wcsxfrm (wchar_t *__restrict __s1,
+         __const wchar_t *__restrict __s2, size_t __n) throw ();
+extern int wcscoll_l (__const wchar_t *__s1, __const wchar_t *__s2,
+        __locale_t __loc) throw ();
+extern size_t wcsxfrm_l (wchar_t *__s1, __const wchar_t *__s2,
+    size_t __n, __locale_t __loc) throw ();
+extern wchar_t *wcsdup (__const wchar_t *__s) throw () __attribute__ ((__malloc__));
+extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc)
+     throw () __asm ("wcschr") __attribute__ ((__pure__));
+extern "C++" __const wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc)
+     throw () __asm ("wcschr") __attribute__ ((__pure__));
+extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc)
+     throw () __asm ("wcsrchr") __attribute__ ((__pure__));
+extern "C++" __const wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc)
+     throw () __asm ("wcsrchr") __attribute__ ((__pure__));
+extern wchar_t *wcschrnul (__const wchar_t *__s, wchar_t __wc)
+     throw () __attribute__ ((__pure__));
+extern size_t wcscspn (__const wchar_t *__wcs, __const wchar_t *__reject)
+     throw () __attribute__ ((__pure__));
+extern size_t wcsspn (__const wchar_t *__wcs, __const wchar_t *__accept)
+     throw () __attribute__ ((__pure__));
+extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, __const wchar_t *__accept)
+     throw () __asm ("wcspbrk") __attribute__ ((__pure__));
+extern "C++" __const wchar_t *wcspbrk (__const wchar_t *__wcs,
+           __const wchar_t *__accept)
+     throw () __asm ("wcspbrk") __attribute__ ((__pure__));
+extern "C++" wchar_t *wcsstr (wchar_t *__haystack, __const wchar_t *__needle)
+     throw () __asm ("wcsstr") __attribute__ ((__pure__));
+extern "C++" __const wchar_t *wcsstr (__const wchar_t *__haystack,
+          __const wchar_t *__needle)
+     throw () __asm ("wcsstr") __attribute__ ((__pure__));
+extern wchar_t *wcstok (wchar_t *__restrict __s,
+   __const wchar_t *__restrict __delim,
+   wchar_t **__restrict __ptr) throw ();
+extern size_t wcslen (__const wchar_t *__s) throw () __attribute__ ((__pure__));
+extern "C++" wchar_t *wcswcs (wchar_t *__haystack, __const wchar_t *__needle)
+     throw () __asm ("wcswcs") __attribute__ ((__pure__));
+extern "C++" __const wchar_t *wcswcs (__const wchar_t *__haystack,
+          __const wchar_t *__needle)
+     throw () __asm ("wcswcs") __attribute__ ((__pure__));
+extern size_t wcsnlen (__const wchar_t *__s, size_t __maxlen)
+     throw () __attribute__ ((__pure__));
+extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n)
+     throw () __asm ("wmemchr") __attribute__ ((__pure__));
+extern "C++" __const wchar_t *wmemchr (__const wchar_t *__s, wchar_t __c,
+           size_t __n)
+     throw () __asm ("wmemchr") __attribute__ ((__pure__));
+extern int wmemcmp (__const wchar_t *__restrict __s1,
+      __const wchar_t *__restrict __s2, size_t __n)
+     throw () __attribute__ ((__pure__));
+extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
+    __const wchar_t *__restrict __s2, size_t __n) throw ();
+extern wchar_t *wmemmove (wchar_t *__s1, __const wchar_t *__s2, size_t __n)
+     throw ();
+extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw ();
+extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
+     __const wchar_t *__restrict __s2, size_t __n)
+     throw ();
+extern wint_t btowc (int __c) throw ();
+extern int wctob (wint_t __c) throw ();
+extern int mbsinit (__const mbstate_t *__ps) throw () __attribute__ ((__pure__));
+extern size_t mbrtowc (wchar_t *__restrict __pwc,
+         __const char *__restrict __s, size_t __n,
+         mbstate_t *__p) throw ();
+extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
+         mbstate_t *__restrict __ps) throw ();
+extern size_t __mbrlen (__const char *__restrict __s, size_t __n,
+   mbstate_t *__restrict __ps) throw ();
+extern size_t mbrlen (__const char *__restrict __s, size_t __n,
+        mbstate_t *__restrict __ps) throw ();
+extern size_t mbsrtowcs (wchar_t *__restrict __dst,
+    __const char **__restrict __src, size_t __len,
+    mbstate_t *__restrict __ps) throw ();
+extern size_t wcsrtombs (char *__restrict __dst,
+    __const wchar_t **__restrict __src, size_t __len,
+    mbstate_t *__restrict __ps) throw ();
+extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
+     __const char **__restrict __src, size_t __nmc,
+     size_t __len, mbstate_t *__restrict __ps) throw ();
+extern size_t wcsnrtombs (char *__restrict __dst,
+     __const wchar_t **__restrict __src,
+     size_t __nwc, size_t __len,
+     mbstate_t *__restrict __ps) throw ();
+extern int wcwidth (wchar_t __c) throw ();
+extern int wcswidth (__const wchar_t *__s, size_t __n) throw ();
+extern double wcstod (__const wchar_t *__restrict __nptr,
+        wchar_t **__restrict __endptr) throw ();
+extern float wcstof (__const wchar_t *__restrict __nptr,
+       wchar_t **__restrict __endptr) throw ();
+extern long double wcstold (__const wchar_t *__restrict __nptr,
+       wchar_t **__restrict __endptr) throw ();
+extern long int wcstol (__const wchar_t *__restrict __nptr,
+   wchar_t **__restrict __endptr, int __base) throw ();
+extern unsigned long int wcstoul (__const wchar_t *__restrict __nptr,
+      wchar_t **__restrict __endptr, int __base)
+     throw ();
+__extension__
+extern long long int wcstoll (__const wchar_t *__restrict __nptr,
+         wchar_t **__restrict __endptr, int __base)
+     throw ();
+__extension__
+extern unsigned long long int wcstoull (__const wchar_t *__restrict __nptr,
+     wchar_t **__restrict __endptr,
+     int __base) throw ();
+__extension__
+extern long long int wcstoq (__const wchar_t *__restrict __nptr,
+        wchar_t **__restrict __endptr, int __base)
+     throw ();
+__extension__
+extern unsigned long long int wcstouq (__const wchar_t *__restrict __nptr,
+           wchar_t **__restrict __endptr,
+           int __base) throw ();
+extern long int wcstol_l (__const wchar_t *__restrict __nptr,
+     wchar_t **__restrict __endptr, int __base,
+     __locale_t __loc) throw ();
+extern unsigned long int wcstoul_l (__const wchar_t *__restrict __nptr,
+        wchar_t **__restrict __endptr,
+        int __base, __locale_t __loc) throw ();
+__extension__
+extern long long int wcstoll_l (__const wchar_t *__restrict __nptr,
+    wchar_t **__restrict __endptr,
+    int __base, __locale_t __loc) throw ();
+__extension__
+extern unsigned long long int wcstoull_l (__const wchar_t *__restrict __nptr,
+       wchar_t **__restrict __endptr,
+       int __base, __locale_t __loc)
+     throw ();
+extern double wcstod_l (__const wchar_t *__restrict __nptr,
+   wchar_t **__restrict __endptr, __locale_t __loc)
+     throw ();
+extern float wcstof_l (__const wchar_t *__restrict __nptr,
+         wchar_t **__restrict __endptr, __locale_t __loc)
+     throw ();
+extern long double wcstold_l (__const wchar_t *__restrict __nptr,
+         wchar_t **__restrict __endptr,
+         __locale_t __loc) throw ();
+extern wchar_t *wcpcpy (wchar_t *__dest, __const wchar_t *__src) throw ();
+extern wchar_t *wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)
+     throw ();
+extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) throw ();
+extern int fwide (__FILE *__fp, int __mode) throw ();
+extern int fwprintf (__FILE *__restrict __stream,
+       __const wchar_t *__restrict __format, ...)
+                                                           ;
+extern int wprintf (__const wchar_t *__restrict __format, ...)
+                                                           ;
+extern int swprintf (wchar_t *__restrict __s, size_t __n,
+       __const wchar_t *__restrict __format, ...)
+     throw () ;
+extern int vfwprintf (__FILE *__restrict __s,
+        __const wchar_t *__restrict __format,
+        __gnuc_va_list __arg)
+                                                           ;
+extern int vwprintf (__const wchar_t *__restrict __format,
+       __gnuc_va_list __arg)
+                                                           ;
+extern int vswprintf (wchar_t *__restrict __s, size_t __n,
+        __const wchar_t *__restrict __format,
+        __gnuc_va_list __arg)
+     throw () ;
+extern int fwscanf (__FILE *__restrict __stream,
+      __const wchar_t *__restrict __format, ...)
+                                                          ;
+extern int wscanf (__const wchar_t *__restrict __format, ...)
+                                                          ;
+extern int swscanf (__const wchar_t *__restrict __s,
+      __const wchar_t *__restrict __format, ...)
+     throw () ;
+extern int vfwscanf (__FILE *__restrict __s,
+       __const wchar_t *__restrict __format,
+       __gnuc_va_list __arg)
+                                                          ;
+extern int vwscanf (__const wchar_t *__restrict __format,
+      __gnuc_va_list __arg)
+                                                          ;
+extern int vswscanf (__const wchar_t *__restrict __s,
+       __const wchar_t *__restrict __format,
+       __gnuc_va_list __arg)
+     throw () ;
+extern wint_t fgetwc (__FILE *__stream);
+extern wint_t getwc (__FILE *__stream);
+extern wint_t getwchar (void);
+extern wint_t fputwc (wchar_t __wc, __FILE *__stream);
+extern wint_t putwc (wchar_t __wc, __FILE *__stream);
+extern wint_t putwchar (wchar_t __wc);
+extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
+   __FILE *__restrict __stream);
+extern int fputws (__const wchar_t *__restrict __ws,
+     __FILE *__restrict __stream);
+extern wint_t ungetwc (wint_t __wc, __FILE *__stream);
+extern wint_t getwc_unlocked (__FILE *__stream);
+extern wint_t getwchar_unlocked (void);
+extern wint_t fgetwc_unlocked (__FILE *__stream);
+extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream);
+extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream);
+extern wint_t putwchar_unlocked (wchar_t __wc);
+extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
+     __FILE *__restrict __stream);
+extern int fputws_unlocked (__const wchar_t *__restrict __ws,
+       __FILE *__restrict __stream);
+extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
+   __const wchar_t *__restrict __format,
+   __const struct tm *__restrict __tp) throw ();
+extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
+     __const wchar_t *__restrict __format,
+     __const struct tm *__restrict __tp,
+     __locale_t __loc) throw ();
+}
+typedef unsigned int Py_UCS4;
+typedef Py_UCS4 Py_UNICODE;
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    Py_ssize_t length;
+    Py_UNICODE *str;
+    long hash;
+    PyObject *defenc;
+} PyUnicodeObject;
+extern PyTypeObject PyUnicode_Type;
+PyObject* PyUnicodeUCS4_FromUnicode(
+    const Py_UNICODE *u,
+    Py_ssize_t size
+    );
+PyObject* PyUnicodeUCS4_FromStringAndSize(
+    const char *u,
+    Py_ssize_t size
+    );
+PyObject* PyUnicodeUCS4_FromString(
+    const char *u
+    );
+Py_UNICODE * PyUnicodeUCS4_AsUnicode(
+    PyObject *unicode
+    );
+Py_ssize_t PyUnicodeUCS4_GetSize(
+    PyObject *unicode
+    );
+Py_UNICODE PyUnicodeUCS4_GetMax(void);
+int PyUnicodeUCS4_Resize(
+    PyObject **unicode,
+    Py_ssize_t length
+    );
+PyObject* PyUnicodeUCS4_FromEncodedObject(
+    register PyObject *obj,
+    const char *encoding,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_FromObject(
+    register PyObject *obj
+    );
+PyObject * PyUnicodeUCS4_FromFormatV(const char*, va_list);
+PyObject * PyUnicodeUCS4_FromFormat(const char*, ...);
+PyObject * _PyUnicode_FormatAdvanced(PyObject *obj,
+                                                 Py_UNICODE *format_spec,
+                                                 Py_ssize_t format_spec_len);
+PyObject* PyUnicodeUCS4_FromWideChar(
+    register const wchar_t *w,
+    Py_ssize_t size
+    );
+Py_ssize_t PyUnicodeUCS4_AsWideChar(
+    PyUnicodeObject *unicode,
+    register wchar_t *w,
+    Py_ssize_t size
+    );
+PyObject* PyUnicodeUCS4_FromOrdinal(int ordinal);
+int PyUnicodeUCS4_ClearFreelist(void);
+PyObject * _PyUnicodeUCS4_AsDefaultEncodedString(
+    PyObject *, const char *);
+const char* PyUnicodeUCS4_GetDefaultEncoding(void);
+int PyUnicodeUCS4_SetDefaultEncoding(
+    const char *encoding
+    );
+PyObject* PyUnicodeUCS4_Decode(
+    const char *s,
+    Py_ssize_t size,
+    const char *encoding,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_Encode(
+    const Py_UNICODE *s,
+    Py_ssize_t size,
+    const char *encoding,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_AsEncodedObject(
+    PyObject *unicode,
+    const char *encoding,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_AsEncodedString(
+    PyObject *unicode,
+    const char *encoding,
+    const char *errors
+    );
+PyObject* PyUnicode_BuildEncodingMap(
+    PyObject* string
+   );
+PyObject* PyUnicode_DecodeUTF7(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors
+    );
+PyObject* PyUnicode_DecodeUTF7Stateful(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors,
+    Py_ssize_t *consumed
+    );
+PyObject* PyUnicode_EncodeUTF7(
+    const Py_UNICODE *data,
+    Py_ssize_t length,
+    int encodeSetO,
+    int encodeWhiteSpace,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_DecodeUTF8(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_DecodeUTF8Stateful(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors,
+    Py_ssize_t *consumed
+    );
+PyObject* PyUnicodeUCS4_AsUTF8String(
+    PyObject *unicode
+    );
+PyObject* PyUnicodeUCS4_EncodeUTF8(
+    const Py_UNICODE *data,
+    Py_ssize_t length,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_DecodeUTF32(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors,
+    int *byteorder
+    );
+PyObject* PyUnicodeUCS4_DecodeUTF32Stateful(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors,
+    int *byteorder,
+    Py_ssize_t *consumed
+    );
+PyObject* PyUnicodeUCS4_AsUTF32String(
+    PyObject *unicode
+    );
+PyObject* PyUnicodeUCS4_EncodeUTF32(
+    const Py_UNICODE *data,
+    Py_ssize_t length,
+    const char *errors,
+    int byteorder
+    );
+PyObject* PyUnicodeUCS4_DecodeUTF16(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors,
+    int *byteorder
+    );
+PyObject* PyUnicodeUCS4_DecodeUTF16Stateful(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors,
+    int *byteorder,
+    Py_ssize_t *consumed
+    );
+PyObject* PyUnicodeUCS4_AsUTF16String(
+    PyObject *unicode
+    );
+PyObject* PyUnicodeUCS4_EncodeUTF16(
+    const Py_UNICODE *data,
+    Py_ssize_t length,
+    const char *errors,
+    int byteorder
+    );
+PyObject* PyUnicodeUCS4_DecodeUnicodeEscape(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_AsUnicodeEscapeString(
+    PyObject *unicode
+    );
+PyObject* PyUnicodeUCS4_EncodeUnicodeEscape(
+    const Py_UNICODE *data,
+    Py_ssize_t length
+    );
+PyObject* PyUnicodeUCS4_DecodeRawUnicodeEscape(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_AsRawUnicodeEscapeString(
+    PyObject *unicode
+    );
+PyObject* PyUnicodeUCS4_EncodeRawUnicodeEscape(
+    const Py_UNICODE *data,
+    Py_ssize_t length
+    );
+PyObject *_PyUnicode_DecodeUnicodeInternal(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_DecodeLatin1(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_AsLatin1String(
+    PyObject *unicode
+    );
+PyObject* PyUnicodeUCS4_EncodeLatin1(
+    const Py_UNICODE *data,
+    Py_ssize_t length,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_DecodeASCII(
+    const char *string,
+    Py_ssize_t length,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_AsASCIIString(
+    PyObject *unicode
+    );
+PyObject* PyUnicodeUCS4_EncodeASCII(
+    const Py_UNICODE *data,
+    Py_ssize_t length,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_DecodeCharmap(
+    const char *string,
+    Py_ssize_t length,
+    PyObject *mapping,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_AsCharmapString(
+    PyObject *unicode,
+    PyObject *mapping
+    );
+PyObject* PyUnicodeUCS4_EncodeCharmap(
+    const Py_UNICODE *data,
+    Py_ssize_t length,
+    PyObject *mapping,
+    const char *errors
+    );
+PyObject * PyUnicodeUCS4_TranslateCharmap(
+    const Py_UNICODE *data,
+    Py_ssize_t length,
+    PyObject *table,
+    const char *errors
+    );
+int PyUnicodeUCS4_EncodeDecimal(
+    Py_UNICODE *s,
+    Py_ssize_t length,
+    char *output,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_Concat(
+    PyObject *left,
+    PyObject *right
+    );
+PyObject* PyUnicodeUCS4_Split(
+    PyObject *s,
+    PyObject *sep,
+    Py_ssize_t maxsplit
+    );
+PyObject* PyUnicodeUCS4_Splitlines(
+    PyObject *s,
+    int keepends
+    );
+PyObject* PyUnicodeUCS4_Partition(
+    PyObject *s,
+    PyObject *sep
+    );
+PyObject* PyUnicodeUCS4_RPartition(
+    PyObject *s,
+    PyObject *sep
+    );
+PyObject* PyUnicodeUCS4_RSplit(
+    PyObject *s,
+    PyObject *sep,
+    Py_ssize_t maxsplit
+    );
+PyObject * PyUnicodeUCS4_Translate(
+    PyObject *str,
+    PyObject *table,
+    const char *errors
+    );
+PyObject* PyUnicodeUCS4_Join(
+    PyObject *separator,
+    PyObject *seq
+    );
+Py_ssize_t PyUnicodeUCS4_Tailmatch(
+    PyObject *str,
+    PyObject *substr,
+    Py_ssize_t start,
+    Py_ssize_t end,
+    int direction
+    );
+Py_ssize_t PyUnicodeUCS4_Find(
+    PyObject *str,
+    PyObject *substr,
+    Py_ssize_t start,
+    Py_ssize_t end,
+    int direction
+    );
+Py_ssize_t PyUnicodeUCS4_Count(
+    PyObject *str,
+    PyObject *substr,
+    Py_ssize_t start,
+    Py_ssize_t end
+    );
+PyObject * PyUnicodeUCS4_Replace(
+    PyObject *str,
+    PyObject *substr,
+    PyObject *replstr,
+    Py_ssize_t maxcount
+    );
+int PyUnicodeUCS4_Compare(
+    PyObject *left,
+    PyObject *right
+    );
+PyObject * PyUnicodeUCS4_RichCompare(
+    PyObject *left,
+    PyObject *right,
+    int op
+    );
+PyObject * PyUnicodeUCS4_Format(
+    PyObject *format,
+    PyObject *args
+    );
+int PyUnicodeUCS4_Contains(
+    PyObject *container,
+    PyObject *element
+    );
+PyObject * _PyUnicode_XStrip(
+    PyUnicodeObject *self,
+    int striptype,
+    PyObject *sepobj
+    );
+extern const unsigned char _Py_ascii_whitespace[];
+int _PyUnicodeUCS4_IsLowercase(
+    Py_UNICODE ch
+    );
+int _PyUnicodeUCS4_IsUppercase(
+    Py_UNICODE ch
+    );
+int _PyUnicodeUCS4_IsTitlecase(
+    Py_UNICODE ch
+    );
+int _PyUnicodeUCS4_IsWhitespace(
+    const Py_UNICODE ch
+    );
+int _PyUnicodeUCS4_IsLinebreak(
+    const Py_UNICODE ch
+    );
+Py_UNICODE _PyUnicodeUCS4_ToLowercase(
+    Py_UNICODE ch
+    );
+Py_UNICODE _PyUnicodeUCS4_ToUppercase(
+    Py_UNICODE ch
+    );
+Py_UNICODE _PyUnicodeUCS4_ToTitlecase(
+    Py_UNICODE ch
+    );
+int _PyUnicodeUCS4_ToDecimalDigit(
+    Py_UNICODE ch
+    );
+int _PyUnicodeUCS4_ToDigit(
+    Py_UNICODE ch
+    );
+double _PyUnicodeUCS4_ToNumeric(
+    Py_UNICODE ch
+    );
+int _PyUnicodeUCS4_IsDecimalDigit(
+    Py_UNICODE ch
+    );
+int _PyUnicodeUCS4_IsDigit(
+    Py_UNICODE ch
+    );
+int _PyUnicodeUCS4_IsNumeric(
+    Py_UNICODE ch
+    );
+int _PyUnicodeUCS4_IsAlpha(
+    Py_UNICODE ch
+    );
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    long ob_ival;
+} PyIntObject;
+extern PyTypeObject PyInt_Type;
+PyObject * PyInt_FromString(char*, char**, int);
+PyObject * PyInt_FromUnicode(Py_UNICODE*, Py_ssize_t, int);
+PyObject * PyInt_FromLong(long);
+PyObject * PyInt_FromSize_t(size_t);
+PyObject * PyInt_FromSsize_t(Py_ssize_t);
+long PyInt_AsLong(PyObject *);
+Py_ssize_t PyInt_AsSsize_t(PyObject *);
+unsigned long PyInt_AsUnsignedLongMask(PyObject *);
+unsigned long long PyInt_AsUnsignedLongLongMask(PyObject *);
+long PyInt_GetMax(void);
+unsigned long PyOS_strtoul(char *, char **, int);
+long PyOS_strtol(char *, char **, int);
+int PyInt_ClearFreeList(void);
+PyObject* _PyInt_Format(PyIntObject* v, int base, int newstyle);
+PyObject * _PyInt_FormatAdvanced(PyObject *obj,
+          char *format_spec,
+          Py_ssize_t format_spec_len);
+}
+extern "C" {
+typedef PyIntObject PyBoolObject;
+extern PyTypeObject PyBool_Type;
+extern PyIntObject _Py_ZeroStruct, _Py_TrueStruct;
+PyObject * PyBool_FromLong(long);
+}
+extern "C" {
+typedef struct _longobject PyLongObject;
+extern PyTypeObject PyLong_Type;
+PyObject * PyLong_FromLong(long);
+PyObject * PyLong_FromUnsignedLong(unsigned long);
+PyObject * PyLong_FromDouble(double);
+PyObject * PyLong_FromSize_t(size_t);
+PyObject * PyLong_FromSsize_t(Py_ssize_t);
+long PyLong_AsLong(PyObject *);
+unsigned long PyLong_AsUnsignedLong(PyObject *);
+unsigned long PyLong_AsUnsignedLongMask(PyObject *);
+Py_ssize_t PyLong_AsSsize_t(PyObject *);
+extern int _PyLong_DigitValue[256];
+double _PyLong_AsScaledDouble(PyObject *vv, int *e);
+double PyLong_AsDouble(PyObject *);
+PyObject * PyLong_FromVoidPtr(void *);
+void * PyLong_AsVoidPtr(PyObject *);
+PyObject * PyLong_FromLongLong(long long);
+PyObject * PyLong_FromUnsignedLongLong(unsigned long long);
+long long PyLong_AsLongLong(PyObject *);
+unsigned long long PyLong_AsUnsignedLongLong(PyObject *);
+unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *);
+PyObject * PyLong_FromString(char *, char **, int);
+PyObject * PyLong_FromUnicode(Py_UNICODE*, Py_ssize_t, int);
+int _PyLong_Sign(PyObject *v);
+size_t _PyLong_NumBits(PyObject *v);
+PyObject * _PyLong_FromByteArray(
+ const unsigned char* bytes, size_t n,
+ int little_endian, int is_signed);
+int _PyLong_AsByteArray(PyLongObject* v,
+ unsigned char* bytes, size_t n,
+ int little_endian, int is_signed);
+PyObject * _PyLong_Format(PyObject *aa, int base, int addL, int newstyle);
+PyObject * _PyLong_FormatAdvanced(PyObject *obj,
+           char *format_spec,
+           Py_ssize_t format_spec_len);
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    double ob_fval;
+} PyFloatObject;
+extern PyTypeObject PyFloat_Type;
+double PyFloat_GetMax(void);
+double PyFloat_GetMin(void);
+PyObject * PyFloat_GetInfo(void);
+PyObject * PyFloat_FromString(PyObject*, char** junk);
+PyObject * PyFloat_FromDouble(double);
+double PyFloat_AsDouble(PyObject *);
+void PyFloat_AsReprString(char*, PyFloatObject *v);
+void PyFloat_AsString(char*, PyFloatObject *v);
+int _PyFloat_Pack4(double x, unsigned char *p, int le);
+int _PyFloat_Pack8(double x, unsigned char *p, int le);
+int _PyFloat_Digits(char *buf, double v, int *signum);
+void _PyFloat_DigitsInit(void);
+double _PyFloat_Unpack4(const unsigned char *p, int le);
+double _PyFloat_Unpack8(const unsigned char *p, int le);
+int PyFloat_ClearFreeList(void);
+PyObject * _PyFloat_FormatAdvanced(PyObject *obj,
+            char *format_spec,
+            Py_ssize_t format_spec_len);
+}
+extern "C" {
+typedef struct {
+    double real;
+    double imag;
+} Py_complex;
+Py_complex _Py_c_sum(Py_complex, Py_complex);
+Py_complex _Py_c_diff(Py_complex, Py_complex);
+Py_complex _Py_c_neg(Py_complex);
+Py_complex _Py_c_prod(Py_complex, Py_complex);
+Py_complex _Py_c_quot(Py_complex, Py_complex);
+Py_complex _Py_c_pow(Py_complex, Py_complex);
+double _Py_c_abs(Py_complex);
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    Py_complex cval;
+} PyComplexObject;
+extern PyTypeObject PyComplex_Type;
+PyObject * PyComplex_FromCComplex(Py_complex);
+PyObject * PyComplex_FromDoubles(double real, double imag);
+double PyComplex_RealAsDouble(PyObject *op);
+double PyComplex_ImagAsDouble(PyObject *op);
+Py_complex PyComplex_AsCComplex(PyObject *op);
+}
+extern "C" {
+extern PyTypeObject PyRange_Type;
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type; Py_ssize_t ob_size;
+    long ob_shash;
+    int ob_sstate;
+    char ob_sval[1];
+} PyStringObject;
+extern PyTypeObject PyBaseString_Type;
+extern PyTypeObject PyString_Type;
+PyObject * PyString_FromStringAndSize(const char *, Py_ssize_t);
+PyObject * PyString_FromString(const char *);
+PyObject * PyString_FromFormatV(const char*, va_list)
+                                __attribute__((format(printf, 1, 0)));
+PyObject * PyString_FromFormat(const char*, ...)
+                                __attribute__((format(printf, 1, 2)));
+Py_ssize_t PyString_Size(PyObject *);
+char * PyString_AsString(PyObject *);
+PyObject * PyString_Repr(PyObject *, int);
+void PyString_Concat(PyObject **, PyObject *);
+void PyString_ConcatAndDel(PyObject **, PyObject *);
+int _PyString_Resize(PyObject **, Py_ssize_t);
+int _PyString_Eq(PyObject *, PyObject*);
+PyObject * PyString_Format(PyObject *, PyObject *);
+PyObject * _PyString_FormatLong(PyObject*, int, int,
+                                                  int, char**, int*);
+PyObject * PyString_DecodeEscape(const char *, Py_ssize_t,
+                                                   const char *, Py_ssize_t,
+                                                   const char *);
+void PyString_InternInPlace(PyObject **);
+void PyString_InternImmortal(PyObject **);
+PyObject * PyString_InternFromString(const char *);
+void _Py_ReleaseInternedStrings(void);
+PyObject * _PyString_Join(PyObject *sep, PyObject *x);
+PyObject* PyString_Decode(
+    const char *s,
+    Py_ssize_t size,
+    const char *encoding,
+    const char *errors
+    );
+PyObject* PyString_Encode(
+    const char *s,
+    Py_ssize_t size,
+    const char *encoding,
+    const char *errors
+    );
+PyObject* PyString_AsEncodedObject(
+    PyObject *str,
+    const char *encoding,
+    const char *errors
+    );
+PyObject* PyString_AsEncodedString(
+    PyObject *str,
+    const char *encoding,
+    const char *errors
+    );
+PyObject* PyString_AsDecodedObject(
+    PyObject *str,
+    const char *encoding,
+    const char *errors
+    );
+PyObject* PyString_AsDecodedString(
+    PyObject *str,
+    const char *encoding,
+    const char *errors
+    );
+int PyString_AsStringAndSize(
+    register PyObject *obj,
+    register char **s,
+    register Py_ssize_t *len
+    );
+int _PyString_InsertThousandsGrouping(char *buffer,
+                                                  Py_ssize_t n_buffer,
+                                                  Py_ssize_t n_digits,
+                                                  Py_ssize_t buf_size,
+                                                  Py_ssize_t *count,
+                                                  int append_zero_char);
+PyObject * _PyBytes_FormatAdvanced(PyObject *obj,
+                                               char *format_spec,
+                                               Py_ssize_t format_spec_len);
+}
+extern "C" {
+extern PyTypeObject PyBuffer_Type;
+PyObject * PyBuffer_FromObject(PyObject *base,
+                                           Py_ssize_t offset, Py_ssize_t size);
+PyObject * PyBuffer_FromReadWriteObject(PyObject *base,
+                                                    Py_ssize_t offset,
+                                                    Py_ssize_t size);
+PyObject * PyBuffer_FromMemory(void *ptr, Py_ssize_t size);
+PyObject * PyBuffer_FromReadWriteMemory(void *ptr, Py_ssize_t size);
+PyObject * PyBuffer_New(Py_ssize_t size);
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type; Py_ssize_t ob_size;
+    int ob_exports;
+    Py_ssize_t ob_alloc;
+    char *ob_bytes;
+} PyByteArrayObject;
+extern PyTypeObject PyByteArray_Type;
+extern PyTypeObject PyByteArrayIter_Type;
+PyObject * PyByteArray_FromObject(PyObject *);
+PyObject * PyByteArray_Concat(PyObject *, PyObject *);
+PyObject * PyByteArray_FromStringAndSize(const char *, Py_ssize_t);
+Py_ssize_t PyByteArray_Size(PyObject *);
+char * PyByteArray_AsString(PyObject *);
+int PyByteArray_Resize(PyObject *, Py_ssize_t);
+extern char _PyByteArray_empty_string[];
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type; Py_ssize_t ob_size;
+    PyObject *ob_item[1];
+} PyTupleObject;
+extern PyTypeObject PyTuple_Type;
+PyObject * PyTuple_New(Py_ssize_t size);
+Py_ssize_t PyTuple_Size(PyObject *);
+PyObject * PyTuple_GetItem(PyObject *, Py_ssize_t);
+int PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *);
+PyObject * PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
+int _PyTuple_Resize(PyObject **, Py_ssize_t);
+PyObject * PyTuple_Pack(Py_ssize_t, ...);
+int PyTuple_ClearFreeList(void);
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type; Py_ssize_t ob_size;
+    PyObject **ob_item;
+    Py_ssize_t allocated;
+} PyListObject;
+extern PyTypeObject PyList_Type;
+PyObject * PyList_New(Py_ssize_t size);
+Py_ssize_t PyList_Size(PyObject *);
+PyObject * PyList_GetItem(PyObject *, Py_ssize_t);
+int PyList_SetItem(PyObject *, Py_ssize_t, PyObject *);
+int PyList_Insert(PyObject *, Py_ssize_t, PyObject *);
+int PyList_Append(PyObject *, PyObject *);
+PyObject * PyList_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
+int PyList_SetSlice(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
+int PyList_Sort(PyObject *);
+int PyList_Reverse(PyObject *);
+PyObject * PyList_AsTuple(PyObject *);
+PyObject * _PyList_Extend(PyListObject *, PyObject *);
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t me_hash;
+    PyObject *me_key;
+    PyObject *me_value;
+} PyDictEntry;
+typedef struct _dictobject PyDictObject;
+struct _dictobject {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    Py_ssize_t ma_fill;
+    Py_ssize_t ma_used;
+    Py_ssize_t ma_mask;
+    PyDictEntry *ma_table;
+    PyDictEntry *(*ma_lookup)(PyDictObject *mp, PyObject *key, long hash);
+    PyDictEntry ma_smalltable[8];
+};
+extern PyTypeObject PyDict_Type;
+PyObject * PyDict_New(void);
+PyObject * PyDict_GetItem(PyObject *mp, PyObject *key);
+int PyDict_SetItem(PyObject *mp, PyObject *key, PyObject *item);
+int PyDict_DelItem(PyObject *mp, PyObject *key);
+void PyDict_Clear(PyObject *mp);
+int PyDict_Next(
+    PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value);
+int _PyDict_Next(
+    PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value, long *hash);
+PyObject * PyDict_Keys(PyObject *mp);
+PyObject * PyDict_Values(PyObject *mp);
+PyObject * PyDict_Items(PyObject *mp);
+Py_ssize_t PyDict_Size(PyObject *mp);
+PyObject * PyDict_Copy(PyObject *mp);
+int PyDict_Contains(PyObject *mp, PyObject *key);
+int _PyDict_Contains(PyObject *mp, PyObject *key, long hash);
+PyObject * _PyDict_NewPresized(Py_ssize_t minused);
+int PyDict_Update(PyObject *mp, PyObject *other);
+int PyDict_Merge(PyObject *mp,
+                                   PyObject *other,
+                                   int override);
+int PyDict_MergeFromSeq2(PyObject *d,
+                                           PyObject *seq2,
+                                           int override);
+PyObject * PyDict_GetItemString(PyObject *dp, const char *key);
+int PyDict_SetItemString(PyObject *dp, const char *key, PyObject *item);
+int PyDict_DelItemString(PyObject *dp, const char *key);
+}
+extern "C" {
+extern PyTypeObject PyEnum_Type;
+extern PyTypeObject PyReversed_Type;
+}
+extern "C" {
+typedef struct {
+    long hash;
+    PyObject *key;
+} setentry;
+typedef struct _setobject PySetObject;
+struct _setobject {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    Py_ssize_t fill;
+    Py_ssize_t used;
+    Py_ssize_t mask;
+    setentry *table;
+    setentry *(*lookup)(PySetObject *so, PyObject *key, long hash);
+    setentry smalltable[8];
+    long hash;
+    PyObject *weakreflist;
+};
+extern PyTypeObject PySet_Type;
+extern PyTypeObject PyFrozenSet_Type;
+PyObject * PySet_New(PyObject *);
+PyObject * PyFrozenSet_New(PyObject *);
+Py_ssize_t PySet_Size(PyObject *anyset);
+int PySet_Clear(PyObject *set);
+int PySet_Contains(PyObject *anyset, PyObject *key);
+int PySet_Discard(PyObject *set, PyObject *key);
+int PySet_Add(PyObject *set, PyObject *key);
+int _PySet_Next(PyObject *set, Py_ssize_t *pos, PyObject **key);
+int _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, long *hash);
+PyObject * PySet_Pop(PyObject *set);
+int _PySet_Update(PyObject *set, PyObject *iterable);
+}
+extern "C" {
+extern PyTypeObject PyCFunction_Type;
+typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
+typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *,
+          PyObject *);
+typedef PyObject *(*PyNoArgsFunction)(PyObject *);
+PyCFunction PyCFunction_GetFunction(PyObject *);
+PyObject * PyCFunction_GetSelf(PyObject *);
+int PyCFunction_GetFlags(PyObject *);
+PyObject * PyCFunction_Call(PyObject *, PyObject *, PyObject *);
+struct PyMethodDef {
+    const char *ml_name;
+    PyCFunction ml_meth;
+    int ml_flags;
+    const char *ml_doc;
+};
+typedef struct PyMethodDef PyMethodDef;
+PyObject * Py_FindMethod(PyMethodDef[], PyObject *, const char *);
+PyObject * PyCFunction_NewEx(PyMethodDef *, PyObject *,
+      PyObject *);
+typedef struct PyMethodChain {
+    PyMethodDef *methods;
+    struct PyMethodChain *link;
+} PyMethodChain;
+PyObject * Py_FindMethodInChain(PyMethodChain *, PyObject *,
+                                            const char *);
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyMethodDef *m_ml;
+    PyObject *m_self;
+    PyObject *m_module;
+} PyCFunctionObject;
+int PyCFunction_ClearFreeList(void);
+}
+extern "C" {
+extern PyTypeObject PyModule_Type;
+PyObject * PyModule_New(const char *);
+PyObject * PyModule_GetDict(PyObject *);
+char * PyModule_GetName(PyObject *);
+char * PyModule_GetFilename(PyObject *);
+void _PyModule_Clear(PyObject *);
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyObject *func_code;
+    PyObject *func_globals;
+    PyObject *func_defaults;
+    PyObject *func_closure;
+    PyObject *func_doc;
+    PyObject *func_name;
+    PyObject *func_dict;
+    PyObject *func_weakreflist;
+    PyObject *func_module;
+} PyFunctionObject;
+extern PyTypeObject PyFunction_Type;
+PyObject * PyFunction_New(PyObject *, PyObject *);
+PyObject * PyFunction_GetCode(PyObject *);
+PyObject * PyFunction_GetGlobals(PyObject *);
+PyObject * PyFunction_GetModule(PyObject *);
+PyObject * PyFunction_GetDefaults(PyObject *);
+int PyFunction_SetDefaults(PyObject *, PyObject *);
+PyObject * PyFunction_GetClosure(PyObject *);
+int PyFunction_SetClosure(PyObject *, PyObject *);
+extern PyTypeObject PyClassMethod_Type;
+extern PyTypeObject PyStaticMethod_Type;
+PyObject * PyClassMethod_New(PyObject *);
+PyObject * PyStaticMethod_New(PyObject *);
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyObject *cl_bases;
+    PyObject *cl_dict;
+    PyObject *cl_name;
+    PyObject *cl_getattr;
+    PyObject *cl_setattr;
+    PyObject *cl_delattr;
+} PyClassObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyClassObject *in_class;
+    PyObject *in_dict;
+    PyObject *in_weakreflist;
+} PyInstanceObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyObject *im_func;
+    PyObject *im_self;
+    PyObject *im_class;
+    PyObject *im_weakreflist;
+} PyMethodObject;
+extern PyTypeObject PyClass_Type, PyInstance_Type, PyMethod_Type;
+PyObject * PyClass_New(PyObject *, PyObject *, PyObject *);
+PyObject * PyInstance_New(PyObject *, PyObject *,
+                                            PyObject *);
+PyObject * PyInstance_NewRaw(PyObject *, PyObject *);
+PyObject * PyMethod_New(PyObject *, PyObject *, PyObject *);
+PyObject * PyMethod_Function(PyObject *);
+PyObject * PyMethod_Self(PyObject *);
+PyObject * PyMethod_Class(PyObject *);
+PyObject * _PyInstance_Lookup(PyObject *pinst, PyObject *name);
+int PyClass_IsSubclass(PyObject *, PyObject *);
+int PyMethod_ClearFreeList(void);
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    FILE *f_fp;
+    PyObject *f_name;
+    PyObject *f_mode;
+    int (*f_close)(FILE *);
+    int f_softspace;
+    int f_binary;
+    char* f_buf;
+    char* f_bufend;
+    char* f_bufptr;
+    char *f_setbuf;
+    int f_univ_newline;
+    int f_newlinetypes;
+    int f_skipnextlf;
+    PyObject *f_encoding;
+    PyObject *f_errors;
+    PyObject *weakreflist;
+    int unlocked_count;
+    int readable;
+    int writable;
+} PyFileObject;
+extern PyTypeObject PyFile_Type;
+PyObject * PyFile_FromString(char *, char *);
+void PyFile_SetBufSize(PyObject *, int);
+int PyFile_SetEncoding(PyObject *, const char *);
+int PyFile_SetEncodingAndErrors(PyObject *, const char *, char *errors);
+PyObject * PyFile_FromFile(FILE *, char *, char *,
+                                             int (*)(FILE *));
+FILE * PyFile_AsFile(PyObject *);
+void PyFile_IncUseCount(PyFileObject *);
+void PyFile_DecUseCount(PyFileObject *);
+PyObject * PyFile_Name(PyObject *);
+PyObject * PyFile_GetLine(PyObject *, int);
+int PyFile_WriteObject(PyObject *, PyObject *, int);
+int PyFile_SoftSpace(PyObject *, int);
+int PyFile_WriteString(const char *, PyObject *);
+int PyObject_AsFileDescriptor(PyObject *);
+extern const char * Py_FileSystemDefaultEncoding;
+char *Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *);
+size_t Py_UniversalNewlineFread(char *, size_t, FILE *, PyObject *);
+int _PyFile_SanitizeMode(char *mode);
+}
+extern "C" {
+extern PyTypeObject PyCObject_Type;
+PyObject * PyCObject_FromVoidPtr(
+ void *cobj, void (*destruct)(void*));
+PyObject * PyCObject_FromVoidPtrAndDesc(
+ void *cobj, void *desc, void (*destruct)(void*,void*));
+void * PyCObject_AsVoidPtr(PyObject *);
+void * PyCObject_GetDesc(PyObject *);
+void * PyCObject_Import(char *module_name, char *cobject_name);
+int PyCObject_SetVoidPtr(PyObject *self, void *cobj);
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    void *cobject;
+    void *desc;
+    void (*destructor)(void *);
+} PyCObject;
+}
+extern "C" {
+struct _frame;
+typedef struct _traceback {
+ Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+ struct _traceback *tb_next;
+ struct _frame *tb_frame;
+ int tb_lasti;
+ int tb_lineno;
+} PyTracebackObject;
+int PyTraceBack_Here(struct _frame *);
+int PyTraceBack_Print(PyObject *, PyObject *);
+int _Py_DisplaySourceLine(PyObject *, const char *, int, int);
+extern PyTypeObject PyTraceBack_Type;
+}
+extern "C" {
+extern PyObject _Py_EllipsisObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyObject *start, *stop, *step;
+} PySliceObject;
+extern PyTypeObject PySlice_Type;
+extern PyTypeObject PyEllipsis_Type;
+PyObject * PySlice_New(PyObject* start, PyObject* stop,
+                                  PyObject* step);
+PyObject * _PySlice_FromIndices(Py_ssize_t start, Py_ssize_t stop);
+int PySlice_GetIndices(PySliceObject *r, Py_ssize_t length,
+                                  Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step);
+int PySlice_GetIndicesEx(PySliceObject *r, Py_ssize_t length,
+        Py_ssize_t *start, Py_ssize_t *stop,
+        Py_ssize_t *step, Py_ssize_t *slicelength);
+}
+extern "C" {
+typedef struct {
+ Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+ PyObject *ob_ref;
+} PyCellObject;
+extern PyTypeObject PyCell_Type;
+PyObject * PyCell_New(PyObject *);
+PyObject * PyCell_Get(PyObject *);
+int PyCell_Set(PyObject *, PyObject *);
+}
+extern "C" {
+extern PyTypeObject PySeqIter_Type;
+PyObject * PySeqIter_New(PyObject *);
+extern PyTypeObject PyCallIter_Type;
+PyObject * PyCallIter_New(PyObject *, PyObject *);
+}
+extern "C" {
+struct _frame;
+typedef struct {
+ Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+ struct _frame *gi_frame;
+ int gi_running;
+ PyObject *gi_code;
+ PyObject *gi_weakreflist;
+} PyGenObject;
+extern PyTypeObject PyGen_Type;
+PyObject * PyGen_New(struct _frame *);
+int PyGen_NeedsFinalizing(PyGenObject *);
+}
+extern "C" {
+typedef PyObject *(*getter)(PyObject *, void *);
+typedef int (*setter)(PyObject *, PyObject *, void *);
+typedef struct PyGetSetDef {
+    char *name;
+    getter get;
+    setter set;
+    char *doc;
+    void *closure;
+} PyGetSetDef;
+typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
+                                 void *wrapped);
+typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args,
+                                      void *wrapped, PyObject *kwds);
+struct wrapperbase {
+    char *name;
+    int offset;
+    void *function;
+    wrapperfunc wrapper;
+    char *doc;
+    int flags;
+    PyObject *name_strobj;
+};
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type; PyTypeObject *d_type; PyObject *d_name;
+} PyDescrObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type; PyTypeObject *d_type; PyObject *d_name;
+    PyMethodDef *d_method;
+} PyMethodDescrObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type; PyTypeObject *d_type; PyObject *d_name;
+    struct PyMemberDef *d_member;
+} PyMemberDescrObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type; PyTypeObject *d_type; PyObject *d_name;
+    PyGetSetDef *d_getset;
+} PyGetSetDescrObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type; PyTypeObject *d_type; PyObject *d_name;
+    struct wrapperbase *d_base;
+    void *d_wrapped;
+} PyWrapperDescrObject;
+extern PyTypeObject PyWrapperDescr_Type;
+extern PyTypeObject PyDictProxy_Type;
+extern PyTypeObject PyGetSetDescr_Type;
+extern PyTypeObject PyMemberDescr_Type;
+PyObject * PyDescr_NewMethod(PyTypeObject *, PyMethodDef *);
+PyObject * PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *);
+PyObject * PyDescr_NewMember(PyTypeObject *,
+                                               struct PyMemberDef *);
+PyObject * PyDescr_NewGetSet(PyTypeObject *,
+                                               struct PyGetSetDef *);
+PyObject * PyDescr_NewWrapper(PyTypeObject *,
+                                                struct wrapperbase *, void *);
+PyObject * PyDictProxy_New(PyObject *);
+PyObject * PyWrapper_New(PyObject *, PyObject *);
+extern PyTypeObject PyProperty_Type;
+}
+extern "C" {
+void _PyWarnings_Init(void);
+int PyErr_WarnEx(PyObject *, const char *, Py_ssize_t);
+int PyErr_WarnExplicit(PyObject *, const char *, const char *, int,
+                                    const char *, PyObject *);
+}
+extern "C" {
+typedef struct _PyWeakReference PyWeakReference;
+struct _PyWeakReference {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyObject *wr_object;
+    PyObject *wr_callback;
+    long hash;
+    PyWeakReference *wr_prev;
+    PyWeakReference *wr_next;
+};
+extern PyTypeObject _PyWeakref_RefType;
+extern PyTypeObject _PyWeakref_ProxyType;
+extern PyTypeObject _PyWeakref_CallableProxyType;
+PyObject * PyWeakref_NewRef(PyObject *ob,
+                                              PyObject *callback);
+PyObject * PyWeakref_NewProxy(PyObject *ob,
+                                                PyObject *callback);
+PyObject * PyWeakref_GetObject(PyObject *ref);
+Py_ssize_t _PyWeakref_GetWeakrefCount(PyWeakReference *head);
+void _PyWeakref_ClearRef(PyWeakReference *self);
+}
+extern "C" {
+int PyCodec_Register(
+       PyObject *search_function
+       );
+PyObject * _PyCodec_Lookup(
+       const char *encoding
+       );
+PyObject * PyCodec_Encode(
+       PyObject *object,
+       const char *encoding,
+       const char *errors
+       );
+PyObject * PyCodec_Decode(
+       PyObject *object,
+       const char *encoding,
+       const char *errors
+       );
+PyObject * PyCodec_Encoder(
+       const char *encoding
+       );
+PyObject * PyCodec_Decoder(
+       const char *encoding
+       );
+PyObject * PyCodec_IncrementalEncoder(
+       const char *encoding,
+       const char *errors
+       );
+PyObject * PyCodec_IncrementalDecoder(
+       const char *encoding,
+       const char *errors
+       );
+PyObject * PyCodec_StreamReader(
+       const char *encoding,
+       PyObject *stream,
+       const char *errors
+       );
+PyObject * PyCodec_StreamWriter(
+       const char *encoding,
+       PyObject *stream,
+       const char *errors
+       );
+int PyCodec_RegisterError(const char *name, PyObject *error);
+PyObject * PyCodec_LookupError(const char *name);
+PyObject * PyCodec_StrictErrors(PyObject *exc);
+PyObject * PyCodec_IgnoreErrors(PyObject *exc);
+PyObject * PyCodec_ReplaceErrors(PyObject *exc);
+PyObject * PyCodec_XMLCharRefReplaceErrors(PyObject *exc);
+PyObject * PyCodec_BackslashReplaceErrors(PyObject *exc);
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyObject *dict;
+    PyObject *args;
+    PyObject *message;
+} PyBaseExceptionObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyObject *dict;
+    PyObject *args;
+    PyObject *message;
+    PyObject *msg;
+    PyObject *filename;
+    PyObject *lineno;
+    PyObject *offset;
+    PyObject *text;
+    PyObject *print_file_and_line;
+} PySyntaxErrorObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyObject *dict;
+    PyObject *args;
+    PyObject *message;
+    PyObject *encoding;
+    PyObject *object;
+    Py_ssize_t start;
+    Py_ssize_t end;
+    PyObject *reason;
+} PyUnicodeErrorObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyObject *dict;
+    PyObject *args;
+    PyObject *message;
+    PyObject *code;
+} PySystemExitObject;
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    PyObject *dict;
+    PyObject *args;
+    PyObject *message;
+    PyObject *myerrno;
+    PyObject *strerror;
+    PyObject *filename;
+} PyEnvironmentErrorObject;
+void PyErr_SetNone(PyObject *);
+void PyErr_SetObject(PyObject *, PyObject *);
+void PyErr_SetString(PyObject *, const char *);
+PyObject * PyErr_Occurred(void);
+void PyErr_Clear(void);
+void PyErr_Fetch(PyObject **, PyObject **, PyObject **);
+void PyErr_Restore(PyObject *, PyObject *, PyObject *);
+int PyErr_GivenExceptionMatches(PyObject *, PyObject *);
+int PyErr_ExceptionMatches(PyObject *);
+void PyErr_NormalizeException(PyObject**, PyObject**, PyObject**);
+extern PyObject * PyExc_BaseException;
+extern PyObject * PyExc_Exception;
+extern PyObject * PyExc_StopIteration;
+extern PyObject * PyExc_GeneratorExit;
+extern PyObject * PyExc_StandardError;
+extern PyObject * PyExc_ArithmeticError;
+extern PyObject * PyExc_LookupError;
+extern PyObject * PyExc_AssertionError;
+extern PyObject * PyExc_AttributeError;
+extern PyObject * PyExc_EOFError;
+extern PyObject * PyExc_FloatingPointError;
+extern PyObject * PyExc_EnvironmentError;
+extern PyObject * PyExc_IOError;
+extern PyObject * PyExc_OSError;
+extern PyObject * PyExc_ImportError;
+extern PyObject * PyExc_IndexError;
+extern PyObject * PyExc_KeyError;
+extern PyObject * PyExc_KeyboardInterrupt;
+extern PyObject * PyExc_MemoryError;
+extern PyObject * PyExc_NameError;
+extern PyObject * PyExc_OverflowError;
+extern PyObject * PyExc_RuntimeError;
+extern PyObject * PyExc_NotImplementedError;
+extern PyObject * PyExc_SyntaxError;
+extern PyObject * PyExc_IndentationError;
+extern PyObject * PyExc_TabError;
+extern PyObject * PyExc_ReferenceError;
+extern PyObject * PyExc_SystemError;
+extern PyObject * PyExc_SystemExit;
+extern PyObject * PyExc_TypeError;
+extern PyObject * PyExc_UnboundLocalError;
+extern PyObject * PyExc_UnicodeError;
+extern PyObject * PyExc_UnicodeEncodeError;
+extern PyObject * PyExc_UnicodeDecodeError;
+extern PyObject * PyExc_UnicodeTranslateError;
+extern PyObject * PyExc_ValueError;
+extern PyObject * PyExc_ZeroDivisionError;
+extern PyObject * PyExc_BufferError;
+extern PyObject * PyExc_MemoryErrorInst;
+extern PyObject * PyExc_RecursionErrorInst;
+extern PyObject * PyExc_Warning;
+extern PyObject * PyExc_UserWarning;
+extern PyObject * PyExc_DeprecationWarning;
+extern PyObject * PyExc_PendingDeprecationWarning;
+extern PyObject * PyExc_SyntaxWarning;
+extern PyObject * PyExc_RuntimeWarning;
+extern PyObject * PyExc_FutureWarning;
+extern PyObject * PyExc_ImportWarning;
+extern PyObject * PyExc_UnicodeWarning;
+extern PyObject * PyExc_BytesWarning;
+int PyErr_BadArgument(void);
+PyObject * PyErr_NoMemory(void);
+PyObject * PyErr_SetFromErrno(PyObject *);
+PyObject * PyErr_SetFromErrnoWithFilenameObject(
+    PyObject *, PyObject *);
+PyObject * PyErr_SetFromErrnoWithFilename(PyObject *, char *);
+PyObject * PyErr_Format(PyObject *, const char *, ...)
+                        __attribute__((format(printf, 2, 3)));
+void PyErr_BadInternalCall(void);
+void _PyErr_BadInternalCall(char *filename, int lineno);
+PyObject * PyErr_NewException(char *name, PyObject *base,
+                                         PyObject *dict);
+void PyErr_WriteUnraisable(PyObject *);
+int PyErr_CheckSignals(void);
+void PyErr_SetInterrupt(void);
+int PySignal_SetWakeupFd(int fd);
+void PyErr_SyntaxLocation(const char *, int);
+PyObject * PyErr_ProgramText(const char *, int);
+PyObject * PyUnicodeDecodeError_Create(
+    const char *, const char *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
+PyObject * PyUnicodeEncodeError_Create(
+    const char *, const Py_UNICODE *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
+PyObject * PyUnicodeTranslateError_Create(
+    const Py_UNICODE *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
+PyObject * PyUnicodeEncodeError_GetEncoding(PyObject *);
+PyObject * PyUnicodeDecodeError_GetEncoding(PyObject *);
+PyObject * PyUnicodeEncodeError_GetObject(PyObject *);
+PyObject * PyUnicodeDecodeError_GetObject(PyObject *);
+PyObject * PyUnicodeTranslateError_GetObject(PyObject *);
+int PyUnicodeEncodeError_GetStart(PyObject *, Py_ssize_t *);
+int PyUnicodeDecodeError_GetStart(PyObject *, Py_ssize_t *);
+int PyUnicodeTranslateError_GetStart(PyObject *, Py_ssize_t *);
+int PyUnicodeEncodeError_SetStart(PyObject *, Py_ssize_t);
+int PyUnicodeDecodeError_SetStart(PyObject *, Py_ssize_t);
+int PyUnicodeTranslateError_SetStart(PyObject *, Py_ssize_t);
+int PyUnicodeEncodeError_GetEnd(PyObject *, Py_ssize_t *);
+int PyUnicodeDecodeError_GetEnd(PyObject *, Py_ssize_t *);
+int PyUnicodeTranslateError_GetEnd(PyObject *, Py_ssize_t *);
+int PyUnicodeEncodeError_SetEnd(PyObject *, Py_ssize_t);
+int PyUnicodeDecodeError_SetEnd(PyObject *, Py_ssize_t);
+int PyUnicodeTranslateError_SetEnd(PyObject *, Py_ssize_t);
+PyObject * PyUnicodeEncodeError_GetReason(PyObject *);
+PyObject * PyUnicodeDecodeError_GetReason(PyObject *);
+PyObject * PyUnicodeTranslateError_GetReason(PyObject *);
+int PyUnicodeEncodeError_SetReason(
+    PyObject *, const char *);
+int PyUnicodeDecodeError_SetReason(
+    PyObject *, const char *);
+int PyUnicodeTranslateError_SetReason(
+    PyObject *, const char *);
+int PyOS_snprintf(char *str, size_t size, const char *format, ...)
+                        __attribute__((format(printf, 3, 4)));
+int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)
+                        __attribute__((format(printf, 3, 0)));
+}
+extern "C" {
+struct _ts;
+struct _is;
+typedef struct _is {
+    struct _is *next;
+    struct _ts *tstate_head;
+    PyObject *modules;
+    PyObject *sysdict;
+    PyObject *builtins;
+    PyObject *modules_reloading;
+    PyObject *codec_search_path;
+    PyObject *codec_search_cache;
+    PyObject *codec_error_registry;
+    int dlopenflags;
+} PyInterpreterState;
+struct _frame;
+typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *);
+typedef struct _ts {
+    struct _ts *next;
+    PyInterpreterState *interp;
+    struct _frame *frame;
+    int recursion_depth;
+    int tracing;
+    int use_tracing;
+    Py_tracefunc c_profilefunc;
+    Py_tracefunc c_tracefunc;
+    PyObject *c_profileobj;
+    PyObject *c_traceobj;
+    PyObject *curexc_type;
+    PyObject *curexc_value;
+    PyObject *curexc_traceback;
+    PyObject *exc_type;
+    PyObject *exc_value;
+    PyObject *exc_traceback;
+    PyObject *dict;
+    int tick_counter;
+    int gilstate_counter;
+    PyObject *async_exc;
+    long thread_id;
+} PyThreadState;
+PyInterpreterState * PyInterpreterState_New(void);
+void PyInterpreterState_Clear(PyInterpreterState *);
+void PyInterpreterState_Delete(PyInterpreterState *);
+PyThreadState * PyThreadState_New(PyInterpreterState *);
+PyThreadState * _PyThreadState_Prealloc(PyInterpreterState *);
+void _PyThreadState_Init(PyThreadState *);
+void PyThreadState_Clear(PyThreadState *);
+void PyThreadState_Delete(PyThreadState *);
+void PyThreadState_DeleteCurrent(void);
+PyThreadState * PyThreadState_Get(void);
+PyThreadState * PyThreadState_Swap(PyThreadState *);
+PyObject * PyThreadState_GetDict(void);
+int PyThreadState_SetAsyncExc(long, PyObject *);
+extern PyThreadState * _PyThreadState_Current;
+typedef
+    enum {PyGILState_LOCKED, PyGILState_UNLOCKED}
+        PyGILState_STATE;
+PyGILState_STATE PyGILState_Ensure(void);
+void PyGILState_Release(PyGILState_STATE);
+PyThreadState * PyGILState_GetThisThreadState(void);
+PyObject * _PyThread_CurrentFrames(void);
+PyInterpreterState * PyInterpreterState_Head(void);
+PyInterpreterState * PyInterpreterState_Next(PyInterpreterState *);
+PyThreadState * PyInterpreterState_ThreadHead(PyInterpreterState *);
+PyThreadState * PyThreadState_Next(PyThreadState *);
+typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_);
+extern PyThreadFrameGetter _PyThreadState_GetFrame;
+}
+extern "C" {
+  typedef struct _arena PyArena;
+  PyArena * PyArena_New(void);
+  void PyArena_Free(PyArena *);
+  void * PyArena_Malloc(PyArena *, size_t size);
+  int PyArena_AddPyObject(PyArena *, PyObject *);
+}
+extern "C" {
+PyObject * _Py_VaBuildValue_SizeT(const char *, va_list);
+int PyArg_Parse(PyObject *, const char *, ...);
+int PyArg_ParseTuple(PyObject *, const char *, ...) ;
+int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
+                                                  const char *, char **, ...);
+int PyArg_UnpackTuple(PyObject *, const char *, Py_ssize_t, Py_ssize_t, ...);
+PyObject * Py_BuildValue(const char *, ...);
+PyObject * _Py_BuildValue_SizeT(const char *, ...);
+int _PyArg_NoKeywords(const char *funcname, PyObject *kw);
+int PyArg_VaParse(PyObject *, const char *, va_list);
+int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
+                                                  const char *, char **, va_list);
+PyObject * Py_VaBuildValue(const char *, va_list);
+int PyModule_AddObject(PyObject *, const char *, PyObject *);
+int PyModule_AddIntConstant(PyObject *, const char *, long);
+int PyModule_AddStringConstant(PyObject *, const char *, const char *);
+PyObject * Py_InitModule4_64(const char *name, PyMethodDef *methods,
+                                      const char *doc, PyObject *self,
+                                      int apiver);
+extern char * _Py_PackageContext;
+}
+extern "C" {
+typedef struct {
+    int cf_flags;
+} PyCompilerFlags;
+void Py_SetProgramName(char *);
+char * Py_GetProgramName(void);
+void Py_SetPythonHome(char *);
+char * Py_GetPythonHome(void);
+void Py_Initialize(void);
+void Py_InitializeEx(int);
+void Py_Finalize(void);
+int Py_IsInitialized(void);
+PyThreadState * Py_NewInterpreter(void);
+void Py_EndInterpreter(PyThreadState *);
+int PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *);
+int PyRun_AnyFileExFlags(FILE *, const char *, int, PyCompilerFlags *);
+int PyRun_SimpleStringFlags(const char *, PyCompilerFlags *);
+int PyRun_SimpleFileExFlags(FILE *, const char *, int, PyCompilerFlags *);
+int PyRun_InteractiveOneFlags(FILE *, const char *, PyCompilerFlags *);
+int PyRun_InteractiveLoopFlags(FILE *, const char *, PyCompilerFlags *);
+struct _mod * PyParser_ASTFromString(const char *, const char *,
+                                                 int, PyCompilerFlags *flags,
+                                                 PyArena *);
+struct _mod * PyParser_ASTFromFile(FILE *, const char *, int,
+                                               char *, char *,
+                                               PyCompilerFlags *, int *,
+                                               PyArena *);
+struct _node * PyParser_SimpleParseStringFlags(const char *, int,
+                                                          int);
+struct _node * PyParser_SimpleParseFileFlags(FILE *, const char *,
+                                                        int, int);
+PyObject * PyRun_StringFlags(const char *, int, PyObject *,
+                                         PyObject *, PyCompilerFlags *);
+PyObject * PyRun_FileExFlags(FILE *, const char *, int,
+                                         PyObject *, PyObject *, int,
+                                         PyCompilerFlags *);
+PyObject * Py_CompileStringFlags(const char *, const char *, int,
+                                             PyCompilerFlags *);
+struct symtable * Py_SymtableString(const char *, const char *, int);
+void PyErr_Print(void);
+void PyErr_PrintEx(int);
+void PyErr_Display(PyObject *, PyObject *, PyObject *);
+int Py_AtExit(void (*func)(void));
+void Py_Exit(int);
+int Py_FdIsInteractive(FILE *, const char *);
+int Py_Main(int argc, char **argv);
+char * Py_GetProgramFullPath(void);
+char * Py_GetPrefix(void);
+char * Py_GetExecPrefix(void);
+char * Py_GetPath(void);
+const char * Py_GetVersion(void);
+const char * Py_GetPlatform(void);
+const char * Py_GetCopyright(void);
+const char * Py_GetCompiler(void);
+const char * Py_GetBuildInfo(void);
+const char * _Py_svnversion(void);
+const char * Py_SubversionRevision(void);
+const char * Py_SubversionShortBranch(void);
+PyObject * _PyBuiltin_Init(void);
+PyObject * _PySys_Init(void);
+void _PyImport_Init(void);
+void _PyExc_Init(void);
+void _PyImportHooks_Init(void);
+int _PyFrame_Init(void);
+int _PyInt_Init(void);
+void _PyFloat_Init(void);
+int PyByteArray_Init(void);
+void _PyExc_Fini(void);
+void _PyImport_Fini(void);
+void PyMethod_Fini(void);
+void PyFrame_Fini(void);
+void PyCFunction_Fini(void);
+void PyDict_Fini(void);
+void PyTuple_Fini(void);
+void PyList_Fini(void);
+void PySet_Fini(void);
+void PyString_Fini(void);
+void PyInt_Fini(void);
+void PyFloat_Fini(void);
+void PyOS_FiniInterrupts(void);
+void PyByteArray_Fini(void);
+char * PyOS_Readline(FILE *, FILE *, char *);
+extern int (*PyOS_InputHook)(void);
+extern char *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, char *);
+extern PyThreadState* _PyOS_ReadlineTState;
+typedef void (*PyOS_sighandler_t)(int);
+PyOS_sighandler_t PyOS_getsig(int);
+PyOS_sighandler_t PyOS_setsig(int, PyOS_sighandler_t);
+}
+extern "C" {
+PyObject * PyEval_CallObjectWithKeywords(
+    PyObject *, PyObject *, PyObject *);
+PyObject * PyEval_CallObject(PyObject *, PyObject *);
+PyObject * PyEval_CallFunction(PyObject *obj,
+                                           const char *format, ...);
+PyObject * PyEval_CallMethod(PyObject *obj,
+                                         const char *methodname,
+                                         const char *format, ...);
+void PyEval_SetProfile(Py_tracefunc, PyObject *);
+void PyEval_SetTrace(Py_tracefunc, PyObject *);
+struct _frame;
+PyObject * PyEval_GetBuiltins(void);
+PyObject * PyEval_GetGlobals(void);
+PyObject * PyEval_GetLocals(void);
+struct _frame * PyEval_GetFrame(void);
+int PyEval_GetRestricted(void);
+int PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
+int Py_FlushLine(void);
+int Py_AddPendingCall(int (*func)(void *), void *arg);
+int Py_MakePendingCalls(void);
+void Py_SetRecursionLimit(int);
+int Py_GetRecursionLimit(void);
+int _Py_CheckRecursiveCall(char *where);
+extern int _Py_CheckRecursionLimit;
+const char * PyEval_GetFuncName(PyObject *);
+const char * PyEval_GetFuncDesc(PyObject *);
+PyObject * PyEval_GetCallStats(PyObject *);
+PyObject * PyEval_EvalFrame(struct _frame *);
+PyObject * PyEval_EvalFrameEx(struct _frame *f, int exc);
+extern volatile int _Py_Ticker;
+extern int _Py_CheckInterval;
+PyThreadState * PyEval_SaveThread(void);
+void PyEval_RestoreThread(PyThreadState *);
+int PyEval_ThreadsInitialized(void);
+void PyEval_InitThreads(void);
+void PyEval_AcquireLock(void);
+void PyEval_ReleaseLock(void);
+void PyEval_AcquireThread(PyThreadState *tstate);
+void PyEval_ReleaseThread(PyThreadState *tstate);
+void PyEval_ReInitThreads(void);
+int _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
+}
+extern "C" {
+PyObject * PySys_GetObject(char *);
+int PySys_SetObject(char *, PyObject *);
+FILE * PySys_GetFile(char *, FILE *);
+void PySys_SetArgv(int, char **);
+void PySys_SetArgvEx(int, char **, int);
+void PySys_SetPath(char *);
+void PySys_WriteStdout(const char *format, ...)
+   __attribute__((format(printf, 1, 2)));
+void PySys_WriteStderr(const char *format, ...)
+   __attribute__((format(printf, 1, 2)));
+extern PyObject * _PySys_TraceFunc, *_PySys_ProfileFunc;
+extern int _PySys_CheckInterval;
+void PySys_ResetWarnOptions(void);
+void PySys_AddWarnOption(char *);
+int PySys_HasWarnOptions(void);
+}
+extern "C" {
+int PyOS_InterruptOccurred(void);
+void PyOS_InitInterrupts(void);
+void PyOS_AfterFork(void);
+}
+extern "C" {
+long PyImport_GetMagicNumber(void);
+PyObject * PyImport_ExecCodeModule(char *name, PyObject *co);
+PyObject * PyImport_ExecCodeModuleEx(
+ char *name, PyObject *co, char *pathname);
+PyObject * PyImport_GetModuleDict(void);
+PyObject * PyImport_AddModule(const char *name);
+PyObject * PyImport_ImportModule(const char *name);
+PyObject * PyImport_ImportModuleNoBlock(const char *);
+PyObject * PyImport_ImportModuleLevel(char *name,
+ PyObject *globals, PyObject *locals, PyObject *fromlist, int level);
+PyObject * PyImport_GetImporter(PyObject *path);
+PyObject * PyImport_Import(PyObject *name);
+PyObject * PyImport_ReloadModule(PyObject *m);
+void PyImport_Cleanup(void);
+int PyImport_ImportFrozenModule(char *);
+void _PyImport_AcquireLock(void);
+int _PyImport_ReleaseLock(void);
+struct filedescr * _PyImport_FindModule(
+ const char *, PyObject *, char *, size_t, FILE **, PyObject **);
+int _PyImport_IsScript(struct filedescr *);
+void _PyImport_ReInitLock(void);
+PyObject *_PyImport_FindExtension(char *, char *);
+PyObject *_PyImport_FixupExtension(char *, char *);
+struct _inittab {
+    char *name;
+    void (*initfunc)(void);
+};
+extern PyTypeObject PyNullImporter_Type;
+extern struct _inittab * PyImport_Inittab;
+int PyImport_AppendInittab(char *name, void (*initfunc)(void));
+int PyImport_ExtendInittab(struct _inittab *newtab);
+struct _frozen {
+    char *name;
+    unsigned char *code;
+    int size;
+};
+extern struct _frozen * PyImport_FrozenModules;
+}
+extern "C" {
+     int PyObject_Cmp(PyObject *o1, PyObject *o2, int *result);
+     PyObject * PyObject_Call(PyObject *callable_object,
+                                         PyObject *args, PyObject *kw);
+     PyObject * PyObject_CallObject(PyObject *callable_object,
+                                               PyObject *args);
+     PyObject * PyObject_CallFunction(PyObject *callable_object,
+                                                 char *format, ...);
+     PyObject * PyObject_CallMethod(PyObject *o, char *m,
+                                               char *format, ...);
+     PyObject * _PyObject_CallFunction_SizeT(PyObject *callable,
+                                                         char *format, ...);
+     PyObject * _PyObject_CallMethod_SizeT(PyObject *o,
+                                                       char *name,
+                                                       char *format, ...);
+     PyObject * PyObject_CallFunctionObjArgs(PyObject *callable,
+                                                        ...);
+     PyObject * PyObject_CallMethodObjArgs(PyObject *o,
+                                                      PyObject *m, ...);
+     PyObject * PyObject_Type(PyObject *o);
+     Py_ssize_t PyObject_Size(PyObject *o);
+     Py_ssize_t PyObject_Length(PyObject *o);
+     Py_ssize_t _PyObject_LengthHint(PyObject *o, Py_ssize_t);
+     PyObject * PyObject_GetItem(PyObject *o, PyObject *key);
+     int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
+     int PyObject_DelItemString(PyObject *o, char *key);
+     int PyObject_DelItem(PyObject *o, PyObject *key);
+     int PyObject_AsCharBuffer(PyObject *obj,
+                                          const char **buffer,
+                                          Py_ssize_t *buffer_len);
+     int PyObject_CheckReadBuffer(PyObject *obj);
+     int PyObject_AsReadBuffer(PyObject *obj,
+                                          const void **buffer,
+                                          Py_ssize_t *buffer_len);
+     int PyObject_AsWriteBuffer(PyObject *obj,
+                                           void **buffer,
+                                           Py_ssize_t *buffer_len);
+     int PyObject_GetBuffer(PyObject *obj, Py_buffer *view,
+                                        int flags);
+     void * PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices);
+     int PyBuffer_SizeFromFormat(const char *);
+     int PyBuffer_ToContiguous(void *buf, Py_buffer *view,
+                                           Py_ssize_t len, char fort);
+     int PyBuffer_FromContiguous(Py_buffer *view, void *buf,
+                                             Py_ssize_t len, char fort);
+     int PyObject_CopyData(PyObject *dest, PyObject *src);
+     int PyBuffer_IsContiguous(Py_buffer *view, char fort);
+     void PyBuffer_FillContiguousStrides(int ndims,
+                                                    Py_ssize_t *shape,
+                                                    Py_ssize_t *strides,
+                                                    int itemsize,
+                                                    char fort);
+     int PyBuffer_FillInfo(Py_buffer *view, PyObject *o, void *buf,
+                                       Py_ssize_t len, int readonly,
+                                       int flags);
+     void PyBuffer_Release(Py_buffer *view);
+     PyObject * PyObject_Format(PyObject* obj,
+                                            PyObject *format_spec);
+     PyObject * PyObject_GetIter(PyObject *);
+     PyObject * PyIter_Next(PyObject *);
+     int PyNumber_Check(PyObject *o);
+     PyObject * PyNumber_Add(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_Subtract(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_Multiply(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_Divide(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_Remainder(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_Divmod(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_Power(PyObject *o1, PyObject *o2,
+                                          PyObject *o3);
+     PyObject * PyNumber_Negative(PyObject *o);
+     PyObject * PyNumber_Positive(PyObject *o);
+     PyObject * PyNumber_Absolute(PyObject *o);
+     PyObject * PyNumber_Invert(PyObject *o);
+     PyObject * PyNumber_Lshift(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_Rshift(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_And(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_Xor(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_Or(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_Index(PyObject *o);
+     Py_ssize_t PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
+     PyObject * _PyNumber_ConvertIntegralToInt(
+         PyObject *integral,
+         const char* error_format);
+     PyObject * PyNumber_Int(PyObject *o);
+     PyObject * PyNumber_Long(PyObject *o);
+     PyObject * PyNumber_Float(PyObject *o);
+     PyObject * PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_InPlaceDivide(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_InPlaceFloorDivide(PyObject *o1,
+                                                       PyObject *o2);
+     PyObject * PyNumber_InPlaceTrueDivide(PyObject *o1,
+                                                      PyObject *o2);
+     PyObject * PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
+                                                 PyObject *o3);
+     PyObject * PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
+     PyObject * PyNumber_ToBase(PyObject *n, int base);
+     int PySequence_Check(PyObject *o);
+     Py_ssize_t PySequence_Size(PyObject *o);
+     Py_ssize_t PySequence_Length(PyObject *o);
+     PyObject * PySequence_Concat(PyObject *o1, PyObject *o2);
+     PyObject * PySequence_Repeat(PyObject *o, Py_ssize_t count);
+     PyObject * PySequence_GetItem(PyObject *o, Py_ssize_t i);
+     PyObject * PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
+     int PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
+     int PySequence_DelItem(PyObject *o, Py_ssize_t i);
+     int PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
+                                        PyObject *v);
+     int PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
+     PyObject * PySequence_Tuple(PyObject *o);
+     PyObject * PySequence_List(PyObject *o);
+     PyObject * PySequence_Fast(PyObject *o, const char* m);
+     Py_ssize_t PySequence_Count(PyObject *o, PyObject *value);
+     int PySequence_Contains(PyObject *seq, PyObject *ob);
+     Py_ssize_t _PySequence_IterSearch(PyObject *seq,
+                                        PyObject *obj, int operation);
+     int PySequence_In(PyObject *o, PyObject *value);
+     Py_ssize_t PySequence_Index(PyObject *o, PyObject *value);
+     PyObject * PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
+     PyObject * PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
+     int PyMapping_Check(PyObject *o);
+     Py_ssize_t PyMapping_Size(PyObject *o);
+     Py_ssize_t PyMapping_Length(PyObject *o);
+     int PyMapping_HasKeyString(PyObject *o, char *key);
+     int PyMapping_HasKey(PyObject *o, PyObject *key);
+     PyObject * PyMapping_GetItemString(PyObject *o, char *key);
+     int PyMapping_SetItemString(PyObject *o, char *key,
+                                            PyObject *value);
+int PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
+int PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
+int _PyObject_RealIsInstance(PyObject *inst, PyObject *cls);
+int _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls);
+}
+extern "C" {
+typedef struct {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    int co_argcount;
+    int co_nlocals;
+    int co_stacksize;
+    int co_flags;
+    PyObject *co_code;
+    PyObject *co_consts;
+    PyObject *co_names;
+    PyObject *co_varnames;
+    PyObject *co_freevars;
+    PyObject *co_cellvars;
+    PyObject *co_filename;
+    PyObject *co_name;
+    int co_firstlineno;
+    PyObject *co_lnotab;
+    void *co_zombieframe;
+} PyCodeObject;
+extern PyTypeObject PyCode_Type;
+PyCodeObject * PyCode_New(
+ int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *,
+ PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *);
+int PyCode_Addr2Line(PyCodeObject *, int);
+typedef struct _addr_pair {
+        int ap_lower;
+        int ap_upper;
+} PyAddrPair;
+int PyCode_CheckLineNumber(PyCodeObject* co,
+                                       int lasti, PyAddrPair *bounds);
+PyObject* PyCode_Optimize(PyObject *code, PyObject* consts,
+                                      PyObject *names, PyObject *lineno_obj);
+}
+extern "C" {
+struct _node;
+PyCodeObject * PyNode_Compile(struct _node *, const char *);
+typedef struct {
+    int ff_features;
+    int ff_lineno;
+} PyFutureFeatures;
+struct _mod;
+PyCodeObject * PyAST_Compile(struct _mod *, const char *,
+     PyCompilerFlags *, PyArena *);
+PyFutureFeatures * PyFuture_FromAST(struct _mod *, const char *);
+}
+extern "C" {
+PyObject * PyEval_EvalCode(PyCodeObject *, PyObject *, PyObject *);
+PyObject * PyEval_EvalCodeEx(PyCodeObject *co,
+     PyObject *globals,
+     PyObject *locals,
+     PyObject **args, int argc,
+     PyObject **kwds, int kwdc,
+     PyObject **defs, int defc,
+     PyObject *closure);
+PyObject * _PyEval_CallTracing(PyObject *func, PyObject *args);
+}
+extern "C" {
+double PyOS_ascii_strtod(const char *str, char **ptr);
+double PyOS_ascii_atof(const char *str);
+char * PyOS_ascii_formatd(char *buffer, size_t buf_len, const char *format, double d);
+}
+extern "C" {
+int PyOS_mystrnicmp(const char *, const char *, Py_ssize_t);
+int PyOS_mystricmp(const char *, const char *);
+}
+PyObject* _Py_Mangle(PyObject *p, PyObject *name);
+extern "C" {
+extern "C" {
+extern int __sigismember (__const __sigset_t *, int);
+extern int __sigaddset (__sigset_t *, int);
+extern int __sigdelset (__sigset_t *, int);
+typedef __sig_atomic_t sig_atomic_t;
+typedef union sigval
+  {
+    int sival_int;
+    void *sival_ptr;
+  } sigval_t;
+typedef struct siginfo
+  {
+    int si_signo;
+    int si_errno;
+    int si_code;
+    union
+      {
+ int _pad[((128 / sizeof (int)) - 4)];
+ struct
+   {
+     __pid_t si_pid;
+     __uid_t si_uid;
+   } _kill;
+ struct
+   {
+     int si_tid;
+     int si_overrun;
+     sigval_t si_sigval;
+   } _timer;
+ struct
+   {
+     __pid_t si_pid;
+     __uid_t si_uid;
+     sigval_t si_sigval;
+   } _rt;
+ struct
+   {
+     __pid_t si_pid;
+     __uid_t si_uid;
+     int si_status;
+     __clock_t si_utime;
+     __clock_t si_stime;
+   } _sigchld;
+ struct
+   {
+     void *si_addr;
+   } _sigfault;
+ struct
+   {
+     long int si_band;
+     int si_fd;
+   } _sigpoll;
+      } _sifields;
+  } siginfo_t;
+enum
+{
+  SI_ASYNCNL = -60,
+  SI_TKILL = -6,
+  SI_SIGIO,
+  SI_ASYNCIO,
+  SI_MESGQ,
+  SI_TIMER,
+  SI_QUEUE,
+  SI_USER,
+  SI_KERNEL = 0x80
+};
+enum
+{
+  ILL_ILLOPC = 1,
+  ILL_ILLOPN,
+  ILL_ILLADR,
+  ILL_ILLTRP,
+  ILL_PRVOPC,
+  ILL_PRVREG,
+  ILL_COPROC,
+  ILL_BADSTK
+};
+enum
+{
+  FPE_INTDIV = 1,
+  FPE_INTOVF,
+  FPE_FLTDIV,
+  FPE_FLTOVF,
+  FPE_FLTUND,
+  FPE_FLTRES,
+  FPE_FLTINV,
+  FPE_FLTSUB
+};
+enum
+{
+  SEGV_MAPERR = 1,
+  SEGV_ACCERR
+};
+enum
+{
+  BUS_ADRALN = 1,
+  BUS_ADRERR,
+  BUS_OBJERR
+};
+enum
+{
+  TRAP_BRKPT = 1,
+  TRAP_TRACE
+};
+enum
+{
+  CLD_EXITED = 1,
+  CLD_KILLED,
+  CLD_DUMPED,
+  CLD_TRAPPED,
+  CLD_STOPPED,
+  CLD_CONTINUED
+};
+enum
+{
+  POLL_IN = 1,
+  POLL_OUT,
+  POLL_MSG,
+  POLL_ERR,
+  POLL_PRI,
+  POLL_HUP
+};
+typedef struct sigevent
+  {
+    sigval_t sigev_value;
+    int sigev_signo;
+    int sigev_notify;
+    union
+      {
+ int _pad[((64 / sizeof (int)) - 4)];
+ __pid_t _tid;
+ struct
+   {
+     void (*_function) (sigval_t);
+     void *_attribute;
+   } _sigev_thread;
+      } _sigev_un;
+  } sigevent_t;
+enum
+{
+  SIGEV_SIGNAL = 0,
+  SIGEV_NONE,
+  SIGEV_THREAD,
+  SIGEV_THREAD_ID = 4
+};
+typedef void (*__sighandler_t) (int);
+extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
+     throw ();
+extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
+     throw ();
+extern __sighandler_t signal (int __sig, __sighandler_t __handler)
+     throw ();
+extern __sighandler_t bsd_signal (int __sig, __sighandler_t __handler)
+     throw ();
+extern int kill (__pid_t __pid, int __sig) throw ();
+extern int killpg (__pid_t __pgrp, int __sig) throw ();
+extern int raise (int __sig) throw ();
+extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
+     throw ();
+extern int gsignal (int __sig) throw ();
+extern void psignal (int __sig, __const char *__s);
+extern void psiginfo (__const siginfo_t *__pinfo, __const char *__s);
+extern int __sigpause (int __sig_or_mask, int __is_sig);
+extern int sigpause (int __sig) __asm__ ("__xpg_sigpause");
+extern int sigblock (int __mask) throw () __attribute__ ((__deprecated__));
+extern int sigsetmask (int __mask) throw () __attribute__ ((__deprecated__));
+extern int siggetmask (void) throw () __attribute__ ((__deprecated__));
+typedef __sighandler_t sighandler_t;
+typedef __sighandler_t sig_t;
+extern int sigemptyset (sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
+extern int sigfillset (sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
+extern int sigaddset (sigset_t *__set, int __signo) throw () __attribute__ ((__nonnull__ (1)));
+extern int sigdelset (sigset_t *__set, int __signo) throw () __attribute__ ((__nonnull__ (1)));
+extern int sigismember (__const sigset_t *__set, int __signo)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int sigisemptyset (__const sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
+extern int sigandset (sigset_t *__set, __const sigset_t *__left,
+        __const sigset_t *__right) throw () __attribute__ ((__nonnull__ (1, 2, 3)));
+extern int sigorset (sigset_t *__set, __const sigset_t *__left,
+       __const sigset_t *__right) throw () __attribute__ ((__nonnull__ (1, 2, 3)));
+struct sigaction
+  {
+    union
+      {
+ __sighandler_t sa_handler;
+ void (*sa_sigaction) (int, siginfo_t *, void *);
+      }
+    __sigaction_handler;
+    __sigset_t sa_mask;
+    int sa_flags;
+    void (*sa_restorer) (void);
+  };
+extern int sigprocmask (int __how, __const sigset_t *__restrict __set,
+   sigset_t *__restrict __oset) throw ();
+extern int sigsuspend (__const sigset_t *__set) __attribute__ ((__nonnull__ (1)));
+extern int sigaction (int __sig, __const struct sigaction *__restrict __act,
+        struct sigaction *__restrict __oact) throw ();
+extern int sigpending (sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
+extern int sigwait (__const sigset_t *__restrict __set, int *__restrict __sig)
+     __attribute__ ((__nonnull__ (1, 2)));
+extern int sigwaitinfo (__const sigset_t *__restrict __set,
+   siginfo_t *__restrict __info) __attribute__ ((__nonnull__ (1)));
+extern int sigtimedwait (__const sigset_t *__restrict __set,
+    siginfo_t *__restrict __info,
+    __const struct timespec *__restrict __timeout)
+     __attribute__ ((__nonnull__ (1)));
+extern int sigqueue (__pid_t __pid, int __sig, __const union sigval __val)
+     throw ();
+extern __const char *__const _sys_siglist[65];
+extern __const char *__const sys_siglist[65];
+struct sigvec
+  {
+    __sighandler_t sv_handler;
+    int sv_mask;
+    int sv_flags;
+  };
+extern int sigvec (int __sig, __const struct sigvec *__vec,
+     struct sigvec *__ovec) throw ();
+struct _fpreg
+{
+  unsigned short significand[4];
+  unsigned short exponent;
+};
+struct _fpxreg
+{
+  unsigned short significand[4];
+  unsigned short exponent;
+  unsigned short padding[3];
+};
+struct _xmmreg
+{
+  __uint32_t element[4];
+};
+struct _fpstate
+{
+  __uint16_t cwd;
+  __uint16_t swd;
+  __uint16_t ftw;
+  __uint16_t fop;
+  __uint64_t rip;
+  __uint64_t rdp;
+  __uint32_t mxcsr;
+  __uint32_t mxcr_mask;
+  struct _fpxreg _st[8];
+  struct _xmmreg _xmm[16];
+  __uint32_t padding[24];
+};
+struct sigcontext
+{
+  unsigned long r8;
+  unsigned long r9;
+  unsigned long r10;
+  unsigned long r11;
+  unsigned long r12;
+  unsigned long r13;
+  unsigned long r14;
+  unsigned long r15;
+  unsigned long rdi;
+  unsigned long rsi;
+  unsigned long rbp;
+  unsigned long rbx;
+  unsigned long rdx;
+  unsigned long rax;
+  unsigned long rcx;
+  unsigned long rsp;
+  unsigned long rip;
+  unsigned long eflags;
+  unsigned short cs;
+  unsigned short gs;
+  unsigned short fs;
+  unsigned short __pad0;
+  unsigned long err;
+  unsigned long trapno;
+  unsigned long oldmask;
+  unsigned long cr2;
+  struct _fpstate * fpstate;
+  unsigned long __reserved1 [8];
+};
+extern int sigreturn (struct sigcontext *__scp) throw ();
+extern int siginterrupt (int __sig, int __interrupt) throw ();
+struct sigstack
+  {
+    void *ss_sp;
+    int ss_onstack;
+  };
+enum
+{
+  SS_ONSTACK = 1,
+  SS_DISABLE
+};
+typedef struct sigaltstack
+  {
+    void *ss_sp;
+    int ss_flags;
+    size_t ss_size;
+  } stack_t;
+typedef long int greg_t;
+typedef greg_t gregset_t[23];
+enum
+{
+  REG_R8 = 0,
+  REG_R9,
+  REG_R10,
+  REG_R11,
+  REG_R12,
+  REG_R13,
+  REG_R14,
+  REG_R15,
+  REG_RDI,
+  REG_RSI,
+  REG_RBP,
+  REG_RBX,
+  REG_RDX,
+  REG_RAX,
+  REG_RCX,
+  REG_RSP,
+  REG_RIP,
+  REG_EFL,
+  REG_CSGSFS,
+  REG_ERR,
+  REG_TRAPNO,
+  REG_OLDMASK,
+  REG_CR2
+};
+struct _libc_fpxreg
+{
+  unsigned short int significand[4];
+  unsigned short int exponent;
+  unsigned short int padding[3];
+};
+struct _libc_xmmreg
+{
+  __uint32_t element[4];
+};
+struct _libc_fpstate
+{
+  __uint16_t cwd;
+  __uint16_t swd;
+  __uint16_t ftw;
+  __uint16_t fop;
+  __uint64_t rip;
+  __uint64_t rdp;
+  __uint32_t mxcsr;
+  __uint32_t mxcr_mask;
+  struct _libc_fpxreg _st[8];
+  struct _libc_xmmreg _xmm[16];
+  __uint32_t padding[24];
+};
+typedef struct _libc_fpstate *fpregset_t;
+typedef struct
+  {
+    gregset_t gregs;
+    fpregset_t fpregs;
+    unsigned long __reserved1 [8];
+} mcontext_t;
+typedef struct ucontext
+  {
+    unsigned long int uc_flags;
+    struct ucontext *uc_link;
+    stack_t uc_stack;
+    mcontext_t uc_mcontext;
+    __sigset_t uc_sigmask;
+    struct _libc_fpstate __fpregs_mem;
+  } ucontext_t;
+extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
+     throw () __attribute__ ((__deprecated__));
+extern int sigaltstack (__const struct sigaltstack *__restrict __ss,
+   struct sigaltstack *__restrict __oss) throw ();
+extern int sighold (int __sig) throw ();
+extern int sigrelse (int __sig) throw ();
+extern int sigignore (int __sig) throw ();
+extern __sighandler_t sigset (int __sig, __sighandler_t __disp) throw ();
+extern int pthread_sigmask (int __how,
+       __const __sigset_t *__restrict __newmask,
+       __sigset_t *__restrict __oldmask)throw ();
+extern int pthread_kill (pthread_t __threadid, int __signo) throw ();
+extern int pthread_sigqueue (pthread_t __threadid, int __signo,
+        const union sigval __value) throw ();
+extern int __libc_current_sigrtmin (void) throw ();
+extern int __libc_current_sigrtmax (void) throw ();
+}
+extern "C" {
+typedef long int __jmp_buf[8];
+struct __jmp_buf_tag
+  {
+    __jmp_buf __jmpbuf;
+    int __mask_was_saved;
+    __sigset_t __saved_mask;
+  };
+typedef struct __jmp_buf_tag jmp_buf[1];
+extern int setjmp (jmp_buf __env) throw ();
+extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask) throw ();
+extern int _setjmp (struct __jmp_buf_tag __env[1]) throw ();
+extern void longjmp (struct __jmp_buf_tag __env[1], int __val)
+     throw () __attribute__ ((__noreturn__));
+extern void _longjmp (struct __jmp_buf_tag __env[1], int __val)
+     throw () __attribute__ ((__noreturn__));
+typedef struct __jmp_buf_tag sigjmp_buf[1];
+extern void siglongjmp (sigjmp_buf __env, int __val)
+     throw () __attribute__ ((__noreturn__));
+}
+extern jmp_buf PyFPE_jbuf;
+extern int PyFPE_counter;
+extern double PyFPE_dummy(void *);
+}
+extern "C" {
+typedef void *(*swig_converter_func)(void *, int *);
+typedef struct swig_type_info *(*swig_dycast_func)(void **);
+typedef struct swig_type_info {
+  const char *name;
+  const char *str;
+  swig_dycast_func dcast;
+  struct swig_cast_info *cast;
+  void *clientdata;
+  int owndata;
+} swig_type_info;
+typedef struct swig_cast_info {
+  swig_type_info *type;
+  swig_converter_func converter;
+  struct swig_cast_info *next;
+  struct swig_cast_info *prev;
+} swig_cast_info;
+typedef struct swig_module_info {
+  swig_type_info **types;
+  size_t size;
+  struct swig_module_info *next;
+  swig_type_info **type_initial;
+  swig_cast_info **cast_initial;
+  void *clientdata;
+} swig_module_info;
+static __attribute__ ((__unused__)) int
+SWIG_TypeNameComp(const char *f1, const char *l1,
+    const char *f2, const char *l2) {
+  for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
+    while ((*f1 == ' ') && (f1 != l1)) ++f1;
+    while ((*f2 == ' ') && (f2 != l2)) ++f2;
+    if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
+  }
+  return (int)((l1 - f1) - (l2 - f2));
+}
+static __attribute__ ((__unused__)) int
+SWIG_TypeEquiv(const char *nb, const char *tb) {
+  int equiv = 0;
+  const char* te = tb + strlen(tb);
+  const char* ne = nb;
+  while (!equiv && *ne) {
+    for (nb = ne; *ne; ++ne) {
+      if (*ne == '|') break;
+    }
+    equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+    if (*ne) ++ne;
+  }
+  return equiv;
+}
+static __attribute__ ((__unused__)) int
+SWIG_TypeCompare(const char *nb, const char *tb) {
+  int equiv = 0;
+  const char* te = tb + strlen(tb);
+  const char* ne = nb;
+  while (!equiv && *ne) {
+    for (nb = ne; *ne; ++ne) {
+      if (*ne == '|') break;
+    }
+    equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
+    if (*ne) ++ne;
+  }
+  return equiv;
+}
+static __attribute__ ((__unused__)) swig_cast_info *
+SWIG_TypeCheck(const char *c, swig_type_info *ty) {
+  if (ty) {
+    swig_cast_info *iter = ty->cast;
+    while (iter) {
+      if (strcmp(iter->type->name, c) == 0) {
+        if (iter == ty->cast)
+          return iter;
+        iter->prev->next = iter->next;
+        if (iter->next)
+          iter->next->prev = iter->prev;
+        iter->next = ty->cast;
+        iter->prev = 0;
+        if (ty->cast) ty->cast->prev = iter;
+        ty->cast = iter;
+        return iter;
+      }
+      iter = iter->next;
+    }
+  }
+  return 0;
+}
+static __attribute__ ((__unused__)) swig_cast_info *
+SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) {
+  if (ty) {
+    swig_cast_info *iter = ty->cast;
+    while (iter) {
+      if (iter->type == from) {
+        if (iter == ty->cast)
+          return iter;
+        iter->prev->next = iter->next;
+        if (iter->next)
+          iter->next->prev = iter->prev;
+        iter->next = ty->cast;
+        iter->prev = 0;
+        if (ty->cast) ty->cast->prev = iter;
+        ty->cast = iter;
+        return iter;
+      }
+      iter = iter->next;
+    }
+  }
+  return 0;
+}
+static __attribute__ ((__unused__)) inline void *
+SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
+  return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
+}
+static __attribute__ ((__unused__)) swig_type_info *
+SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
+  swig_type_info *lastty = ty;
+  if (!ty || !ty->dcast) return ty;
+  while (ty && (ty->dcast)) {
+    ty = (*ty->dcast)(ptr);
+    if (ty) lastty = ty;
+  }
+  return lastty;
+}
+static __attribute__ ((__unused__)) inline const char *
+SWIG_TypeName(const swig_type_info *ty) {
+  return ty->name;
+}
+static __attribute__ ((__unused__)) const char *
+SWIG_TypePrettyName(const swig_type_info *type) {
+  if (!type) return __null;
+  if (type->str != __null) {
+    const char *last_name = type->str;
+    const char *s;
+    for (s = type->str; *s; s++)
+      if (*s == '|') last_name = s+1;
+    return last_name;
+  }
+  else
+    return type->name;
+}
+static __attribute__ ((__unused__)) void
+SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
+  swig_cast_info *cast = ti->cast;
+  ti->clientdata = clientdata;
+  while (cast) {
+    if (!cast->converter) {
+      swig_type_info *tc = cast->type;
+      if (!tc->clientdata) {
+ SWIG_TypeClientData(tc, clientdata);
+      }
+    }
+    cast = cast->next;
+  }
+}
+static __attribute__ ((__unused__)) void
+SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
+  SWIG_TypeClientData(ti, clientdata);
+  ti->owndata = 1;
+}
+static __attribute__ ((__unused__)) swig_type_info *
+SWIG_MangledTypeQueryModule(swig_module_info *start,
+                            swig_module_info *end,
+              const char *name) {
+  swig_module_info *iter = start;
+  do {
+    if (iter->size) {
+      register size_t l = 0;
+      register size_t r = iter->size - 1;
+      do {
+ register size_t i = (l + r) >> 1;
+ const char *iname = iter->types[i]->name;
+ if (iname) {
+   register int compare = strcmp(name, iname);
+   if (compare == 0) {
+     return iter->types[i];
+   } else if (compare < 0) {
+     if (i) {
+       r = i - 1;
+     } else {
+       break;
+     }
+   } else if (compare > 0) {
+     l = i + 1;
+   }
+ } else {
+   break;
+ }
+      } while (l <= r);
+    }
+    iter = iter->next;
+  } while (iter != end);
+  return 0;
+}
+static __attribute__ ((__unused__)) swig_type_info *
+SWIG_TypeQueryModule(swig_module_info *start,
+                     swig_module_info *end,
+       const char *name) {
+  swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
+  if (ret) {
+    return ret;
+  } else {
+    swig_module_info *iter = start;
+    do {
+      register size_t i = 0;
+      for (; i < iter->size; ++i) {
+ if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
+   return iter->types[i];
+      }
+      iter = iter->next;
+    } while (iter != end);
+  }
+  return 0;
+}
+static __attribute__ ((__unused__)) char *
+SWIG_PackData(char *c, void *ptr, size_t sz) {
+  static const char hex[17] = "0123456789abcdef";
+  register const unsigned char *u = (unsigned char *) ptr;
+  register const unsigned char *eu = u + sz;
+  for (; u != eu; ++u) {
+    register unsigned char uu = *u;
+    *(c++) = hex[(uu & 0xf0) >> 4];
+    *(c++) = hex[uu & 0xf];
+  }
+  return c;
+}
+static __attribute__ ((__unused__)) const char *
+SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
+  register unsigned char *u = (unsigned char *) ptr;
+  register const unsigned char *eu = u + sz;
+  for (; u != eu; ++u) {
+    register char d = *(c++);
+    register unsigned char uu;
+    if ((d >= '0') && (d <= '9'))
+      uu = ((d - '0') << 4);
+    else if ((d >= 'a') && (d <= 'f'))
+      uu = ((d - ('a'-10)) << 4);
+    else
+      return (char *) 0;
+    d = *(c++);
+    if ((d >= '0') && (d <= '9'))
+      uu |= (d - '0');
+    else if ((d >= 'a') && (d <= 'f'))
+      uu |= (d - ('a'-10));
+    else
+      return (char *) 0;
+    *u = uu;
+  }
+  return c;
+}
+static __attribute__ ((__unused__)) char *
+SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
+  char *r = buff;
+  if ((2*sizeof(void *) + 2) > bsz) return 0;
+  *(r++) = '_';
+  r = SWIG_PackData(r,&ptr,sizeof(void *));
+  if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
+  strcpy(r,name);
+  return buff;
+}
+static __attribute__ ((__unused__)) const char *
+SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
+  if (*c != '_') {
+    if (strcmp(c,"NULL") == 0) {
+      *ptr = (void *) 0;
+      return name;
+    } else {
+      return 0;
+    }
+  }
+  return SWIG_UnpackData(++c,ptr,sizeof(void *));
+}
+static __attribute__ ((__unused__)) char *
+SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
+  char *r = buff;
+  size_t lname = (name ? strlen(name) : 0);
+  if ((2*sz + 2 + lname) > bsz) return 0;
+  *(r++) = '_';
+  r = SWIG_PackData(r,ptr,sz);
+  if (lname) {
+    strncpy(r,name,lname+1);
+  } else {
+    *r = 0;
+  }
+  return buff;
+}
+static __attribute__ ((__unused__)) const char *
+SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
+  if (*c != '_') {
+    if (strcmp(c,"NULL") == 0) {
+      memset(ptr,0,sz);
+      return name;
+    } else {
+      return 0;
+    }
+  }
+  return SWIG_UnpackData(++c,ptr,sz);
+}
+}
+static __attribute__ ((__unused__)) char*
+SWIG_Python_str_AsChar(PyObject *str)
+{
+  return PyString_AsString(str);
+}
+static __attribute__ ((__unused__)) PyObject*
+SWIG_Python_str_FromChar(const char *c)
+{
+  return PyString_FromString(c);
+}
+static __attribute__ ((__unused__)) PyObject*
+SWIG_Python_ErrorType(int code) {
+  PyObject* type = 0;
+  switch(code) {
+  case -12:
+    type = PyExc_MemoryError;
+    break;
+  case -2:
+    type = PyExc_IOError;
+    break;
+  case -3:
+    type = PyExc_RuntimeError;
+    break;
+  case -4:
+    type = PyExc_IndexError;
+    break;
+  case -5:
+    type = PyExc_TypeError;
+    break;
+  case -6:
+    type = PyExc_ZeroDivisionError;
+    break;
+  case -7:
+    type = PyExc_OverflowError;
+    break;
+  case -8:
+    type = PyExc_SyntaxError;
+    break;
+  case -9:
+    type = PyExc_ValueError;
+    break;
+  case -10:
+    type = PyExc_SystemError;
+    break;
+  case -11:
+    type = PyExc_AttributeError;
+    break;
+  default:
+    type = PyExc_RuntimeError;
+  }
+  return type;
+}
+static __attribute__ ((__unused__)) void
+SWIG_Python_AddErrorMsg(const char* mesg)
+{
+  PyObject *type = 0;
+  PyObject *value = 0;
+  PyObject *traceback = 0;
+  if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback);
+  if (value) {
+    char *tmp;
+    PyObject *old_str = PyObject_Str(value);
+    PyErr_Clear();
+    if ((type) == __null) ; else ( ((PyObject*)(type))->ob_refcnt++);
+    PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg);
+    ;
+    if ( --((PyObject*)(old_str))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(old_str)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(old_str))));
+    if ( --((PyObject*)(value))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(value)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(value))));
+  } else {
+    PyErr_SetString(PyExc_RuntimeError, mesg);
+  }
+}
+       class SWIG_Python_Thread_Block {
+         bool status;
+         PyGILState_STATE state;
+       public:
+         void end() { if (status) { PyGILState_Release(state); status = false;} }
+         SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {}
+         ~SWIG_Python_Thread_Block() { end(); }
+       };
+       class SWIG_Python_Thread_Allow {
+         bool status;
+         PyThreadState *save;
+       public:
+         void end() { if (status) { PyEval_RestoreThread(save); status = false; }}
+         SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {}
+         ~SWIG_Python_Thread_Allow() { end(); }
+       };
+extern "C" {
+typedef struct swig_const_info {
+  int type;
+  char *name;
+  long lvalue;
+  double dvalue;
+  void *pvalue;
+  swig_type_info **ptype;
+} swig_const_info;
+static __attribute__ ((__unused__)) PyObject* SWIG_PyInstanceMethod_New(PyObject *self, PyObject *func)
+{
+  return __null;
+}
+}
+static __attribute__ ((__unused__)) void
+SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) {
+  SWIG_Python_Thread_Block _swig_thread_block;
+  PyErr_SetObject(errtype, obj);
+  if ( --((PyObject*)(obj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(obj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(obj))));
+  _swig_thread_block.end();
+}
+static __attribute__ ((__unused__)) void
+SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) {
+  SWIG_Python_Thread_Block _swig_thread_block;
+  PyErr_SetString(errtype, (char *) msg);
+  _swig_thread_block.end();
+}
+static __attribute__ ((__unused__)) void
+SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) {
+  PyDict_SetItemString(d, (char*) name, obj);
+  if ( --((PyObject*)(obj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(obj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(obj))));
+}
+static __attribute__ ((__unused__)) PyObject*
+SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) {
+  if (!result) {
+    result = obj;
+  } else if (result == (&_Py_NoneStruct)) {
+    if ( --((PyObject*)(result))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(result)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(result))));
+    result = obj;
+  } else {
+    if (!((((((PyObject*)(result))->ob_type))->tp_flags & ((1L<<25))) != 0)) {
+      PyObject *o2 = result;
+      result = PyList_New(1);
+      PyList_SetItem(result, 0, o2);
+    }
+    PyList_Append(result,obj);
+    if ( --((PyObject*)(obj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(obj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(obj))));
+  }
+  return result;
+}
+static __attribute__ ((__unused__)) int
+SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs)
+{
+  if (!args) {
+    if (!min && !max) {
+      return 1;
+    } else {
+      PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none",
+     name, (min == max ? "" : "at least "), (int)min);
+      return 0;
+    }
+  }
+  if (!((((((PyObject*)(args))->ob_type))->tp_flags & ((1L<<26))) != 0)) {
+    PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple");
+    return 0;
+  } else {
+    register Py_ssize_t l = (((PyVarObject*)(args))->ob_size);
+    if (l < min) {
+      PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d",
+     name, (min == max ? "" : "at least "), (int)min, (int)l);
+      return 0;
+    } else if (l > max) {
+      PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d",
+     name, (min == max ? "" : "at most "), (int)max, (int)l);
+      return 0;
+    } else {
+      register int i;
+      for (i = 0; i < l; ++i) {
+ objs[i] = (((PyTupleObject *)(args))->ob_item[i]);
+      }
+      for (; l < max; ++l) {
+ objs[l] = 0;
+      }
+      return i + 1;
+    }
+  }
+}
+extern "C" {
+static __attribute__ ((__unused__)) inline PyObject *
+SWIG_Py_Void(void)
+{
+  PyObject *none = (&_Py_NoneStruct);
+  ( ((PyObject*)(none))->ob_refcnt++);
+  return none;
+}
+typedef struct {
+  PyObject *klass;
+  PyObject *newraw;
+  PyObject *newargs;
+  PyObject *destroy;
+  int delargs;
+  int implicitconv;
+} SwigPyClientData;
+static __attribute__ ((__unused__)) inline int
+SWIG_Python_CheckImplicit(swig_type_info *ty)
+{
+  SwigPyClientData *data = (SwigPyClientData *)ty->clientdata;
+  return data ? data->implicitconv : 0;
+}
+static __attribute__ ((__unused__)) inline PyObject *
+SWIG_Python_ExceptionType(swig_type_info *desc) {
+  SwigPyClientData *data = desc ? (SwigPyClientData *) desc->clientdata : 0;
+  PyObject *klass = data ? data->klass : 0;
+  return (klass ? klass : PyExc_RuntimeError);
+}
+static __attribute__ ((__unused__)) SwigPyClientData *
+SwigPyClientData_New(PyObject* obj)
+{
+  if (!obj) {
+    return 0;
+  } else {
+    SwigPyClientData *data = (SwigPyClientData *)malloc(sizeof(SwigPyClientData));
+    data->klass = obj;
+    ( ((PyObject*)(data->klass))->ob_refcnt++);
+    if (((obj)->ob_type == &PyClass_Type)) {
+      data->newraw = 0;
+      data->newargs = obj;
+      ( ((PyObject*)(obj))->ob_refcnt++);
+    } else {
+      data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__");
+      if (data->newraw) {
+ ( ((PyObject*)(data->newraw))->ob_refcnt++);
+ data->newargs = PyTuple_New(1);
+ PyTuple_SetItem(data->newargs, 0, obj);
+      } else {
+ data->newargs = obj;
+      }
+      ( ((PyObject*)(data->newargs))->ob_refcnt++);
+    }
+    data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__");
+    if (PyErr_Occurred()) {
+      PyErr_Clear();
+      data->destroy = 0;
+    }
+    if (data->destroy) {
+      int flags;
+      ( ((PyObject*)(data->destroy))->ob_refcnt++);
+      flags = (((PyCFunctionObject *)data->destroy) -> m_ml -> ml_flags);
+      data->delargs = !(flags & (0x0008));
+    } else {
+      data->delargs = 0;
+    }
+    data->implicitconv = 0;
+    return data;
+  }
+}
+static __attribute__ ((__unused__)) void
+SwigPyClientData_Del(SwigPyClientData* data)
+{
+  if ((data->newraw) == __null) ; else if ( --((PyObject*)(data->newraw))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(data->newraw)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(data->newraw))));
+  if ((data->newargs) == __null) ; else if ( --((PyObject*)(data->newargs))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(data->newargs)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(data->newargs))));
+  if ((data->destroy) == __null) ; else if ( --((PyObject*)(data->destroy))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(data->destroy)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(data->destroy))));
+}
+typedef struct {
+  Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+  void *ptr;
+  swig_type_info *ty;
+  int own;
+  PyObject *next;
+} SwigPyObject;
+static __attribute__ ((__unused__)) PyObject *
+SwigPyObject_long(SwigPyObject *v)
+{
+  return PyLong_FromVoidPtr(v->ptr);
+}
+static __attribute__ ((__unused__)) PyObject *
+SwigPyObject_format(const char* fmt, SwigPyObject *v)
+{
+  PyObject *res = __null;
+  PyObject *args = PyTuple_New(1);
+  if (args) {
+    if (PyTuple_SetItem(args, 0, SwigPyObject_long(v)) == 0) {
+      PyObject *ofmt = SWIG_Python_str_FromChar(fmt);
+      if (ofmt) {
+ res = PyString_Format(ofmt,args);
+ if ( --((PyObject*)(ofmt))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(ofmt)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(ofmt))));
+      }
+      if ( --((PyObject*)(args))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(args)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(args))));
+    }
+  }
+  return res;
+}
+static __attribute__ ((__unused__)) PyObject *
+SwigPyObject_oct(SwigPyObject *v)
+{
+  return SwigPyObject_format("%o",v);
+}
+static __attribute__ ((__unused__)) PyObject *
+SwigPyObject_hex(SwigPyObject *v)
+{
+  return SwigPyObject_format("%x",v);
+}
+static __attribute__ ((__unused__)) PyObject *
+SwigPyObject_repr(SwigPyObject *v)
+{
+  const char *name = SWIG_TypePrettyName(v->ty);
+  PyObject *repr = PyString_FromFormat("<Swig Object of type '%s' at %p>", name, v);
+  if (v->next) {
+    PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next);
+    PyString_ConcatAndDel(&repr,nrep);
+  }
+  return repr;
+}
+static __attribute__ ((__unused__)) int
+SwigPyObject_print(SwigPyObject *v, FILE *fp, int )
+{
+  char *str;
+  PyObject *repr = SwigPyObject_repr(v);
+  if (repr) {
+    str = SWIG_Python_str_AsChar(repr);
+    fputs(str, fp);
+    ;
+    if ( --((PyObject*)(repr))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(repr)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(repr))));
+    return 0;
+  } else {
+    return 1;
+  }
+}
+static __attribute__ ((__unused__)) PyObject *
+SwigPyObject_str(SwigPyObject *v)
+{
+  char result[1024];
+  return SWIG_PackVoidPtr(result, v->ptr, v->ty->name, sizeof(result)) ?
+    SWIG_Python_str_FromChar(result) : 0;
+}
+static __attribute__ ((__unused__)) int
+SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w)
+{
+  void *i = v->ptr;
+  void *j = w->ptr;
+  return (i < j) ? -1 : ((i > j) ? 1 : 0);
+}
+static __attribute__ ((__unused__)) PyObject*
+SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op)
+{
+  PyObject* res;
+  if( op != 2 && op != 3 ) {
+    ( ((PyObject*)((&_Py_NotImplementedStruct)))->ob_refcnt++);
+    return (&_Py_NotImplementedStruct);
+  }
+  if( (SwigPyObject_compare(v, w)==0) == (op == 2) )
+    res = ((PyObject *) &_Py_TrueStruct);
+  else
+    res = ((PyObject *) &_Py_ZeroStruct);
+  ( ((PyObject*)(res))->ob_refcnt++);
+  return res;
+}
+static __attribute__ ((__unused__)) PyTypeObject* _PySwigObject_type(void);
+static __attribute__ ((__unused__)) PyTypeObject*
+SwigPyObject_type(void) {
+  static PyTypeObject *type = _PySwigObject_type();
+  return type;
+}
+static __attribute__ ((__unused__)) inline int
+SwigPyObject_Check(PyObject *op) {
+  return ((((PyObject*)(op))->ob_type) == SwigPyObject_type())
+    || (strcmp((((PyObject*)(op))->ob_type)->tp_name,"SwigPyObject") == 0);
+}
+static __attribute__ ((__unused__)) PyObject *
+SwigPyObject_New(void *ptr, swig_type_info *ty, int own);
+static __attribute__ ((__unused__)) void
+SwigPyObject_dealloc(PyObject *v)
+{
+  SwigPyObject *sobj = (SwigPyObject *) v;
+  PyObject *next = sobj->next;
+  if (sobj->own == 0x1) {
+    swig_type_info *ty = sobj->ty;
+    SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0;
+    PyObject *destroy = data ? data->destroy : 0;
+    if (destroy) {
+      PyObject *res;
+      if (data->delargs) {
+ PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0);
+ res = PyObject_CallFunctionObjArgs(destroy, tmp, __null);;
+ if ( --((PyObject*)(tmp))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(tmp)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(tmp))));
+      } else {
+ PyCFunction meth = (((PyCFunctionObject *)destroy) -> m_ml -> ml_meth);
+ PyObject *mself = (((PyCFunctionObject *)destroy) -> m_self);
+ res = ((*meth)(mself, v));
+      }
+      if ((res) == __null) ; else if ( --((PyObject*)(res))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(res)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(res))));
+    }
+    else {
+      const char *name = SWIG_TypePrettyName(ty);
+      printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown"));
+    }
+  }
+  if ((next) == __null) ; else if ( --((PyObject*)(next))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(next)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(next))));
+  PyObject_Free(v);
+}
+static __attribute__ ((__unused__)) PyObject*
+SwigPyObject_append(PyObject* v, PyObject* next)
+{
+  SwigPyObject *sobj = (SwigPyObject *) v;
+  if (!SwigPyObject_Check(next)) {
+    return __null;
+  }
+  sobj->next = next;
+  ( ((PyObject*)(next))->ob_refcnt++);
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject*
+SwigPyObject_next(PyObject* v)
+{
+  SwigPyObject *sobj = (SwigPyObject *) v;
+  if (sobj->next) {
+    ( ((PyObject*)(sobj->next))->ob_refcnt++);
+    return sobj->next;
+  } else {
+    return SWIG_Py_Void();
+  }
+}
+static __attribute__ ((__unused__)) PyObject*
+SwigPyObject_disown(PyObject *v)
+{
+  SwigPyObject *sobj = (SwigPyObject *)v;
+  sobj->own = 0;
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject*
+SwigPyObject_acquire(PyObject *v)
+{
+  SwigPyObject *sobj = (SwigPyObject *)v;
+  sobj->own = 0x1;
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject*
+SwigPyObject_own(PyObject *v, PyObject *args)
+{
+  PyObject *val = 0;
+  if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val))
+    {
+      return __null;
+    }
+  else
+    {
+      SwigPyObject *sobj = (SwigPyObject *)v;
+      PyObject *obj = PyBool_FromLong(sobj->own);
+      if (val) {
+ if (PyObject_IsTrue(val)) {
+   SwigPyObject_acquire(v);
+ } else {
+   SwigPyObject_disown(v);
+ }
+      }
+      return obj;
+    }
+}
+static PyMethodDef
+swigobject_methods[] = {
+  {(char *)"disown", (PyCFunction)SwigPyObject_disown, 0x0004, (char *)"releases ownership of the pointer"},
+  {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, 0x0004, (char *)"aquires ownership of the pointer"},
+  {(char *)"own", (PyCFunction)SwigPyObject_own, 0x0001, (char *)"returns/sets ownership of the pointer"},
+  {(char *)"append", (PyCFunction)SwigPyObject_append, 0x0008, (char *)"appends another 'this' object"},
+  {(char *)"next", (PyCFunction)SwigPyObject_next, 0x0004, (char *)"returns the next 'this' object"},
+  {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, 0x0004, (char *)"returns object representation"},
+  {0, 0, 0, 0}
+};
+static __attribute__ ((__unused__)) PyTypeObject*
+_PySwigObject_type(void) {
+  static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer";
+  static PyNumberMethods SwigPyObject_as_number = {
+    (binaryfunc)0,
+    (binaryfunc)0,
+    (binaryfunc)0,
+    (binaryfunc)0,
+    (binaryfunc)0,
+    (binaryfunc)0,
+    (ternaryfunc)0,
+    (unaryfunc)0,
+    (unaryfunc)0,
+    (unaryfunc)0,
+    (inquiry)0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    (unaryfunc)SwigPyObject_long,
+    (unaryfunc)SwigPyObject_long,
+    (unaryfunc)0,
+    (unaryfunc)SwigPyObject_oct,
+    (unaryfunc)SwigPyObject_hex,
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+  };
+  static PyTypeObject swigpyobject_type;
+  static int type_init = 0;
+  if (!type_init) {
+    const PyTypeObject tmp
+      = {
+ 1, __null,
+ 0,
+ (char *)"SwigPyObject",
+ sizeof(SwigPyObject),
+ 0,
+ (destructor)SwigPyObject_dealloc,
+ (printfunc)SwigPyObject_print,
+ (getattrfunc)0,
+ (setattrfunc)0,
+ (cmpfunc)SwigPyObject_compare,
+ (reprfunc)SwigPyObject_repr,
+ &SwigPyObject_as_number,
+ 0,
+ 0,
+ (hashfunc)0,
+ (ternaryfunc)0,
+ (reprfunc)SwigPyObject_str,
+ PyObject_GenericGetAttr,
+ 0,
+ 0,
+ ( (1L<<0) | (1L<<1) | (1L<<3) | (1L<<5) | (1L<<6) | (1L<<7) | (1L<<8) | 0 | (1L<<17) | 0),
+ swigobject_doc,
+ 0,
+ 0,
+ (richcmpfunc)SwigPyObject_richcompare,
+ 0,
+ 0,
+ 0,
+ swigobject_methods,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+      };
+    swigpyobject_type = tmp;
+    swigpyobject_type.ob_type = &PyType_Type;
+    type_init = 1;
+  }
+  return &swigpyobject_type;
+}
+static __attribute__ ((__unused__)) PyObject *
+SwigPyObject_New(void *ptr, swig_type_info *ty, int own)
+{
+  SwigPyObject *sobj = ( (SwigPyObject *) PyObject_Init( (PyObject *) PyObject_Malloc( ( (SwigPyObject_type())->tp_basicsize ) ), (SwigPyObject_type())) );
+  if (sobj) {
+    sobj->ptr = ptr;
+    sobj->ty = ty;
+    sobj->own = own;
+    sobj->next = 0;
+  }
+  return (PyObject *)sobj;
+}
+typedef struct {
+  Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+  void *pack;
+  swig_type_info *ty;
+  size_t size;
+} SwigPyPacked;
+static __attribute__ ((__unused__)) int
+SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int )
+{
+  char result[1024];
+  fputs("<Swig Packed ", fp);
+  if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) {
+    fputs("at ", fp);
+    fputs(result, fp);
+  }
+  fputs(v->ty->name,fp);
+  fputs(">", fp);
+  return 0;
+}
+static __attribute__ ((__unused__)) PyObject *
+SwigPyPacked_repr(SwigPyPacked *v)
+{
+  char result[1024];
+  if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) {
+    return PyString_FromFormat("<Swig Packed at %s%s>", result, v->ty->name);
+  } else {
+    return PyString_FromFormat("<Swig Packed %s>", v->ty->name);
+  }
+}
+static __attribute__ ((__unused__)) PyObject *
+SwigPyPacked_str(SwigPyPacked *v)
+{
+  char result[1024];
+  if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){
+    return PyString_FromFormat("%s%s", result, v->ty->name);
+  } else {
+    return SWIG_Python_str_FromChar(v->ty->name);
+  }
+}
+static __attribute__ ((__unused__)) int
+SwigPyPacked_compare(SwigPyPacked *v, SwigPyPacked *w)
+{
+  size_t i = v->size;
+  size_t j = w->size;
+  int s = (i < j) ? -1 : ((i > j) ? 1 : 0);
+  return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size);
+}
+static __attribute__ ((__unused__)) PyTypeObject* _PySwigPacked_type(void);
+static __attribute__ ((__unused__)) PyTypeObject*
+SwigPyPacked_type(void) {
+  static PyTypeObject *type = _PySwigPacked_type();
+  return type;
+}
+static __attribute__ ((__unused__)) inline int
+SwigPyPacked_Check(PyObject *op) {
+  return ((op)->ob_type == _PySwigPacked_type())
+    || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0);
+}
+static __attribute__ ((__unused__)) void
+SwigPyPacked_dealloc(PyObject *v)
+{
+  if (SwigPyPacked_Check(v)) {
+    SwigPyPacked *sobj = (SwigPyPacked *) v;
+    free(sobj->pack);
+  }
+  PyObject_Free(v);
+}
+static __attribute__ ((__unused__)) PyTypeObject*
+_PySwigPacked_type(void) {
+  static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer";
+  static PyTypeObject swigpypacked_type;
+  static int type_init = 0;
+  if (!type_init) {
+    const PyTypeObject tmp
+      = {
+ 1, __null,
+    0,
+ (char *)"SwigPyPacked",
+ sizeof(SwigPyPacked),
+ 0,
+ (destructor)SwigPyPacked_dealloc,
+ (printfunc)SwigPyPacked_print,
+ (getattrfunc)0,
+ (setattrfunc)0,
+    (cmpfunc)SwigPyPacked_compare,
+ (reprfunc)SwigPyPacked_repr,
+ 0,
+ 0,
+ 0,
+ (hashfunc)0,
+ (ternaryfunc)0,
+ (reprfunc)SwigPyPacked_str,
+ PyObject_GenericGetAttr,
+ 0,
+ 0,
+ ( (1L<<0) | (1L<<1) | (1L<<3) | (1L<<5) | (1L<<6) | (1L<<7) | (1L<<8) | 0 | (1L<<17) | 0),
+ swigpacked_doc,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+        0,
+ 0,
+ 0,
+ 0,
+  0,
+ 0,
+ 0,
+      };
+    swigpypacked_type = tmp;
+    swigpypacked_type.ob_type = &PyType_Type;
+    type_init = 1;
+  }
+  return &swigpypacked_type;
+}
+static __attribute__ ((__unused__)) PyObject *
+SwigPyPacked_New(void *ptr, size_t size, swig_type_info *ty)
+{
+  SwigPyPacked *sobj = ( (SwigPyPacked *) PyObject_Init( (PyObject *) PyObject_Malloc( ( (SwigPyPacked_type())->tp_basicsize ) ), (SwigPyPacked_type())) );
+  if (sobj) {
+    void *pack = malloc(size);
+    if (pack) {
+      memcpy(pack, ptr, size);
+      sobj->pack = pack;
+      sobj->ty = ty;
+      sobj->size = size;
+    } else {
+      PyObject_Free((PyObject *) sobj);
+      sobj = 0;
+    }
+  }
+  return (PyObject *) sobj;
+}
+static __attribute__ ((__unused__)) swig_type_info *
+SwigPyPacked_UnpackData(PyObject *obj, void *ptr, size_t size)
+{
+  if (SwigPyPacked_Check(obj)) {
+    SwigPyPacked *sobj = (SwigPyPacked *)obj;
+    if (sobj->size != size) return 0;
+    memcpy(ptr, sobj->pack, size);
+    return sobj->ty;
+  } else {
+    return 0;
+  }
+}
+static __attribute__ ((__unused__)) inline PyObject *
+_SWIG_This(void)
+{
+    return SWIG_Python_str_FromChar("this");
+}
+static __attribute__ ((__unused__)) PyObject *
+SWIG_This(void)
+{
+  static PyObject *swig_this = _SWIG_This();
+  return swig_this;
+}
+static __attribute__ ((__unused__)) SwigPyObject *
+SWIG_Python_GetSwigThis(PyObject *pyobj)
+{
+  if (SwigPyObject_Check(pyobj)) {
+    return (SwigPyObject *) pyobj;
+  } else {
+    PyObject *obj = 0;
+    if (((pyobj)->ob_type == &PyInstance_Type)) {
+      obj = _PyInstance_Lookup(pyobj, SWIG_This());
+    } else {
+      PyObject **dictptr = _PyObject_GetDictPtr(pyobj);
+      if (dictptr != __null) {
+ PyObject *dict = *dictptr;
+ obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0;
+      } else {
+ if ((((((PyObject*)(pyobj))->ob_type) == &_PyWeakref_ProxyType) || ((((PyObject*)(pyobj))->ob_type) == &_PyWeakref_CallableProxyType))) {
+   PyObject *wobj = (((PyWeakReference *)(pyobj))->wr_object);
+   return wobj ? SWIG_Python_GetSwigThis(wobj) : 0;
+ }
+ obj = PyObject_GetAttr(pyobj,SWIG_This());
+ if (obj) {
+   if ( --((PyObject*)(obj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(obj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(obj))));
+ } else {
+   if (PyErr_Occurred()) PyErr_Clear();
+   return 0;
+ }
+      }
+    }
+    if (obj && !SwigPyObject_Check(obj)) {
+      return SWIG_Python_GetSwigThis(obj);
+    }
+    return (SwigPyObject *)obj;
+  }
+}
+static __attribute__ ((__unused__)) int
+SWIG_Python_AcquirePtr(PyObject *obj, int own) {
+  if (own == 0x1) {
+    SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj);
+    if (sobj) {
+      int oldown = sobj->own;
+      sobj->own = own;
+      return oldown;
+    }
+  }
+  return 0;
+}
+static __attribute__ ((__unused__)) int
+SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) {
+  if (!obj) return (-1);
+  if (obj == (&_Py_NoneStruct)) {
+    if (ptr) *ptr = 0;
+    return (0);
+  } else {
+    SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj);
+    if (own)
+      *own = 0;
+    while (sobj) {
+      void *vptr = sobj->ptr;
+      if (ty) {
+ swig_type_info *to = sobj->ty;
+ if (to == ty) {
+   if (ptr) *ptr = vptr;
+   break;
+ } else {
+   swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
+   if (!tc) {
+     sobj = (SwigPyObject *)sobj->next;
+   } else {
+     if (ptr) {
+              int newmemory = 0;
+              *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
+              if (newmemory == 0x2) {
+                ((own) ? static_cast<void> (0) : __assert_fail ("own", "modern/xapian_wrap.cc", 2183, __PRETTY_FUNCTION__));
+                if (own)
+                  *own = *own | 0x2;
+              }
+            }
+     break;
+   }
+ }
+      } else {
+ if (ptr) *ptr = vptr;
+ break;
+      }
+    }
+    if (sobj) {
+      if (own)
+        *own = *own | sobj->own;
+      if (flags & 0x1) {
+ sobj->own = 0;
+      }
+      return (0);
+    } else {
+      int res = (-1);
+      if (flags & (0x1 << 1)) {
+ SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0;
+ if (data && !data->implicitconv) {
+   PyObject *klass = data->klass;
+   if (klass) {
+     PyObject *impconv;
+     data->implicitconv = 1;
+     impconv = PyObject_CallFunctionObjArgs(klass, obj, __null);;
+     data->implicitconv = 0;
+     if (PyErr_Occurred()) {
+       PyErr_Clear();
+       impconv = 0;
+     }
+     if (impconv) {
+       SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv);
+       if (iobj) {
+  void *vptr;
+  res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0);
+  if ((res >= 0)) {
+    if (ptr) {
+      *ptr = vptr;
+      iobj->own = 0;
+      res = (res);
+      res = ((res >= 0) ? (res | ((1 << 8) << 1)) : res);
+    } else {
+      res = (res);
+    }
+  }
+       }
+       if ( --((PyObject*)(impconv))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(impconv)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(impconv))));
+     }
+   }
+ }
+      }
+      return res;
+    }
+  }
+}
+static __attribute__ ((__unused__)) int
+SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) {
+  if (!((((PyObject*)(obj))->ob_type) == &PyCFunction_Type)) {
+    return SWIG_Python_ConvertPtrAndOwn(obj, ptr, ty, 0, 0);
+  } else {
+    void *vptr = 0;
+    const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc);
+    const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0;
+    if (desc) {
+      desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0;
+      if (!desc) return (-1);
+    }
+    if (ty) {
+      swig_cast_info *tc = SWIG_TypeCheck(desc,ty);
+      if (tc) {
+        int newmemory = 0;
+        *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
+        ((!newmemory) ? static_cast<void> (0) : __assert_fail ("!newmemory", "modern/xapian_wrap.cc", 2266, __PRETTY_FUNCTION__));
+      } else {
+        return (-1);
+      }
+    } else {
+      *ptr = vptr;
+    }
+    return (0);
+  }
+}
+static __attribute__ ((__unused__)) int
+SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) {
+  swig_type_info *to = SwigPyPacked_UnpackData(obj, ptr, sz);
+  if (!to) return (-1);
+  if (ty) {
+    if (to != ty) {
+      swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
+      if (!tc) return (-1);
+    }
+  }
+  return (0);
+}
+static __attribute__ ((__unused__)) PyObject*
+SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this)
+{
+  PyObject *inst = 0;
+  PyObject *newraw = data->newraw;
+  if (newraw) {
+    inst = PyObject_Call(newraw, data->newargs, __null);
+    if (inst) {
+      PyObject **dictptr = _PyObject_GetDictPtr(inst);
+      if (dictptr != __null) {
+ PyObject *dict = *dictptr;
+ if (dict == __null) {
+   dict = PyDict_New();
+   *dictptr = dict;
+   PyDict_SetItem(dict, SWIG_This(), swig_this);
+ }
+      }
+    }
+  } else {
+    PyObject *dict = PyDict_New();
+    PyDict_SetItem(dict, SWIG_This(), swig_this);
+    inst = PyInstance_NewRaw(data->newargs, dict);
+    if ( --((PyObject*)(dict))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(dict)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(dict))));
+  }
+  return inst;
+}
+static __attribute__ ((__unused__)) void
+SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this)
+{
+ PyObject *dict;
+ PyObject **dictptr = _PyObject_GetDictPtr(inst);
+ if (dictptr != __null) {
+   dict = *dictptr;
+   if (dict == __null) {
+     dict = PyDict_New();
+     *dictptr = dict;
+   }
+   PyDict_SetItem(dict, SWIG_This(), swig_this);
+   return;
+ }
+ dict = PyObject_GetAttrString(inst, (char*)"__dict__");
+ PyDict_SetItem(dict, SWIG_This(), swig_this);
+ if ( --((PyObject*)(dict))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(dict)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(dict))));
+}
+static __attribute__ ((__unused__)) PyObject *
+SWIG_Python_InitShadowInstance(PyObject *args) {
+  PyObject *obj[2];
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) {
+    return __null;
+  } else {
+    SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]);
+    if (sthis) {
+      SwigPyObject_append((PyObject*) sthis, obj[1]);
+    } else {
+      SWIG_Python_SetSwigThis(obj[0], obj[1]);
+    }
+    return SWIG_Py_Void();
+  }
+}
+static __attribute__ ((__unused__)) PyObject *
+SWIG_Python_NewPointerObj(void *ptr, swig_type_info *type, int flags) {
+  if (!ptr) {
+    return SWIG_Py_Void();
+  } else {
+    int own = (flags & 0x1) ? 0x1 : 0;
+    PyObject *robj = SwigPyObject_New(ptr, type, own);
+    SwigPyClientData *clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0;
+    if (clientdata && !(flags & (0x1 << 1))) {
+      PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj);
+      if (inst) {
+ if ( --((PyObject*)(robj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(robj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(robj))));
+ robj = inst;
+      }
+    }
+    return robj;
+  }
+}
+static __attribute__ ((__unused__)) inline PyObject *
+SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) {
+  return ptr ? SwigPyPacked_New((void *) ptr, sz, type) : SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) swig_module_info *
+SWIG_Python_GetModule(void) {
+  static void *type_pointer = (void *)0;
+  if (!type_pointer) {
+    type_pointer = PyCObject_Import((char*)"swig_runtime_data" "4",
+        (char*)"type_pointer" );
+    if (PyErr_Occurred()) {
+      PyErr_Clear();
+      type_pointer = (void *)0;
+    }
+  }
+  return (swig_module_info *) type_pointer;
+}
+static __attribute__ ((__unused__)) void
+SWIG_Python_DestroyModule(void *vptr)
+{
+  swig_module_info *swig_module = (swig_module_info *) vptr;
+  swig_type_info **types = swig_module->types;
+  size_t i;
+  for (i =0; i < swig_module->size; ++i) {
+    swig_type_info *ty = types[i];
+    if (ty->owndata) {
+      SwigPyClientData *data = (SwigPyClientData *) ty->clientdata;
+      if (data) SwigPyClientData_Del(data);
+    }
+  }
+  if ( --((PyObject*)(SWIG_This()))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(SWIG_This())))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(SWIG_This()))));
+}
+static __attribute__ ((__unused__)) void
+SWIG_Python_SetModule(swig_module_info *swig_module) {
+  static PyMethodDef swig_empty_runtime_method_table[] = { {__null, __null, 0, __null} };
+  PyObject *module = Py_InitModule4_64((char*)"swig_runtime_data" "4", swig_empty_runtime_method_table, (char *)__null, (PyObject *)__null, 1013);
+  PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule);
+  if (pointer && module) {
+    PyModule_AddObject(module, (char*)"type_pointer" , pointer);
+  } else {
+    if ((pointer) == __null) ; else if ( --((PyObject*)(pointer))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(pointer)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(pointer))));
+  }
+}
+static __attribute__ ((__unused__)) PyObject *
+SWIG_Python_TypeCache(void) {
+  static PyObject *cache = PyDict_New();
+  return cache;
+}
+static __attribute__ ((__unused__)) swig_type_info *
+SWIG_Python_TypeQuery(const char *type)
+{
+  PyObject *cache = SWIG_Python_TypeCache();
+  PyObject *key = SWIG_Python_str_FromChar(type);
+  PyObject *obj = PyDict_GetItem(cache, key);
+  swig_type_info *descriptor;
+  if (obj) {
+    descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
+  } else {
+    swig_module_info *swig_module = SWIG_Python_GetModule();
+    descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
+    if (descriptor) {
+      obj = PyCObject_FromVoidPtr(descriptor, __null);
+      PyDict_SetItem(cache, key, obj);
+      if ( --((PyObject*)(obj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(obj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(obj))));
+    }
+  }
+  if ( --((PyObject*)(key))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(key)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(key))));
+  return descriptor;
+}
+static __attribute__ ((__unused__)) int
+SWIG_Python_AddErrMesg(const char* mesg, int infront)
+{
+  if (PyErr_Occurred()) {
+    PyObject *type = 0;
+    PyObject *value = 0;
+    PyObject *traceback = 0;
+    PyErr_Fetch(&type, &value, &traceback);
+    if (value) {
+      char *tmp;
+      PyObject *old_str = PyObject_Str(value);
+      if ((type) == __null) ; else ( ((PyObject*)(type))->ob_refcnt++);
+      PyErr_Clear();
+      if (infront) {
+ PyErr_Format(type, "%s %s", mesg, tmp = SWIG_Python_str_AsChar(old_str));
+      } else {
+ PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg);
+      }
+      ;
+      if ( --((PyObject*)(old_str))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(old_str)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(old_str))));
+    }
+    return 1;
+  } else {
+    return 0;
+  }
+}
+static __attribute__ ((__unused__)) int
+SWIG_Python_ArgFail(int argnum)
+{
+  if (PyErr_Occurred()) {
+    char mesg[256];
+    PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum);
+    return SWIG_Python_AddErrMesg(mesg, 1);
+  } else {
+    return 0;
+  }
+}
+static __attribute__ ((__unused__)) inline const char *
+SwigPyObject_GetDesc(PyObject *self)
+{
+  SwigPyObject *v = (SwigPyObject *)self;
+  swig_type_info *ty = v ? v->ty : 0;
+  return ty ? ty->str : (char*)"";
+}
+static __attribute__ ((__unused__)) void
+SWIG_Python_TypeError(const char *type, PyObject *obj)
+{
+  if (type) {
+    {
+      const char *otype = (obj ? obj->ob_type->tp_name : 0);
+      if (otype) {
+ PyObject *str = PyObject_Str(obj);
+ const char *cstr = str ? SWIG_Python_str_AsChar(str) : 0;
+ if (cstr) {
+   PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received",
+         type, otype, cstr);
+          ;
+ } else {
+   PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received",
+         type, otype);
+ }
+ if ((str) == __null) ; else if ( --((PyObject*)(str))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(str)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(str))));
+ return;
+      }
+    }
+    PyErr_Format(PyExc_TypeError, "a '%s' is expected", type);
+  } else {
+    PyErr_Format(PyExc_TypeError, "unexpected type is received");
+  }
+}
+static __attribute__ ((__unused__)) void *
+SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags) {
+  void *result;
+  if (SWIG_Python_ConvertPtrAndOwn(obj, &result, ty, flags, 0) == -1) {
+    PyErr_Clear();
+  }
+  return result;
+}
+}
+       
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Alloc>
+    class allocator;
+  template<class _CharT>
+    struct char_traits;
+  template<typename _CharT, typename _Traits = char_traits<_CharT>,
+           typename _Alloc = allocator<_CharT> >
+    class basic_string;
+  template<> struct char_traits<char>;
+  typedef basic_string<char> string;
+  template<> struct char_traits<wchar_t>;
+  typedef basic_string<wchar_t> wstring;
+}
+       
+       
+typedef long int ptrdiff_t;
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  using ::ptrdiff_t;
+  using ::size_t;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  void
+  __throw_bad_exception(void) __attribute__((__noreturn__));
+  void
+  __throw_bad_alloc(void) __attribute__((__noreturn__));
+  void
+  __throw_bad_cast(void) __attribute__((__noreturn__));
+  void
+  __throw_bad_typeid(void) __attribute__((__noreturn__));
+  void
+  __throw_logic_error(const char*) __attribute__((__noreturn__));
+  void
+  __throw_domain_error(const char*) __attribute__((__noreturn__));
+  void
+  __throw_invalid_argument(const char*) __attribute__((__noreturn__));
+  void
+  __throw_length_error(const char*) __attribute__((__noreturn__));
+  void
+  __throw_out_of_range(const char*) __attribute__((__noreturn__));
+  void
+  __throw_runtime_error(const char*) __attribute__((__noreturn__));
+  void
+  __throw_range_error(const char*) __attribute__((__noreturn__));
+  void
+  __throw_overflow_error(const char*) __attribute__((__noreturn__));
+  void
+  __throw_underflow_error(const char*) __attribute__((__noreturn__));
+  void
+  __throw_ios_failure(const char*) __attribute__((__noreturn__));
+  void
+  __throw_system_error(int) __attribute__((__noreturn__));
+}
+       
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Iterator, typename _Container>
+    class __normal_iterator;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  struct __true_type { };
+  struct __false_type { };
+  template<bool>
+    struct __truth_type
+    { typedef __false_type __type; };
+  template<>
+    struct __truth_type<true>
+    { typedef __true_type __type; };
+  template<class _Sp, class _Tp>
+    struct __traitor
+    {
+      enum { __value = bool(_Sp::__value) || bool(_Tp::__value) };
+      typedef typename __truth_type<__value>::__type __type;
+    };
+  template<typename, typename>
+    struct __are_same
+    {
+      enum { __value = 0 };
+      typedef __false_type __type;
+    };
+  template<typename _Tp>
+    struct __are_same<_Tp, _Tp>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<typename _Tp>
+    struct __is_void
+    {
+      enum { __value = 0 };
+      typedef __false_type __type;
+    };
+  template<>
+    struct __is_void<void>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<typename _Tp>
+    struct __is_integer
+    {
+      enum { __value = 0 };
+      typedef __false_type __type;
+    };
+  template<>
+    struct __is_integer<bool>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<char>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<signed char>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<unsigned char>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<wchar_t>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<short>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<unsigned short>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<int>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<unsigned int>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<long>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<unsigned long>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<long long>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_integer<unsigned long long>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<typename _Tp>
+    struct __is_floating
+    {
+      enum { __value = 0 };
+      typedef __false_type __type;
+    };
+  template<>
+    struct __is_floating<float>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_floating<double>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_floating<long double>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<typename _Tp>
+    struct __is_pointer
+    {
+      enum { __value = 0 };
+      typedef __false_type __type;
+    };
+  template<typename _Tp>
+    struct __is_pointer<_Tp*>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<typename _Tp>
+    struct __is_normal_iterator
+    {
+      enum { __value = 0 };
+      typedef __false_type __type;
+    };
+  template<typename _Iterator, typename _Container>
+    struct __is_normal_iterator< __gnu_cxx::__normal_iterator<_Iterator,
+             _Container> >
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<typename _Tp>
+    struct __is_arithmetic
+    : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> >
+    { };
+  template<typename _Tp>
+    struct __is_fundamental
+    : public __traitor<__is_void<_Tp>, __is_arithmetic<_Tp> >
+    { };
+  template<typename _Tp>
+    struct __is_scalar
+    : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> >
+    { };
+  template<typename _Tp>
+    struct __is_char
+    {
+      enum { __value = 0 };
+      typedef __false_type __type;
+    };
+  template<>
+    struct __is_char<char>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_char<wchar_t>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<typename _Tp>
+    struct __is_byte
+    {
+      enum { __value = 0 };
+      typedef __false_type __type;
+    };
+  template<>
+    struct __is_byte<char>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_byte<signed char>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<>
+    struct __is_byte<unsigned char>
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+  template<typename _Tp>
+    struct __is_move_iterator
+    {
+      enum { __value = 0 };
+      typedef __false_type __type;
+    };
+}
+       
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+  template<bool, typename>
+    struct __enable_if
+    { };
+  template<typename _Tp>
+    struct __enable_if<true, _Tp>
+    { typedef _Tp __type; };
+  template<bool _Cond, typename _Iftrue, typename _Iffalse>
+    struct __conditional_type
+    { typedef _Iftrue __type; };
+  template<typename _Iftrue, typename _Iffalse>
+    struct __conditional_type<false, _Iftrue, _Iffalse>
+    { typedef _Iffalse __type; };
+  template<typename _Tp>
+    struct __add_unsigned
+    {
+    private:
+      typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;
+    public:
+      typedef typename __if_type::__type __type;
+    };
+  template<>
+    struct __add_unsigned<char>
+    { typedef unsigned char __type; };
+  template<>
+    struct __add_unsigned<signed char>
+    { typedef unsigned char __type; };
+  template<>
+    struct __add_unsigned<short>
+    { typedef unsigned short __type; };
+  template<>
+    struct __add_unsigned<int>
+    { typedef unsigned int __type; };
+  template<>
+    struct __add_unsigned<long>
+    { typedef unsigned long __type; };
+  template<>
+    struct __add_unsigned<long long>
+    { typedef unsigned long long __type; };
+  template<>
+    struct __add_unsigned<bool>;
+  template<>
+    struct __add_unsigned<wchar_t>;
+  template<typename _Tp>
+    struct __remove_unsigned
+    {
+    private:
+      typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;
+    public:
+      typedef typename __if_type::__type __type;
+    };
+  template<>
+    struct __remove_unsigned<char>
+    { typedef signed char __type; };
+  template<>
+    struct __remove_unsigned<unsigned char>
+    { typedef signed char __type; };
+  template<>
+    struct __remove_unsigned<unsigned short>
+    { typedef short __type; };
+  template<>
+    struct __remove_unsigned<unsigned int>
+    { typedef int __type; };
+  template<>
+    struct __remove_unsigned<unsigned long>
+    { typedef long __type; };
+  template<>
+    struct __remove_unsigned<unsigned long long>
+    { typedef long long __type; };
+  template<>
+    struct __remove_unsigned<bool>;
+  template<>
+    struct __remove_unsigned<wchar_t>;
+  template<typename _Type>
+    inline bool
+    __is_null_pointer(_Type* __ptr)
+    { return __ptr == 0; }
+  template<typename _Type>
+    inline bool
+    __is_null_pointer(_Type)
+    { return false; }
+  template<typename _Tp, bool = std::__is_integer<_Tp>::__value>
+    struct __promote
+    { typedef double __type; };
+  template<typename _Tp>
+    struct __promote<_Tp, false>
+    { typedef _Tp __type; };
+  template<typename _Tp, typename _Up>
+    struct __promote_2
+    {
+    private:
+      typedef typename __promote<_Tp>::__type __type1;
+      typedef typename __promote<_Up>::__type __type2;
+    public:
+      typedef __typeof__(__type1() + __type2()) __type;
+    };
+  template<typename _Tp, typename _Up, typename _Vp>
+    struct __promote_3
+    {
+    private:
+      typedef typename __promote<_Tp>::__type __type1;
+      typedef typename __promote<_Up>::__type __type2;
+      typedef typename __promote<_Vp>::__type __type3;
+    public:
+      typedef __typeof__(__type1() + __type2() + __type3()) __type;
+    };
+  template<typename _Tp, typename _Up, typename _Vp, typename _Wp>
+    struct __promote_4
+    {
+    private:
+      typedef typename __promote<_Tp>::__type __type1;
+      typedef typename __promote<_Up>::__type __type2;
+      typedef typename __promote<_Vp>::__type __type3;
+      typedef typename __promote<_Wp>::__type __type4;
+    public:
+      typedef __typeof__(__type1() + __type2() + __type3() + __type4()) __type;
+    };
+}
+       
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Value>
+    struct __numeric_traits_integer
+    {
+      static const _Value __min = (((_Value)(-1) < 0) ? (_Value)1 << (sizeof(_Value) * 8 - ((_Value)(-1) < 0)) : (_Value)0);
+      static const _Value __max = (((_Value)(-1) < 0) ? (((((_Value)1 << ((sizeof(_Value) * 8 - ((_Value)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(_Value)0);
+      static const bool __is_signed = ((_Value)(-1) < 0);
+      static const int __digits = (sizeof(_Value) * 8 - ((_Value)(-1) < 0));
+    };
+  template<typename _Value>
+    const _Value __numeric_traits_integer<_Value>::__min;
+  template<typename _Value>
+    const _Value __numeric_traits_integer<_Value>::__max;
+  template<typename _Value>
+    const bool __numeric_traits_integer<_Value>::__is_signed;
+  template<typename _Value>
+    const int __numeric_traits_integer<_Value>::__digits;
+  template<typename _Value>
+    struct __numeric_traits_floating
+    {
+      static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 64) * 3010 / 10000);
+      static const bool __is_signed = true;
+      static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 18);
+      static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 4932);
+    };
+  template<typename _Value>
+    const int __numeric_traits_floating<_Value>::__max_digits10;
+  template<typename _Value>
+    const bool __numeric_traits_floating<_Value>::__is_signed;
+  template<typename _Value>
+    const int __numeric_traits_floating<_Value>::__digits10;
+  template<typename _Value>
+    const int __numeric_traits_floating<_Value>::__max_exponent10;
+  template<typename _Value>
+    struct __numeric_traits
+    : public __conditional_type<std::__is_integer<_Value>::__value,
+    __numeric_traits_integer<_Value>,
+    __numeric_traits_floating<_Value> >::__type
+    { };
+}
+       
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Tp>
+    inline void
+    swap(_Tp& __a, _Tp& __b)
+    {
+     
+      _Tp __tmp = (__a);
+      __a = (__b);
+      __b = (__tmp);
+    }
+  template<typename _Tp, size_t _Nm>
+    inline void
+    swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
+    {
+      for (size_t __n = 0; __n < _Nm; ++__n)
+ swap(__a[__n], __b[__n]);
+    }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<class _T1, class _T2>
+    struct pair
+    {
+      typedef _T1 first_type;
+      typedef _T2 second_type;
+      _T1 first;
+      _T2 second;
+      pair()
+      : first(), second() { }
+      pair(const _T1& __a, const _T2& __b)
+      : first(__a), second(__b) { }
+      template<class _U1, class _U2>
+        pair(const pair<_U1, _U2>& __p)
+ : first(__p.first),
+   second(__p.second) { }
+    };
+  template<class _T1, class _T2>
+    inline bool
+    operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+    { return __x.first == __y.first && __x.second == __y.second; }
+  template<class _T1, class _T2>
+    inline bool
+    operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+    { return __x.first < __y.first
+      || (!(__y.first < __x.first) && __x.second < __y.second); }
+  template<class _T1, class _T2>
+    inline bool
+    operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+    { return !(__x == __y); }
+  template<class _T1, class _T2>
+    inline bool
+    operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+    { return __y < __x; }
+  template<class _T1, class _T2>
+    inline bool
+    operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+    { return !(__y < __x); }
+  template<class _T1, class _T2>
+    inline bool
+    operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+    { return !(__x < __y); }
+  template<class _T1, class _T2>
+    inline pair<_T1, _T2>
+    make_pair(_T1 __x, _T2 __y)
+    { return pair<_T1, _T2>(__x, __y); }
+}
+       
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  struct input_iterator_tag { };
+  struct output_iterator_tag { };
+  struct forward_iterator_tag : public input_iterator_tag { };
+  struct bidirectional_iterator_tag : public forward_iterator_tag { };
+  struct random_access_iterator_tag : public bidirectional_iterator_tag { };
+  template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
+           typename _Pointer = _Tp*, typename _Reference = _Tp&>
+    struct iterator
+    {
+      typedef _Category iterator_category;
+      typedef _Tp value_type;
+      typedef _Distance difference_type;
+      typedef _Pointer pointer;
+      typedef _Reference reference;
+    };
+  template<typename _Iterator>
+    struct iterator_traits
+    {
+      typedef typename _Iterator::iterator_category iterator_category;
+      typedef typename _Iterator::value_type value_type;
+      typedef typename _Iterator::difference_type difference_type;
+      typedef typename _Iterator::pointer pointer;
+      typedef typename _Iterator::reference reference;
+    };
+  template<typename _Tp>
+    struct iterator_traits<_Tp*>
+    {
+      typedef random_access_iterator_tag iterator_category;
+      typedef _Tp value_type;
+      typedef ptrdiff_t difference_type;
+      typedef _Tp* pointer;
+      typedef _Tp& reference;
+    };
+  template<typename _Tp>
+    struct iterator_traits<const _Tp*>
+    {
+      typedef random_access_iterator_tag iterator_category;
+      typedef _Tp value_type;
+      typedef ptrdiff_t difference_type;
+      typedef const _Tp* pointer;
+      typedef const _Tp& reference;
+    };
+  template<typename _Iter>
+    inline typename iterator_traits<_Iter>::iterator_category
+    __iterator_category(const _Iter&)
+    { return typename iterator_traits<_Iter>::iterator_category(); }
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _InputIterator>
+    inline typename iterator_traits<_InputIterator>::difference_type
+    __distance(_InputIterator __first, _InputIterator __last,
+               input_iterator_tag)
+    {
+     
+      typename iterator_traits<_InputIterator>::difference_type __n = 0;
+      while (__first != __last)
+ {
+   ++__first;
+   ++__n;
+ }
+      return __n;
+    }
+  template<typename _RandomAccessIterator>
+    inline typename iterator_traits<_RandomAccessIterator>::difference_type
+    __distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
+               random_access_iterator_tag)
+    {
+     
+      return __last - __first;
+    }
+  template<typename _InputIterator>
+    inline typename iterator_traits<_InputIterator>::difference_type
+    distance(_InputIterator __first, _InputIterator __last)
+    {
+      return std::__distance(__first, __last,
+        std::__iterator_category(__first));
+    }
+  template<typename _InputIterator, typename _Distance>
+    inline void
+    __advance(_InputIterator& __i, _Distance __n, input_iterator_tag)
+    {
+     
+      while (__n--)
+ ++__i;
+    }
+  template<typename _BidirectionalIterator, typename _Distance>
+    inline void
+    __advance(_BidirectionalIterator& __i, _Distance __n,
+       bidirectional_iterator_tag)
+    {
+     
+      if (__n > 0)
+        while (__n--)
+   ++__i;
+      else
+        while (__n++)
+   --__i;
+    }
+  template<typename _RandomAccessIterator, typename _Distance>
+    inline void
+    __advance(_RandomAccessIterator& __i, _Distance __n,
+              random_access_iterator_tag)
+    {
+     
+      __i += __n;
+    }
+  template<typename _InputIterator, typename _Distance>
+    inline void
+    advance(_InputIterator& __i, _Distance __n)
+    {
+      typename iterator_traits<_InputIterator>::difference_type __d = __n;
+      std::__advance(__i, __d, std::__iterator_category(__i));
+    }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Iterator>
+    class reverse_iterator
+    : public iterator<typename iterator_traits<_Iterator>::iterator_category,
+        typename iterator_traits<_Iterator>::value_type,
+        typename iterator_traits<_Iterator>::difference_type,
+        typename iterator_traits<_Iterator>::pointer,
+                      typename iterator_traits<_Iterator>::reference>
+    {
+    protected:
+      _Iterator current;
+    public:
+      typedef _Iterator iterator_type;
+      typedef typename iterator_traits<_Iterator>::difference_type
+              difference_type;
+      typedef typename iterator_traits<_Iterator>::reference reference;
+      typedef typename iterator_traits<_Iterator>::pointer pointer;
+    public:
+      reverse_iterator() : current() { }
+      explicit
+      reverse_iterator(iterator_type __x) : current(__x) { }
+      reverse_iterator(const reverse_iterator& __x)
+      : current(__x.current) { }
+      template<typename _Iter>
+        reverse_iterator(const reverse_iterator<_Iter>& __x)
+ : current(__x.base()) { }
+      iterator_type
+      base() const
+      { return current; }
+      reference
+      operator*() const
+      {
+ _Iterator __tmp = current;
+ return *--__tmp;
+      }
+      pointer
+      operator->() const
+      { return &(operator*()); }
+      reverse_iterator&
+      operator++()
+      {
+ --current;
+ return *this;
+      }
+      reverse_iterator
+      operator++(int)
+      {
+ reverse_iterator __tmp = *this;
+ --current;
+ return __tmp;
+      }
+      reverse_iterator&
+      operator--()
+      {
+ ++current;
+ return *this;
+      }
+      reverse_iterator
+      operator--(int)
+      {
+ reverse_iterator __tmp = *this;
+ ++current;
+ return __tmp;
+      }
+      reverse_iterator
+      operator+(difference_type __n) const
+      { return reverse_iterator(current - __n); }
+      reverse_iterator&
+      operator+=(difference_type __n)
+      {
+ current -= __n;
+ return *this;
+      }
+      reverse_iterator
+      operator-(difference_type __n) const
+      { return reverse_iterator(current + __n); }
+      reverse_iterator&
+      operator-=(difference_type __n)
+      {
+ current += __n;
+ return *this;
+      }
+      reference
+      operator[](difference_type __n) const
+      { return *(*this + __n); }
+    };
+  template<typename _Iterator>
+    inline bool
+    operator==(const reverse_iterator<_Iterator>& __x,
+        const reverse_iterator<_Iterator>& __y)
+    { return __x.base() == __y.base(); }
+  template<typename _Iterator>
+    inline bool
+    operator<(const reverse_iterator<_Iterator>& __x,
+       const reverse_iterator<_Iterator>& __y)
+    { return __y.base() < __x.base(); }
+  template<typename _Iterator>
+    inline bool
+    operator!=(const reverse_iterator<_Iterator>& __x,
+        const reverse_iterator<_Iterator>& __y)
+    { return !(__x == __y); }
+  template<typename _Iterator>
+    inline bool
+    operator>(const reverse_iterator<_Iterator>& __x,
+       const reverse_iterator<_Iterator>& __y)
+    { return __y < __x; }
+  template<typename _Iterator>
+    inline bool
+    operator<=(const reverse_iterator<_Iterator>& __x,
+        const reverse_iterator<_Iterator>& __y)
+    { return !(__y < __x); }
+  template<typename _Iterator>
+    inline bool
+    operator>=(const reverse_iterator<_Iterator>& __x,
+        const reverse_iterator<_Iterator>& __y)
+    { return !(__x < __y); }
+  template<typename _Iterator>
+    inline typename reverse_iterator<_Iterator>::difference_type
+    operator-(const reverse_iterator<_Iterator>& __x,
+       const reverse_iterator<_Iterator>& __y)
+    { return __y.base() - __x.base(); }
+  template<typename _Iterator>
+    inline reverse_iterator<_Iterator>
+    operator+(typename reverse_iterator<_Iterator>::difference_type __n,
+       const reverse_iterator<_Iterator>& __x)
+    { return reverse_iterator<_Iterator>(__x.base() - __n); }
+  template<typename _IteratorL, typename _IteratorR>
+    inline bool
+    operator==(const reverse_iterator<_IteratorL>& __x,
+        const reverse_iterator<_IteratorR>& __y)
+    { return __x.base() == __y.base(); }
+  template<typename _IteratorL, typename _IteratorR>
+    inline bool
+    operator<(const reverse_iterator<_IteratorL>& __x,
+       const reverse_iterator<_IteratorR>& __y)
+    { return __y.base() < __x.base(); }
+  template<typename _IteratorL, typename _IteratorR>
+    inline bool
+    operator!=(const reverse_iterator<_IteratorL>& __x,
+        const reverse_iterator<_IteratorR>& __y)
+    { return !(__x == __y); }
+  template<typename _IteratorL, typename _IteratorR>
+    inline bool
+    operator>(const reverse_iterator<_IteratorL>& __x,
+       const reverse_iterator<_IteratorR>& __y)
+    { return __y < __x; }
+  template<typename _IteratorL, typename _IteratorR>
+    inline bool
+    operator<=(const reverse_iterator<_IteratorL>& __x,
+        const reverse_iterator<_IteratorR>& __y)
+    { return !(__y < __x); }
+  template<typename _IteratorL, typename _IteratorR>
+    inline bool
+    operator>=(const reverse_iterator<_IteratorL>& __x,
+        const reverse_iterator<_IteratorR>& __y)
+    { return !(__x < __y); }
+  template<typename _IteratorL, typename _IteratorR>
+    inline typename reverse_iterator<_IteratorL>::difference_type
+    operator-(const reverse_iterator<_IteratorL>& __x,
+       const reverse_iterator<_IteratorR>& __y)
+    { return __y.base() - __x.base(); }
+  template<typename _Container>
+    class back_insert_iterator
+    : public iterator<output_iterator_tag, void, void, void, void>
+    {
+    protected:
+      _Container* container;
+    public:
+      typedef _Container container_type;
+      explicit
+      back_insert_iterator(_Container& __x) : container(&__x) { }
+      back_insert_iterator&
+      operator=(typename _Container::const_reference __value)
+      {
+ container->push_back(__value);
+ return *this;
+      }
+      back_insert_iterator&
+      operator*()
+      { return *this; }
+      back_insert_iterator&
+      operator++()
+      { return *this; }
+      back_insert_iterator
+      operator++(int)
+      { return *this; }
+    };
+  template<typename _Container>
+    inline back_insert_iterator<_Container>
+    back_inserter(_Container& __x)
+    { return back_insert_iterator<_Container>(__x); }
+  template<typename _Container>
+    class front_insert_iterator
+    : public iterator<output_iterator_tag, void, void, void, void>
+    {
+    protected:
+      _Container* container;
+    public:
+      typedef _Container container_type;
+      explicit front_insert_iterator(_Container& __x) : container(&__x) { }
+      front_insert_iterator&
+      operator=(typename _Container::const_reference __value)
+      {
+ container->push_front(__value);
+ return *this;
+      }
+      front_insert_iterator&
+      operator*()
+      { return *this; }
+      front_insert_iterator&
+      operator++()
+      { return *this; }
+      front_insert_iterator
+      operator++(int)
+      { return *this; }
+    };
+  template<typename _Container>
+    inline front_insert_iterator<_Container>
+    front_inserter(_Container& __x)
+    { return front_insert_iterator<_Container>(__x); }
+  template<typename _Container>
+    class insert_iterator
+    : public iterator<output_iterator_tag, void, void, void, void>
+    {
+    protected:
+      _Container* container;
+      typename _Container::iterator iter;
+    public:
+      typedef _Container container_type;
+      insert_iterator(_Container& __x, typename _Container::iterator __i)
+      : container(&__x), iter(__i) {}
+      insert_iterator&
+      operator=(typename _Container::const_reference __value)
+      {
+ iter = container->insert(iter, __value);
+ ++iter;
+ return *this;
+      }
+      insert_iterator&
+      operator*()
+      { return *this; }
+      insert_iterator&
+      operator++()
+      { return *this; }
+      insert_iterator&
+      operator++(int)
+      { return *this; }
+    };
+  template<typename _Container, typename _Iterator>
+    inline insert_iterator<_Container>
+    inserter(_Container& __x, _Iterator __i)
+    {
+      return insert_iterator<_Container>(__x,
+      typename _Container::iterator(__i));
+    }
+}
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+  using std::iterator_traits;
+  using std::iterator;
+  template<typename _Iterator, typename _Container>
+    class __normal_iterator
+    {
+    protected:
+      _Iterator _M_current;
+    public:
+      typedef _Iterator iterator_type;
+      typedef typename iterator_traits<_Iterator>::iterator_category
+                                                             iterator_category;
+      typedef typename iterator_traits<_Iterator>::value_type value_type;
+      typedef typename iterator_traits<_Iterator>::difference_type
+                                                             difference_type;
+      typedef typename iterator_traits<_Iterator>::reference reference;
+      typedef typename iterator_traits<_Iterator>::pointer pointer;
+      __normal_iterator() : _M_current(_Iterator()) { }
+      explicit
+      __normal_iterator(const _Iterator& __i) : _M_current(__i) { }
+      template<typename _Iter>
+        __normal_iterator(const __normal_iterator<_Iter,
+     typename __enable_if<
+              (std::__are_same<_Iter, typename _Container::pointer>::__value),
+        _Container>::__type>& __i)
+        : _M_current(__i.base()) { }
+      reference
+      operator*() const
+      { return *_M_current; }
+      pointer
+      operator->() const
+      { return _M_current; }
+      __normal_iterator&
+      operator++()
+      {
+ ++_M_current;
+ return *this;
+      }
+      __normal_iterator
+      operator++(int)
+      { return __normal_iterator(_M_current++); }
+      __normal_iterator&
+      operator--()
+      {
+ --_M_current;
+ return *this;
+      }
+      __normal_iterator
+      operator--(int)
+      { return __normal_iterator(_M_current--); }
+      reference
+      operator[](const difference_type& __n) const
+      { return _M_current[__n]; }
+      __normal_iterator&
+      operator+=(const difference_type& __n)
+      { _M_current += __n; return *this; }
+      __normal_iterator
+      operator+(const difference_type& __n) const
+      { return __normal_iterator(_M_current + __n); }
+      __normal_iterator&
+      operator-=(const difference_type& __n)
+      { _M_current -= __n; return *this; }
+      __normal_iterator
+      operator-(const difference_type& __n) const
+      { return __normal_iterator(_M_current - __n); }
+      const _Iterator&
+      base() const
+      { return _M_current; }
+    };
+  template<typename _IteratorL, typename _IteratorR, typename _Container>
+    inline bool
+    operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
+        const __normal_iterator<_IteratorR, _Container>& __rhs)
+    { return __lhs.base() == __rhs.base(); }
+  template<typename _Iterator, typename _Container>
+    inline bool
+    operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
+        const __normal_iterator<_Iterator, _Container>& __rhs)
+    { return __lhs.base() == __rhs.base(); }
+  template<typename _IteratorL, typename _IteratorR, typename _Container>
+    inline bool
+    operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
+        const __normal_iterator<_IteratorR, _Container>& __rhs)
+    { return __lhs.base() != __rhs.base(); }
+  template<typename _Iterator, typename _Container>
+    inline bool
+    operator!=(const __normal_iterator<_Iterator, _Container>& __lhs,
+        const __normal_iterator<_Iterator, _Container>& __rhs)
+    { return __lhs.base() != __rhs.base(); }
+  template<typename _IteratorL, typename _IteratorR, typename _Container>
+    inline bool
+    operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
+       const __normal_iterator<_IteratorR, _Container>& __rhs)
+    { return __lhs.base() < __rhs.base(); }
+  template<typename _Iterator, typename _Container>
+    inline bool
+    operator<(const __normal_iterator<_Iterator, _Container>& __lhs,
+       const __normal_iterator<_Iterator, _Container>& __rhs)
+    { return __lhs.base() < __rhs.base(); }
+  template<typename _IteratorL, typename _IteratorR, typename _Container>
+    inline bool
+    operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
+       const __normal_iterator<_IteratorR, _Container>& __rhs)
+    { return __lhs.base() > __rhs.base(); }
+  template<typename _Iterator, typename _Container>
+    inline bool
+    operator>(const __normal_iterator<_Iterator, _Container>& __lhs,
+       const __normal_iterator<_Iterator, _Container>& __rhs)
+    { return __lhs.base() > __rhs.base(); }
+  template<typename _IteratorL, typename _IteratorR, typename _Container>
+    inline bool
+    operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
+        const __normal_iterator<_IteratorR, _Container>& __rhs)
+    { return __lhs.base() <= __rhs.base(); }
+  template<typename _Iterator, typename _Container>
+    inline bool
+    operator<=(const __normal_iterator<_Iterator, _Container>& __lhs,
+        const __normal_iterator<_Iterator, _Container>& __rhs)
+    { return __lhs.base() <= __rhs.base(); }
+  template<typename _IteratorL, typename _IteratorR, typename _Container>
+    inline bool
+    operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
+        const __normal_iterator<_IteratorR, _Container>& __rhs)
+    { return __lhs.base() >= __rhs.base(); }
+  template<typename _Iterator, typename _Container>
+    inline bool
+    operator>=(const __normal_iterator<_Iterator, _Container>& __lhs,
+        const __normal_iterator<_Iterator, _Container>& __rhs)
+    { return __lhs.base() >= __rhs.base(); }
+  template<typename _IteratorL, typename _IteratorR, typename _Container>
+    inline typename __normal_iterator<_IteratorL, _Container>::difference_type
+    operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
+       const __normal_iterator<_IteratorR, _Container>& __rhs)
+    { return __lhs.base() - __rhs.base(); }
+  template<typename _Iterator, typename _Container>
+    inline typename __normal_iterator<_Iterator, _Container>::difference_type
+    operator-(const __normal_iterator<_Iterator, _Container>& __lhs,
+       const __normal_iterator<_Iterator, _Container>& __rhs)
+    { return __lhs.base() - __rhs.base(); }
+  template<typename _Iterator, typename _Container>
+    inline __normal_iterator<_Iterator, _Container>
+    operator+(typename __normal_iterator<_Iterator, _Container>::difference_type
+       __n, const __normal_iterator<_Iterator, _Container>& __i)
+    { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
+}
+namespace std
+{
+  namespace __debug { }
+}
+namespace __gnu_debug
+{
+  using namespace std::__debug;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<bool _BoolType>
+    struct __iter_swap
+    {
+      template<typename _ForwardIterator1, typename _ForwardIterator2>
+        static void
+        iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
+        {
+          typedef typename iterator_traits<_ForwardIterator1>::value_type
+            _ValueType1;
+          _ValueType1 __tmp = (*__a);
+          *__a = (*__b);
+          *__b = (__tmp);
+ }
+    };
+  template<>
+    struct __iter_swap<true>
+    {
+      template<typename _ForwardIterator1, typename _ForwardIterator2>
+        static void
+        iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
+        {
+          swap(*__a, *__b);
+        }
+    };
+  template<typename _ForwardIterator1, typename _ForwardIterator2>
+    inline void
+    iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
+    {
+      typedef typename iterator_traits<_ForwardIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_ForwardIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+      typedef typename iterator_traits<_ForwardIterator1>::reference
+ _ReferenceType1;
+      typedef typename iterator_traits<_ForwardIterator2>::reference
+ _ReferenceType2;
+      std::__iter_swap<__are_same<_ValueType1, _ValueType2>::__value
+ && __are_same<_ValueType1&, _ReferenceType1>::__value
+ && __are_same<_ValueType2&, _ReferenceType2>::__value>::
+ iter_swap(__a, __b);
+    }
+  template<typename _ForwardIterator1, typename _ForwardIterator2>
+    _ForwardIterator2
+    swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+  _ForwardIterator2 __first2)
+    {
+     
+     
+      ;
+      for (; __first1 != __last1; ++__first1, ++__first2)
+ std::iter_swap(__first1, __first2);
+      return __first2;
+    }
+  template<typename _Tp>
+    inline const _Tp&
+    min(const _Tp& __a, const _Tp& __b)
+    {
+     
+      if (__b < __a)
+ return __b;
+      return __a;
+    }
+  template<typename _Tp>
+    inline const _Tp&
+    max(const _Tp& __a, const _Tp& __b)
+    {
+     
+      if (__a < __b)
+ return __b;
+      return __a;
+    }
+  template<typename _Tp, typename _Compare>
+    inline const _Tp&
+    min(const _Tp& __a, const _Tp& __b, _Compare __comp)
+    {
+      if (__comp(__b, __a))
+ return __b;
+      return __a;
+    }
+  template<typename _Tp, typename _Compare>
+    inline const _Tp&
+    max(const _Tp& __a, const _Tp& __b, _Compare __comp)
+    {
+      if (__comp(__a, __b))
+ return __b;
+      return __a;
+    }
+  template<typename _Iterator,
+    bool _IsNormal = __is_normal_iterator<_Iterator>::__value>
+    struct __niter_base
+    {
+      static _Iterator
+      __b(_Iterator __it)
+      { return __it; }
+    };
+  template<typename _Iterator>
+    struct __niter_base<_Iterator, true>
+    {
+      static typename _Iterator::iterator_type
+      __b(_Iterator __it)
+      { return __it.base(); }
+    };
+  template<typename _Iterator,
+    bool _IsMove = __is_move_iterator<_Iterator>::__value>
+    struct __miter_base
+    {
+      static _Iterator
+      __b(_Iterator __it)
+      { return __it; }
+    };
+  template<typename _Iterator>
+    struct __miter_base<_Iterator, true>
+    {
+      static typename _Iterator::iterator_type
+      __b(_Iterator __it)
+      { return __it.base(); }
+    };
+  template<bool, bool, typename>
+    struct __copy_move
+    {
+      template<typename _II, typename _OI>
+        static _OI
+        __copy_m(_II __first, _II __last, _OI __result)
+        {
+   for (; __first != __last; ++__result, ++__first)
+     *__result = *__first;
+   return __result;
+ }
+    };
+  template<>
+    struct __copy_move<false, false, random_access_iterator_tag>
+    {
+      template<typename _II, typename _OI>
+        static _OI
+        __copy_m(_II __first, _II __last, _OI __result)
+        {
+   typedef typename iterator_traits<_II>::difference_type _Distance;
+   for(_Distance __n = __last - __first; __n > 0; --__n)
+     {
+       *__result = *__first;
+       ++__first;
+       ++__result;
+     }
+   return __result;
+ }
+    };
+  template<bool _IsMove>
+    struct __copy_move<_IsMove, true, random_access_iterator_tag>
+    {
+      template<typename _Tp>
+        static _Tp*
+        __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result)
+        {
+   __builtin_memmove(__result, __first,
+       sizeof(_Tp) * (__last - __first));
+   return __result + (__last - __first);
+ }
+    };
+  template<bool _IsMove, typename _II, typename _OI>
+    inline _OI
+    __copy_move_a(_II __first, _II __last, _OI __result)
+    {
+      typedef typename iterator_traits<_II>::value_type _ValueTypeI;
+      typedef typename iterator_traits<_OI>::value_type _ValueTypeO;
+      typedef typename iterator_traits<_II>::iterator_category _Category;
+      const bool __simple = (__is_pod(_ValueTypeI)
+                      && __is_pointer<_II>::__value
+                      && __is_pointer<_OI>::__value
+        && __are_same<_ValueTypeI, _ValueTypeO>::__value);
+      return std::__copy_move<_IsMove, __simple,
+                       _Category>::__copy_m(__first, __last, __result);
+    }
+  template<typename _CharT>
+    struct char_traits;
+  template<typename _CharT, typename _Traits>
+    class istreambuf_iterator;
+  template<typename _CharT, typename _Traits>
+    class ostreambuf_iterator;
+  template<bool _IsMove, typename _CharT>
+    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+      ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
+    __copy_move_a2(_CharT*, _CharT*,
+     ostreambuf_iterator<_CharT, char_traits<_CharT> >);
+  template<bool _IsMove, typename _CharT>
+    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+      ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
+    __copy_move_a2(const _CharT*, const _CharT*,
+     ostreambuf_iterator<_CharT, char_traits<_CharT> >);
+  template<bool _IsMove, typename _CharT>
+    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+        _CharT*>::__type
+    __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >,
+     istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*);
+  template<bool _IsMove, typename _II, typename _OI>
+    inline _OI
+    __copy_move_a2(_II __first, _II __last, _OI __result)
+    {
+      return _OI(std::__copy_move_a<_IsMove>
+   (std::__niter_base<_II>::__b(__first),
+    std::__niter_base<_II>::__b(__last),
+    std::__niter_base<_OI>::__b(__result)));
+    }
+  template<typename _II, typename _OI>
+    inline _OI
+    copy(_II __first, _II __last, _OI __result)
+    {
+     
+     
+      ;
+      return (std::__copy_move_a2<__is_move_iterator<_II>::__value>
+       (std::__miter_base<_II>::__b(__first),
+        std::__miter_base<_II>::__b(__last), __result));
+    }
+  template<bool, bool, typename>
+    struct __copy_move_backward
+    {
+      template<typename _BI1, typename _BI2>
+        static _BI2
+        __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
+        {
+   while (__first != __last)
+     *--__result = *--__last;
+   return __result;
+ }
+    };
+  template<>
+    struct __copy_move_backward<false, false, random_access_iterator_tag>
+    {
+      template<typename _BI1, typename _BI2>
+        static _BI2
+        __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
+        {
+   typename iterator_traits<_BI1>::difference_type __n;
+   for (__n = __last - __first; __n > 0; --__n)
+     *--__result = *--__last;
+   return __result;
+ }
+    };
+  template<bool _IsMove>
+    struct __copy_move_backward<_IsMove, true, random_access_iterator_tag>
+    {
+      template<typename _Tp>
+        static _Tp*
+        __copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result)
+        {
+   const ptrdiff_t _Num = __last - __first;
+   __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
+   return __result - _Num;
+ }
+    };
+  template<bool _IsMove, typename _BI1, typename _BI2>
+    inline _BI2
+    __copy_move_backward_a(_BI1 __first, _BI1 __last, _BI2 __result)
+    {
+      typedef typename iterator_traits<_BI1>::value_type _ValueType1;
+      typedef typename iterator_traits<_BI2>::value_type _ValueType2;
+      typedef typename iterator_traits<_BI1>::iterator_category _Category;
+      const bool __simple = (__is_pod(_ValueType1)
+                      && __is_pointer<_BI1>::__value
+                      && __is_pointer<_BI2>::__value
+        && __are_same<_ValueType1, _ValueType2>::__value);
+      return std::__copy_move_backward<_IsMove, __simple,
+                                _Category>::__copy_move_b(__first,
+         __last,
+         __result);
+    }
+  template<bool _IsMove, typename _BI1, typename _BI2>
+    inline _BI2
+    __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result)
+    {
+      return _BI2(std::__copy_move_backward_a<_IsMove>
+    (std::__niter_base<_BI1>::__b(__first),
+     std::__niter_base<_BI1>::__b(__last),
+     std::__niter_base<_BI2>::__b(__result)));
+    }
+  template<typename _BI1, typename _BI2>
+    inline _BI2
+    copy_backward(_BI1 __first, _BI1 __last, _BI2 __result)
+    {
+     
+     
+     
+      ;
+      return (std::__copy_move_backward_a2<__is_move_iterator<_BI1>::__value>
+       (std::__miter_base<_BI1>::__b(__first),
+        std::__miter_base<_BI1>::__b(__last), __result));
+    }
+  template<typename _ForwardIterator, typename _Tp>
+    inline typename
+    __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, void>::__type
+    __fill_a(_ForwardIterator __first, _ForwardIterator __last,
+       const _Tp& __value)
+    {
+      for (; __first != __last; ++__first)
+ *__first = __value;
+    }
+  template<typename _ForwardIterator, typename _Tp>
+    inline typename
+    __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type
+    __fill_a(_ForwardIterator __first, _ForwardIterator __last,
+      const _Tp& __value)
+    {
+      const _Tp __tmp = __value;
+      for (; __first != __last; ++__first)
+ *__first = __tmp;
+    }
+  template<typename _Tp>
+    inline typename
+    __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type
+    __fill_a(_Tp* __first, _Tp* __last, const _Tp& __c)
+    {
+      const _Tp __tmp = __c;
+      __builtin_memset(__first, static_cast<unsigned char>(__tmp),
+         __last - __first);
+    }
+  template<typename _ForwardIterator, typename _Tp>
+    inline void
+    fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value)
+    {
+     
+      ;
+      std::__fill_a(std::__niter_base<_ForwardIterator>::__b(__first),
+      std::__niter_base<_ForwardIterator>::__b(__last), __value);
+    }
+  template<typename _OutputIterator, typename _Size, typename _Tp>
+    inline typename
+    __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, _OutputIterator>::__type
+    __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value)
+    {
+      for (; __n > 0; --__n, ++__first)
+ *__first = __value;
+      return __first;
+    }
+  template<typename _OutputIterator, typename _Size, typename _Tp>
+    inline typename
+    __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type
+    __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value)
+    {
+      const _Tp __tmp = __value;
+      for (; __n > 0; --__n, ++__first)
+ *__first = __tmp;
+      return __first;
+    }
+  template<typename _Size, typename _Tp>
+    inline typename
+    __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, _Tp*>::__type
+    __fill_n_a(_Tp* __first, _Size __n, const _Tp& __c)
+    {
+      std::__fill_a(__first, __first + __n, __c);
+      return __first + __n;
+    }
+  template<typename _OI, typename _Size, typename _Tp>
+    inline _OI
+    fill_n(_OI __first, _Size __n, const _Tp& __value)
+    {
+     
+      return _OI(std::__fill_n_a(std::__niter_base<_OI>::__b(__first),
+     __n, __value));
+    }
+  template<bool _BoolType>
+    struct __equal
+    {
+      template<typename _II1, typename _II2>
+        static bool
+        equal(_II1 __first1, _II1 __last1, _II2 __first2)
+        {
+   for (; __first1 != __last1; ++__first1, ++__first2)
+     if (!(*__first1 == *__first2))
+       return false;
+   return true;
+ }
+    };
+  template<>
+    struct __equal<true>
+    {
+      template<typename _Tp>
+        static bool
+        equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2)
+        {
+   return !__builtin_memcmp(__first1, __first2, sizeof(_Tp)
+       * (__last1 - __first1));
+ }
+    };
+  template<typename _II1, typename _II2>
+    inline bool
+    __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2)
+    {
+      typedef typename iterator_traits<_II1>::value_type _ValueType1;
+      typedef typename iterator_traits<_II2>::value_type _ValueType2;
+      const bool __simple = (__is_integer<_ValueType1>::__value
+                      && __is_pointer<_II1>::__value
+                      && __is_pointer<_II2>::__value
+        && __are_same<_ValueType1, _ValueType2>::__value);
+      return std::__equal<__simple>::equal(__first1, __last1, __first2);
+    }
+  template<typename, typename>
+    struct __lc_rai
+    {
+      template<typename _II1, typename _II2>
+        static _II1
+        __newlast1(_II1, _II1 __last1, _II2, _II2)
+        { return __last1; }
+      template<typename _II>
+        static bool
+        __cnd2(_II __first, _II __last)
+        { return __first != __last; }
+    };
+  template<>
+    struct __lc_rai<random_access_iterator_tag, random_access_iterator_tag>
+    {
+      template<typename _RAI1, typename _RAI2>
+        static _RAI1
+        __newlast1(_RAI1 __first1, _RAI1 __last1,
+     _RAI2 __first2, _RAI2 __last2)
+        {
+   const typename iterator_traits<_RAI1>::difference_type
+     __diff1 = __last1 - __first1;
+   const typename iterator_traits<_RAI2>::difference_type
+     __diff2 = __last2 - __first2;
+   return __diff2 < __diff1 ? __first1 + __diff2 : __last1;
+ }
+      template<typename _RAI>
+        static bool
+        __cnd2(_RAI, _RAI)
+        { return true; }
+    };
+  template<bool _BoolType>
+    struct __lexicographical_compare
+    {
+      template<typename _II1, typename _II2>
+        static bool __lc(_II1, _II1, _II2, _II2);
+    };
+  template<bool _BoolType>
+    template<typename _II1, typename _II2>
+      bool
+      __lexicographical_compare<_BoolType>::
+      __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
+      {
+ typedef typename iterator_traits<_II1>::iterator_category _Category1;
+ typedef typename iterator_traits<_II2>::iterator_category _Category2;
+ typedef std::__lc_rai<_Category1, _Category2> __rai_type;
+ __last1 = __rai_type::__newlast1(__first1, __last1,
+      __first2, __last2);
+ for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2);
+      ++__first1, ++__first2)
+   {
+     if (*__first1 < *__first2)
+       return true;
+     if (*__first2 < *__first1)
+       return false;
+   }
+ return __first1 == __last1 && __first2 != __last2;
+      }
+  template<>
+    struct __lexicographical_compare<true>
+    {
+      template<typename _Tp, typename _Up>
+        static bool
+        __lc(const _Tp* __first1, const _Tp* __last1,
+      const _Up* __first2, const _Up* __last2)
+ {
+   const size_t __len1 = __last1 - __first1;
+   const size_t __len2 = __last2 - __first2;
+   const int __result = __builtin_memcmp(__first1, __first2,
+      std::min(__len1, __len2));
+   return __result != 0 ? __result < 0 : __len1 < __len2;
+ }
+    };
+  template<typename _II1, typename _II2>
+    inline bool
+    __lexicographical_compare_aux(_II1 __first1, _II1 __last1,
+      _II2 __first2, _II2 __last2)
+    {
+      typedef typename iterator_traits<_II1>::value_type _ValueType1;
+      typedef typename iterator_traits<_II2>::value_type _ValueType2;
+      const bool __simple =
+ (__is_byte<_ValueType1>::__value && __is_byte<_ValueType2>::__value
+  && !__gnu_cxx::__numeric_traits<_ValueType1>::__is_signed
+  && !__gnu_cxx::__numeric_traits<_ValueType2>::__is_signed
+  && __is_pointer<_II1>::__value
+  && __is_pointer<_II2>::__value);
+      return std::__lexicographical_compare<__simple>::__lc(__first1, __last1,
+           __first2, __last2);
+    }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _II1, typename _II2>
+    inline bool
+    equal(_II1 __first1, _II1 __last1, _II2 __first2)
+    {
+     
+     
+     
+      ;
+      return std::__equal_aux(std::__niter_base<_II1>::__b(__first1),
+         std::__niter_base<_II1>::__b(__last1),
+         std::__niter_base<_II2>::__b(__first2));
+    }
+  template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
+    inline bool
+    equal(_IIter1 __first1, _IIter1 __last1,
+   _IIter2 __first2, _BinaryPredicate __binary_pred)
+    {
+     
+     
+      ;
+      for (; __first1 != __last1; ++__first1, ++__first2)
+ if (!bool(__binary_pred(*__first1, *__first2)))
+   return false;
+      return true;
+    }
+  template<typename _II1, typename _II2>
+    inline bool
+    lexicographical_compare(_II1 __first1, _II1 __last1,
+       _II2 __first2, _II2 __last2)
+    {
+      typedef typename iterator_traits<_II1>::value_type _ValueType1;
+      typedef typename iterator_traits<_II2>::value_type _ValueType2;
+     
+     
+     
+     
+      ;
+      ;
+      return std::__lexicographical_compare_aux
+ (std::__niter_base<_II1>::__b(__first1),
+  std::__niter_base<_II1>::__b(__last1),
+  std::__niter_base<_II2>::__b(__first2),
+  std::__niter_base<_II2>::__b(__last2));
+    }
+  template<typename _II1, typename _II2, typename _Compare>
+    bool
+    lexicographical_compare(_II1 __first1, _II1 __last1,
+       _II2 __first2, _II2 __last2, _Compare __comp)
+    {
+      typedef typename iterator_traits<_II1>::iterator_category _Category1;
+      typedef typename iterator_traits<_II2>::iterator_category _Category2;
+      typedef std::__lc_rai<_Category1, _Category2> __rai_type;
+     
+     
+      ;
+      ;
+      __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2);
+      for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2);
+    ++__first1, ++__first2)
+ {
+   if (__comp(*__first1, *__first2))
+     return true;
+   if (__comp(*__first2, *__first1))
+     return false;
+ }
+      return __first1 == __last1 && __first2 != __last2;
+    }
+  template<typename _InputIterator1, typename _InputIterator2>
+    pair<_InputIterator1, _InputIterator2>
+    mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+      _InputIterator2 __first2)
+    {
+     
+     
+     
+      ;
+      while (__first1 != __last1 && *__first1 == *__first2)
+        {
+   ++__first1;
+   ++__first2;
+        }
+      return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _BinaryPredicate>
+    pair<_InputIterator1, _InputIterator2>
+    mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+      _InputIterator2 __first2, _BinaryPredicate __binary_pred)
+    {
+     
+     
+      ;
+      while (__first1 != __last1 && bool(__binary_pred(*__first1, *__first2)))
+        {
+   ++__first1;
+   ++__first2;
+        }
+      return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
+    }
+}
+       
+       
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  using ::mbstate_t;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  using ::wint_t;
+  using ::btowc;
+  using ::fgetwc;
+  using ::fgetws;
+  using ::fputwc;
+  using ::fputws;
+  using ::fwide;
+  using ::fwprintf;
+  using ::fwscanf;
+  using ::getwc;
+  using ::getwchar;
+  using ::mbrlen;
+  using ::mbrtowc;
+  using ::mbsinit;
+  using ::mbsrtowcs;
+  using ::putwc;
+  using ::putwchar;
+  using ::swprintf;
+  using ::swscanf;
+  using ::ungetwc;
+  using ::vfwprintf;
+  using ::vfwscanf;
+  using ::vswprintf;
+  using ::vswscanf;
+  using ::vwprintf;
+  using ::vwscanf;
+  using ::wcrtomb;
+  using ::wcscat;
+  using ::wcscmp;
+  using ::wcscoll;
+  using ::wcscpy;
+  using ::wcscspn;
+  using ::wcsftime;
+  using ::wcslen;
+  using ::wcsncat;
+  using ::wcsncmp;
+  using ::wcsncpy;
+  using ::wcsrtombs;
+  using ::wcsspn;
+  using ::wcstod;
+  using ::wcstof;
+  using ::wcstok;
+  using ::wcstol;
+  using ::wcstoul;
+  using ::wcsxfrm;
+  using ::wctob;
+  using ::wmemcmp;
+  using ::wmemcpy;
+  using ::wmemmove;
+  using ::wmemset;
+  using ::wprintf;
+  using ::wscanf;
+  using ::wcschr;
+  using ::wcspbrk;
+  using ::wcsrchr;
+  using ::wcsstr;
+  using ::wmemchr;
+}
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+  using ::wcstold;
+  using ::wcstoll;
+  using ::wcstoull;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  using ::__gnu_cxx::wcstold;
+  using ::__gnu_cxx::wcstoll;
+  using ::__gnu_cxx::wcstoull;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  typedef long streamoff;
+  typedef ptrdiff_t streamsize;
+  template<typename _StateT>
+    class fpos
+    {
+    private:
+      streamoff _M_off;
+      _StateT _M_state;
+    public:
+      fpos()
+      : _M_off(0), _M_state() { }
+      fpos(streamoff __off)
+      : _M_off(__off), _M_state() { }
+      operator streamoff() const { return _M_off; }
+      void
+      state(_StateT __st)
+      { _M_state = __st; }
+      _StateT
+      state() const
+      { return _M_state; }
+      fpos&
+      operator+=(streamoff __off)
+      {
+ _M_off += __off;
+ return *this;
+      }
+      fpos&
+      operator-=(streamoff __off)
+      {
+ _M_off -= __off;
+ return *this;
+      }
+      fpos
+      operator+(streamoff __off) const
+      {
+ fpos __pos(*this);
+ __pos += __off;
+ return __pos;
+      }
+      fpos
+      operator-(streamoff __off) const
+      {
+ fpos __pos(*this);
+ __pos -= __off;
+ return __pos;
+      }
+      streamoff
+      operator-(const fpos& __other) const
+      { return _M_off - __other._M_off; }
+    };
+  template<typename _StateT>
+    inline bool
+    operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
+    { return streamoff(__lhs) == streamoff(__rhs); }
+  template<typename _StateT>
+    inline bool
+    operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
+    { return streamoff(__lhs) != streamoff(__rhs); }
+  typedef fpos<mbstate_t> streampos;
+  typedef fpos<mbstate_t> wstreampos;
+}
+       
+       
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT>
+    struct _Char_types
+    {
+      typedef unsigned long int_type;
+      typedef std::streampos pos_type;
+      typedef std::streamoff off_type;
+      typedef std::mbstate_t state_type;
+    };
+  template<typename _CharT>
+    struct char_traits
+    {
+      typedef _CharT char_type;
+      typedef typename _Char_types<_CharT>::int_type int_type;
+      typedef typename _Char_types<_CharT>::pos_type pos_type;
+      typedef typename _Char_types<_CharT>::off_type off_type;
+      typedef typename _Char_types<_CharT>::state_type state_type;
+      static void
+      assign(char_type& __c1, const char_type& __c2)
+      { __c1 = __c2; }
+      static bool
+      eq(const char_type& __c1, const char_type& __c2)
+      { return __c1 == __c2; }
+      static bool
+      lt(const char_type& __c1, const char_type& __c2)
+      { return __c1 < __c2; }
+      static int
+      compare(const char_type* __s1, const char_type* __s2, std::size_t __n);
+      static std::size_t
+      length(const char_type* __s);
+      static const char_type*
+      find(const char_type* __s, std::size_t __n, const char_type& __a);
+      static char_type*
+      move(char_type* __s1, const char_type* __s2, std::size_t __n);
+      static char_type*
+      copy(char_type* __s1, const char_type* __s2, std::size_t __n);
+      static char_type*
+      assign(char_type* __s, std::size_t __n, char_type __a);
+      static char_type
+      to_char_type(const int_type& __c)
+      { return static_cast<char_type>(__c); }
+      static int_type
+      to_int_type(const char_type& __c)
+      { return static_cast<int_type>(__c); }
+      static bool
+      eq_int_type(const int_type& __c1, const int_type& __c2)
+      { return __c1 == __c2; }
+      static int_type
+      eof()
+      { return static_cast<int_type>((-1)); }
+      static int_type
+      not_eof(const int_type& __c)
+      { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); }
+    };
+  template<typename _CharT>
+    int
+    char_traits<_CharT>::
+    compare(const char_type* __s1, const char_type* __s2, std::size_t __n)
+    {
+      for (std::size_t __i = 0; __i < __n; ++__i)
+ if (lt(__s1[__i], __s2[__i]))
+   return -1;
+ else if (lt(__s2[__i], __s1[__i]))
+   return 1;
+      return 0;
+    }
+  template<typename _CharT>
+    std::size_t
+    char_traits<_CharT>::
+    length(const char_type* __p)
+    {
+      std::size_t __i = 0;
+      while (!eq(__p[__i], char_type()))
+        ++__i;
+      return __i;
+    }
+  template<typename _CharT>
+    const typename char_traits<_CharT>::char_type*
+    char_traits<_CharT>::
+    find(const char_type* __s, std::size_t __n, const char_type& __a)
+    {
+      for (std::size_t __i = 0; __i < __n; ++__i)
+        if (eq(__s[__i], __a))
+          return __s + __i;
+      return 0;
+    }
+  template<typename _CharT>
+    typename char_traits<_CharT>::char_type*
+    char_traits<_CharT>::
+    move(char_type* __s1, const char_type* __s2, std::size_t __n)
+    {
+      return static_cast<_CharT*>(__builtin_memmove(__s1, __s2,
+          __n * sizeof(char_type)));
+    }
+  template<typename _CharT>
+    typename char_traits<_CharT>::char_type*
+    char_traits<_CharT>::
+    copy(char_type* __s1, const char_type* __s2, std::size_t __n)
+    {
+      std::copy(__s2, __s2 + __n, __s1);
+      return __s1;
+    }
+  template<typename _CharT>
+    typename char_traits<_CharT>::char_type*
+    char_traits<_CharT>::
+    assign(char_type* __s, std::size_t __n, char_type __a)
+    {
+      std::fill_n(__s, __n, __a);
+      return __s;
+    }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<class _CharT>
+    struct char_traits : public __gnu_cxx::char_traits<_CharT>
+    { };
+  template<>
+    struct char_traits<char>
+    {
+      typedef char char_type;
+      typedef int int_type;
+      typedef streampos pos_type;
+      typedef streamoff off_type;
+      typedef mbstate_t state_type;
+      static void
+      assign(char_type& __c1, const char_type& __c2)
+      { __c1 = __c2; }
+      static bool
+      eq(const char_type& __c1, const char_type& __c2)
+      { return __c1 == __c2; }
+      static bool
+      lt(const char_type& __c1, const char_type& __c2)
+      { return __c1 < __c2; }
+      static int
+      compare(const char_type* __s1, const char_type* __s2, size_t __n)
+      { return __builtin_memcmp(__s1, __s2, __n); }
+      static size_t
+      length(const char_type* __s)
+      { return __builtin_strlen(__s); }
+      static const char_type*
+      find(const char_type* __s, size_t __n, const char_type& __a)
+      { return static_cast<const char_type*>(__builtin_memchr(__s, __a, __n)); }
+      static char_type*
+      move(char_type* __s1, const char_type* __s2, size_t __n)
+      { return static_cast<char_type*>(__builtin_memmove(__s1, __s2, __n)); }
+      static char_type*
+      copy(char_type* __s1, const char_type* __s2, size_t __n)
+      { return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n)); }
+      static char_type*
+      assign(char_type* __s, size_t __n, char_type __a)
+      { return static_cast<char_type*>(__builtin_memset(__s, __a, __n)); }
+      static char_type
+      to_char_type(const int_type& __c)
+      { return static_cast<char_type>(__c); }
+      static int_type
+      to_int_type(const char_type& __c)
+      { return static_cast<int_type>(static_cast<unsigned char>(__c)); }
+      static bool
+      eq_int_type(const int_type& __c1, const int_type& __c2)
+      { return __c1 == __c2; }
+      static int_type
+      eof()
+      { return static_cast<int_type>((-1)); }
+      static int_type
+      not_eof(const int_type& __c)
+      { return (__c == eof()) ? 0 : __c; }
+  };
+  template<>
+    struct char_traits<wchar_t>
+    {
+      typedef wchar_t char_type;
+      typedef wint_t int_type;
+      typedef streamoff off_type;
+      typedef wstreampos pos_type;
+      typedef mbstate_t state_type;
+      static void
+      assign(char_type& __c1, const char_type& __c2)
+      { __c1 = __c2; }
+      static bool
+      eq(const char_type& __c1, const char_type& __c2)
+      { return __c1 == __c2; }
+      static bool
+      lt(const char_type& __c1, const char_type& __c2)
+      { return __c1 < __c2; }
+      static int
+      compare(const char_type* __s1, const char_type* __s2, size_t __n)
+      { return wmemcmp(__s1, __s2, __n); }
+      static size_t
+      length(const char_type* __s)
+      { return wcslen(__s); }
+      static const char_type*
+      find(const char_type* __s, size_t __n, const char_type& __a)
+      { return wmemchr(__s, __a, __n); }
+      static char_type*
+      move(char_type* __s1, const char_type* __s2, size_t __n)
+      { return wmemmove(__s1, __s2, __n); }
+      static char_type*
+      copy(char_type* __s1, const char_type* __s2, size_t __n)
+      { return wmemcpy(__s1, __s2, __n); }
+      static char_type*
+      assign(char_type* __s, size_t __n, char_type __a)
+      { return wmemset(__s, __a, __n); }
+      static char_type
+      to_char_type(const int_type& __c)
+      { return char_type(__c); }
+      static int_type
+      to_int_type(const char_type& __c)
+      { return int_type(__c); }
+      static bool
+      eq_int_type(const int_type& __c1, const int_type& __c2)
+      { return __c1 == __c2; }
+      static int_type
+      eof()
+      { return static_cast<int_type>((0xffffffffu)); }
+      static int_type
+      not_eof(const int_type& __c)
+      { return eq_int_type(__c, eof()) ? 0 : __c; }
+  };
+}
+       
+extern "C++" {
+namespace std
+{
+  class exception
+  {
+  public:
+    exception() throw() { }
+    virtual ~exception() throw();
+    virtual const char* what() const throw();
+  };
+  class bad_exception : public exception
+  {
+  public:
+    bad_exception() throw() { }
+    virtual ~bad_exception() throw();
+    virtual const char* what() const throw();
+  };
+  typedef void (*terminate_handler) ();
+  typedef void (*unexpected_handler) ();
+  terminate_handler set_terminate(terminate_handler) throw();
+  void terminate() __attribute__ ((__noreturn__));
+  unexpected_handler set_unexpected(unexpected_handler) throw();
+  void unexpected() __attribute__ ((__noreturn__));
+  bool uncaught_exception() throw();
+}
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+  void __verbose_terminate_handler();
+}
+}
+extern "C++" {
+namespace std
+{
+  class bad_alloc : public exception
+  {
+  public:
+    bad_alloc() throw() { }
+    virtual ~bad_alloc() throw();
+    virtual const char* what() const throw();
+  };
+  struct nothrow_t { };
+  extern const nothrow_t nothrow;
+  typedef void (*new_handler)();
+  new_handler set_new_handler(new_handler) throw();
+}
+void* operator new(std::size_t) throw (std::bad_alloc);
+void* operator new[](std::size_t) throw (std::bad_alloc);
+void operator delete(void*) throw();
+void operator delete[](void*) throw();
+void* operator new(std::size_t, const std::nothrow_t&) throw();
+void* operator new[](std::size_t, const std::nothrow_t&) throw();
+void operator delete(void*, const std::nothrow_t&) throw();
+void operator delete[](void*, const std::nothrow_t&) throw();
+inline void* operator new(std::size_t, void* __p) throw() { return __p; }
+inline void* operator new[](std::size_t, void* __p) throw() { return __p; }
+inline void operator delete (void*, void*) throw() { }
+inline void operator delete[](void*, void*) throw() { }
+}
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+  using std::size_t;
+  using std::ptrdiff_t;
+  template<typename _Tp>
+    class new_allocator
+    {
+    public:
+      typedef size_t size_type;
+      typedef ptrdiff_t difference_type;
+      typedef _Tp* pointer;
+      typedef const _Tp* const_pointer;
+      typedef _Tp& reference;
+      typedef const _Tp& const_reference;
+      typedef _Tp value_type;
+      template<typename _Tp1>
+        struct rebind
+        { typedef new_allocator<_Tp1> other; };
+      new_allocator() throw() { }
+      new_allocator(const new_allocator&) throw() { }
+      template<typename _Tp1>
+        new_allocator(const new_allocator<_Tp1>&) throw() { }
+      ~new_allocator() throw() { }
+      pointer
+      address(reference __x) const { return &__x; }
+      const_pointer
+      address(const_reference __x) const { return &__x; }
+      pointer
+      allocate(size_type __n, const void* = 0)
+      {
+ if (__builtin_expect(__n > this->max_size(), false))
+   std::__throw_bad_alloc();
+ return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
+      }
+      void
+      deallocate(pointer __p, size_type)
+      { ::operator delete(__p); }
+      size_type
+      max_size() const throw()
+      { return size_t(-1) / sizeof(_Tp); }
+      void
+      construct(pointer __p, const _Tp& __val)
+      { ::new((void *)__p) _Tp(__val); }
+      void
+      destroy(pointer __p) { __p->~_Tp(); }
+    };
+  template<typename _Tp>
+    inline bool
+    operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
+    { return true; }
+  template<typename _Tp>
+    inline bool
+    operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
+    { return false; }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Tp>
+    class allocator;
+  template<>
+    class allocator<void>
+    {
+    public:
+      typedef size_t size_type;
+      typedef ptrdiff_t difference_type;
+      typedef void* pointer;
+      typedef const void* const_pointer;
+      typedef void value_type;
+      template<typename _Tp1>
+        struct rebind
+        { typedef allocator<_Tp1> other; };
+    };
+  template<typename _Tp>
+    class allocator: public __gnu_cxx::new_allocator<_Tp>
+    {
+   public:
+      typedef size_t size_type;
+      typedef ptrdiff_t difference_type;
+      typedef _Tp* pointer;
+      typedef const _Tp* const_pointer;
+      typedef _Tp& reference;
+      typedef const _Tp& const_reference;
+      typedef _Tp value_type;
+      template<typename _Tp1>
+        struct rebind
+        { typedef allocator<_Tp1> other; };
+      allocator() throw() { }
+      allocator(const allocator& __a) throw()
+      : __gnu_cxx::new_allocator<_Tp>(__a) { }
+      template<typename _Tp1>
+        allocator(const allocator<_Tp1>&) throw() { }
+      ~allocator() throw() { }
+    };
+  template<typename _T1, typename _T2>
+    inline bool
+    operator==(const allocator<_T1>&, const allocator<_T2>&)
+    { return true; }
+  template<typename _Tp>
+    inline bool
+    operator==(const allocator<_Tp>&, const allocator<_Tp>&)
+    { return true; }
+  template<typename _T1, typename _T2>
+    inline bool
+    operator!=(const allocator<_T1>&, const allocator<_T2>&)
+    { return false; }
+  template<typename _Tp>
+    inline bool
+    operator!=(const allocator<_Tp>&, const allocator<_Tp>&)
+    { return false; }
+  extern template class allocator<char>;
+  extern template class allocator<wchar_t>;
+  template<typename _Alloc, bool = __is_empty(_Alloc)>
+    struct __alloc_swap
+    { static void _S_do_it(_Alloc&, _Alloc&) { } };
+  template<typename _Alloc>
+    struct __alloc_swap<_Alloc, false>
+    {
+      static void
+      _S_do_it(_Alloc& __one, _Alloc& __two)
+      {
+ if (__one != __two)
+   swap(__one, __two);
+      }
+    };
+  template<typename _Alloc, bool = __is_empty(_Alloc)>
+    struct __alloc_neq
+    {
+      static bool
+      _S_do_it(const _Alloc&, const _Alloc&)
+      { return false; }
+    };
+  template<typename _Alloc>
+    struct __alloc_neq<_Alloc, false>
+    {
+      static bool
+      _S_do_it(const _Alloc& __one, const _Alloc& __two)
+      { return __one != __two; }
+    };
+}
+       
+       
+       
+enum
+{
+  __LC_CTYPE = 0,
+  __LC_NUMERIC = 1,
+  __LC_TIME = 2,
+  __LC_COLLATE = 3,
+  __LC_MONETARY = 4,
+  __LC_MESSAGES = 5,
+  __LC_ALL = 6,
+  __LC_PAPER = 7,
+  __LC_NAME = 8,
+  __LC_ADDRESS = 9,
+  __LC_TELEPHONE = 10,
+  __LC_MEASUREMENT = 11,
+  __LC_IDENTIFICATION = 12
+};
+extern "C" {
+struct lconv
+{
+  char *decimal_point;
+  char *thousands_sep;
+  char *grouping;
+  char *int_curr_symbol;
+  char *currency_symbol;
+  char *mon_decimal_point;
+  char *mon_thousands_sep;
+  char *mon_grouping;
+  char *positive_sign;
+  char *negative_sign;
+  char int_frac_digits;
+  char frac_digits;
+  char p_cs_precedes;
+  char p_sep_by_space;
+  char n_cs_precedes;
+  char n_sep_by_space;
+  char p_sign_posn;
+  char n_sign_posn;
+  char int_p_cs_precedes;
+  char int_p_sep_by_space;
+  char int_n_cs_precedes;
+  char int_n_sep_by_space;
+  char int_p_sign_posn;
+  char int_n_sign_posn;
+};
+extern char *setlocale (int __category, __const char *__locale) throw ();
+extern struct lconv *localeconv (void) throw ();
+extern __locale_t newlocale (int __category_mask, __const char *__locale,
+        __locale_t __base) throw ();
+extern __locale_t duplocale (__locale_t __dataset) throw ();
+extern void freelocale (__locale_t __dataset) throw ();
+extern __locale_t uselocale (__locale_t __dataset) throw ();
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  using ::lconv;
+  using ::setlocale;
+  using ::localeconv;
+}
+       
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+  extern "C" __typeof(uselocale) __uselocale;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  typedef __locale_t __c_locale;
+  inline int
+  __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)),
+     char* __out,
+     const int __size __attribute__ ((__unused__)),
+     const char* __fmt, ...)
+  {
+    __c_locale __old = __gnu_cxx::__uselocale(__cloc);
+    __builtin_va_list __args;
+    __builtin_va_start(__args, __fmt);
+    const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args);
+    __builtin_va_end(__args);
+    __gnu_cxx::__uselocale(__old);
+    return __ret;
+  }
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits = char_traits<_CharT> >
+    class basic_ios;
+  template<typename _CharT, typename _Traits = char_traits<_CharT> >
+    class basic_streambuf;
+  template<typename _CharT, typename _Traits = char_traits<_CharT> >
+    class basic_istream;
+  template<typename _CharT, typename _Traits = char_traits<_CharT> >
+    class basic_ostream;
+  template<typename _CharT, typename _Traits = char_traits<_CharT> >
+    class basic_iostream;
+  template<typename _CharT, typename _Traits = char_traits<_CharT>,
+     typename _Alloc = allocator<_CharT> >
+    class basic_stringbuf;
+  template<typename _CharT, typename _Traits = char_traits<_CharT>,
+    typename _Alloc = allocator<_CharT> >
+    class basic_istringstream;
+  template<typename _CharT, typename _Traits = char_traits<_CharT>,
+    typename _Alloc = allocator<_CharT> >
+    class basic_ostringstream;
+  template<typename _CharT, typename _Traits = char_traits<_CharT>,
+    typename _Alloc = allocator<_CharT> >
+    class basic_stringstream;
+  template<typename _CharT, typename _Traits = char_traits<_CharT> >
+    class basic_filebuf;
+  template<typename _CharT, typename _Traits = char_traits<_CharT> >
+    class basic_ifstream;
+  template<typename _CharT, typename _Traits = char_traits<_CharT> >
+    class basic_ofstream;
+  template<typename _CharT, typename _Traits = char_traits<_CharT> >
+    class basic_fstream;
+  template<typename _CharT, typename _Traits = char_traits<_CharT> >
+    class istreambuf_iterator;
+  template<typename _CharT, typename _Traits = char_traits<_CharT> >
+    class ostreambuf_iterator;
+  class ios_base;
+  typedef basic_ios<char> ios;
+  typedef basic_streambuf<char> streambuf;
+  typedef basic_istream<char> istream;
+  typedef basic_ostream<char> ostream;
+  typedef basic_iostream<char> iostream;
+  typedef basic_stringbuf<char> stringbuf;
+  typedef basic_istringstream<char> istringstream;
+  typedef basic_ostringstream<char> ostringstream;
+  typedef basic_stringstream<char> stringstream;
+  typedef basic_filebuf<char> filebuf;
+  typedef basic_ifstream<char> ifstream;
+  typedef basic_ofstream<char> ofstream;
+  typedef basic_fstream<char> fstream;
+  typedef basic_ios<wchar_t> wios;
+  typedef basic_streambuf<wchar_t> wstreambuf;
+  typedef basic_istream<wchar_t> wistream;
+  typedef basic_ostream<wchar_t> wostream;
+  typedef basic_iostream<wchar_t> wiostream;
+  typedef basic_stringbuf<wchar_t> wstringbuf;
+  typedef basic_istringstream<wchar_t> wistringstream;
+  typedef basic_ostringstream<wchar_t> wostringstream;
+  typedef basic_stringstream<wchar_t> wstringstream;
+  typedef basic_filebuf<wchar_t> wfilebuf;
+  typedef basic_ifstream<wchar_t> wifstream;
+  typedef basic_ofstream<wchar_t> wofstream;
+  typedef basic_fstream<wchar_t> wfstream;
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  using ::isalnum;
+  using ::isalpha;
+  using ::iscntrl;
+  using ::isdigit;
+  using ::isgraph;
+  using ::islower;
+  using ::isprint;
+  using ::ispunct;
+  using ::isspace;
+  using ::isupper;
+  using ::isxdigit;
+  using ::tolower;
+  using ::toupper;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  class locale;
+  template<typename _Facet>
+    bool
+    has_facet(const locale&) throw();
+  template<typename _Facet>
+    const _Facet&
+    use_facet(const locale&);
+  template<typename _CharT>
+    bool
+    isspace(_CharT, const locale&);
+  template<typename _CharT>
+    bool
+    isprint(_CharT, const locale&);
+  template<typename _CharT>
+    bool
+    iscntrl(_CharT, const locale&);
+  template<typename _CharT>
+    bool
+    isupper(_CharT, const locale&);
+  template<typename _CharT>
+    bool
+    islower(_CharT, const locale&);
+  template<typename _CharT>
+    bool
+    isalpha(_CharT, const locale&);
+  template<typename _CharT>
+    bool
+    isdigit(_CharT, const locale&);
+  template<typename _CharT>
+    bool
+    ispunct(_CharT, const locale&);
+  template<typename _CharT>
+    bool
+    isxdigit(_CharT, const locale&);
+  template<typename _CharT>
+    bool
+    isalnum(_CharT, const locale&);
+  template<typename _CharT>
+    bool
+    isgraph(_CharT, const locale&);
+  template<typename _CharT>
+    _CharT
+    toupper(_CharT, const locale&);
+  template<typename _CharT>
+    _CharT
+    tolower(_CharT, const locale&);
+  class ctype_base;
+  template<typename _CharT>
+    class ctype;
+  template<> class ctype<char>;
+  template<> class ctype<wchar_t>;
+  template<typename _CharT>
+    class ctype_byname;
+  class codecvt_base;
+  template<typename _InternT, typename _ExternT, typename _StateT>
+    class codecvt;
+  template<> class codecvt<char, char, mbstate_t>;
+  template<> class codecvt<wchar_t, char, mbstate_t>;
+  template<typename _InternT, typename _ExternT, typename _StateT>
+    class codecvt_byname;
+  template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
+    class num_get;
+  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+    class num_put;
+  template<typename _CharT> class numpunct;
+  template<typename _CharT> class numpunct_byname;
+  template<typename _CharT>
+    class collate;
+  template<typename _CharT> class
+    collate_byname;
+  class time_base;
+  template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
+    class time_get;
+  template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
+    class time_get_byname;
+  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+    class time_put;
+  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+    class time_put_byname;
+  class money_base;
+  template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
+    class money_get;
+  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+    class money_put;
+  template<typename _CharT, bool _Intl = false>
+    class moneypunct;
+  template<typename _CharT, bool _Intl = false>
+    class moneypunct_byname;
+  class messages_base;
+  template<typename _CharT>
+    class messages;
+  template<typename _CharT>
+    class messages_byname;
+}
+       
+namespace __cxxabiv1
+{
+  class __forced_unwind
+  {
+    virtual ~__forced_unwind() throw();
+    virtual void __pure_dummy() = 0;
+  };
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits>
+    inline void
+    __ostream_write(basic_ostream<_CharT, _Traits>& __out,
+      const _CharT* __s, streamsize __n)
+    {
+      typedef basic_ostream<_CharT, _Traits> __ostream_type;
+      typedef typename __ostream_type::ios_base __ios_base;
+      const streamsize __put = __out.rdbuf()->sputn(__s, __n);
+      if (__put != __n)
+ __out.setstate(__ios_base::badbit);
+    }
+  template<typename _CharT, typename _Traits>
+    inline void
+    __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n)
+    {
+      typedef basic_ostream<_CharT, _Traits> __ostream_type;
+      typedef typename __ostream_type::ios_base __ios_base;
+      const _CharT __c = __out.fill();
+      for (; __n > 0; --__n)
+ {
+   const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c);
+   if (_Traits::eq_int_type(__put, _Traits::eof()))
+     {
+       __out.setstate(__ios_base::badbit);
+       break;
+     }
+ }
+    }
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits>&
+    __ostream_insert(basic_ostream<_CharT, _Traits>& __out,
+       const _CharT* __s, streamsize __n)
+    {
+      typedef basic_ostream<_CharT, _Traits> __ostream_type;
+      typedef typename __ostream_type::ios_base __ios_base;
+      typename __ostream_type::sentry __cerb(__out);
+      if (__cerb)
+ {
+   try
+     {
+       const streamsize __w = __out.width();
+       if (__w > __n)
+  {
+    const bool __left = ((__out.flags()
+     & __ios_base::adjustfield)
+           == __ios_base::left);
+    if (!__left)
+      __ostream_fill(__out, __w - __n);
+    if (__out.good())
+      __ostream_write(__out, __s, __n);
+    if (__left && __out.good())
+      __ostream_fill(__out, __w - __n);
+  }
+       else
+  __ostream_write(__out, __s, __n);
+       __out.width(0);
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       __out._M_setstate(__ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { __out._M_setstate(__ios_base::badbit); }
+ }
+      return __out;
+    }
+  extern template ostream& __ostream_insert(ostream&, const char*, streamsize);
+  extern template wostream& __ostream_insert(wostream&, const wchar_t*,
+          streamsize);
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Arg, typename _Result>
+    struct unary_function
+    {
+      typedef _Arg argument_type;
+      typedef _Result result_type;
+    };
+  template<typename _Arg1, typename _Arg2, typename _Result>
+    struct binary_function
+    {
+      typedef _Arg1 first_argument_type;
+      typedef _Arg2 second_argument_type;
+      typedef _Result result_type;
+    };
+  template<typename _Tp>
+    struct plus : public binary_function<_Tp, _Tp, _Tp>
+    {
+      _Tp
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x + __y; }
+    };
+  template<typename _Tp>
+    struct minus : public binary_function<_Tp, _Tp, _Tp>
+    {
+      _Tp
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x - __y; }
+    };
+  template<typename _Tp>
+    struct multiplies : public binary_function<_Tp, _Tp, _Tp>
+    {
+      _Tp
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x * __y; }
+    };
+  template<typename _Tp>
+    struct divides : public binary_function<_Tp, _Tp, _Tp>
+    {
+      _Tp
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x / __y; }
+    };
+  template<typename _Tp>
+    struct modulus : public binary_function<_Tp, _Tp, _Tp>
+    {
+      _Tp
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x % __y; }
+    };
+  template<typename _Tp>
+    struct negate : public unary_function<_Tp, _Tp>
+    {
+      _Tp
+      operator()(const _Tp& __x) const
+      { return -__x; }
+    };
+  template<typename _Tp>
+    struct equal_to : public binary_function<_Tp, _Tp, bool>
+    {
+      bool
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x == __y; }
+    };
+  template<typename _Tp>
+    struct not_equal_to : public binary_function<_Tp, _Tp, bool>
+    {
+      bool
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x != __y; }
+    };
+  template<typename _Tp>
+    struct greater : public binary_function<_Tp, _Tp, bool>
+    {
+      bool
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x > __y; }
+    };
+  template<typename _Tp>
+    struct less : public binary_function<_Tp, _Tp, bool>
+    {
+      bool
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x < __y; }
+    };
+  template<typename _Tp>
+    struct greater_equal : public binary_function<_Tp, _Tp, bool>
+    {
+      bool
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x >= __y; }
+    };
+  template<typename _Tp>
+    struct less_equal : public binary_function<_Tp, _Tp, bool>
+    {
+      bool
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x <= __y; }
+    };
+  template<typename _Tp>
+    struct logical_and : public binary_function<_Tp, _Tp, bool>
+    {
+      bool
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x && __y; }
+    };
+  template<typename _Tp>
+    struct logical_or : public binary_function<_Tp, _Tp, bool>
+    {
+      bool
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x || __y; }
+    };
+  template<typename _Tp>
+    struct logical_not : public unary_function<_Tp, bool>
+    {
+      bool
+      operator()(const _Tp& __x) const
+      { return !__x; }
+    };
+  template<typename _Tp>
+    struct bit_and : public binary_function<_Tp, _Tp, _Tp>
+    {
+      _Tp
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x & __y; }
+    };
+  template<typename _Tp>
+    struct bit_or : public binary_function<_Tp, _Tp, _Tp>
+    {
+      _Tp
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x | __y; }
+    };
+  template<typename _Tp>
+    struct bit_xor : public binary_function<_Tp, _Tp, _Tp>
+    {
+      _Tp
+      operator()(const _Tp& __x, const _Tp& __y) const
+      { return __x ^ __y; }
+    };
+  template<typename _Predicate>
+    class unary_negate
+    : public unary_function<typename _Predicate::argument_type, bool>
+    {
+    protected:
+      _Predicate _M_pred;
+    public:
+      explicit
+      unary_negate(const _Predicate& __x) : _M_pred(__x) { }
+      bool
+      operator()(const typename _Predicate::argument_type& __x) const
+      { return !_M_pred(__x); }
+    };
+  template<typename _Predicate>
+    inline unary_negate<_Predicate>
+    not1(const _Predicate& __pred)
+    { return unary_negate<_Predicate>(__pred); }
+  template<typename _Predicate>
+    class binary_negate
+    : public binary_function<typename _Predicate::first_argument_type,
+        typename _Predicate::second_argument_type, bool>
+    {
+    protected:
+      _Predicate _M_pred;
+    public:
+      explicit
+      binary_negate(const _Predicate& __x) : _M_pred(__x) { }
+      bool
+      operator()(const typename _Predicate::first_argument_type& __x,
+   const typename _Predicate::second_argument_type& __y) const
+      { return !_M_pred(__x, __y); }
+    };
+  template<typename _Predicate>
+    inline binary_negate<_Predicate>
+    not2(const _Predicate& __pred)
+    { return binary_negate<_Predicate>(__pred); }
+  template<typename _Arg, typename _Result>
+    class pointer_to_unary_function : public unary_function<_Arg, _Result>
+    {
+    protected:
+      _Result (*_M_ptr)(_Arg);
+    public:
+      pointer_to_unary_function() { }
+      explicit
+      pointer_to_unary_function(_Result (*__x)(_Arg))
+      : _M_ptr(__x) { }
+      _Result
+      operator()(_Arg __x) const
+      { return _M_ptr(__x); }
+    };
+  template<typename _Arg, typename _Result>
+    inline pointer_to_unary_function<_Arg, _Result>
+    ptr_fun(_Result (*__x)(_Arg))
+    { return pointer_to_unary_function<_Arg, _Result>(__x); }
+  template<typename _Arg1, typename _Arg2, typename _Result>
+    class pointer_to_binary_function
+    : public binary_function<_Arg1, _Arg2, _Result>
+    {
+    protected:
+      _Result (*_M_ptr)(_Arg1, _Arg2);
+    public:
+      pointer_to_binary_function() { }
+      explicit
+      pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
+      : _M_ptr(__x) { }
+      _Result
+      operator()(_Arg1 __x, _Arg2 __y) const
+      { return _M_ptr(__x, __y); }
+    };
+  template<typename _Arg1, typename _Arg2, typename _Result>
+    inline pointer_to_binary_function<_Arg1, _Arg2, _Result>
+    ptr_fun(_Result (*__x)(_Arg1, _Arg2))
+    { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); }
+  template<typename _Tp>
+    struct _Identity : public unary_function<_Tp,_Tp>
+    {
+      _Tp&
+      operator()(_Tp& __x) const
+      { return __x; }
+      const _Tp&
+      operator()(const _Tp& __x) const
+      { return __x; }
+    };
+  template<typename _Pair>
+    struct _Select1st : public unary_function<_Pair,
+           typename _Pair::first_type>
+    {
+      typename _Pair::first_type&
+      operator()(_Pair& __x) const
+      { return __x.first; }
+      const typename _Pair::first_type&
+      operator()(const _Pair& __x) const
+      { return __x.first; }
+    };
+  template<typename _Pair>
+    struct _Select2nd : public unary_function<_Pair,
+           typename _Pair::second_type>
+    {
+      typename _Pair::second_type&
+      operator()(_Pair& __x) const
+      { return __x.second; }
+      const typename _Pair::second_type&
+      operator()(const _Pair& __x) const
+      { return __x.second; }
+    };
+  template<typename _Ret, typename _Tp>
+    class mem_fun_t : public unary_function<_Tp*, _Ret>
+    {
+    public:
+      explicit
+      mem_fun_t(_Ret (_Tp::*__pf)())
+      : _M_f(__pf) { }
+      _Ret
+      operator()(_Tp* __p) const
+      { return (__p->*_M_f)(); }
+    private:
+      _Ret (_Tp::*_M_f)();
+    };
+  template<typename _Ret, typename _Tp>
+    class const_mem_fun_t : public unary_function<const _Tp*, _Ret>
+    {
+    public:
+      explicit
+      const_mem_fun_t(_Ret (_Tp::*__pf)() const)
+      : _M_f(__pf) { }
+      _Ret
+      operator()(const _Tp* __p) const
+      { return (__p->*_M_f)(); }
+    private:
+      _Ret (_Tp::*_M_f)() const;
+    };
+  template<typename _Ret, typename _Tp>
+    class mem_fun_ref_t : public unary_function<_Tp, _Ret>
+    {
+    public:
+      explicit
+      mem_fun_ref_t(_Ret (_Tp::*__pf)())
+      : _M_f(__pf) { }
+      _Ret
+      operator()(_Tp& __r) const
+      { return (__r.*_M_f)(); }
+    private:
+      _Ret (_Tp::*_M_f)();
+  };
+  template<typename _Ret, typename _Tp>
+    class const_mem_fun_ref_t : public unary_function<_Tp, _Ret>
+    {
+    public:
+      explicit
+      const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const)
+      : _M_f(__pf) { }
+      _Ret
+      operator()(const _Tp& __r) const
+      { return (__r.*_M_f)(); }
+    private:
+      _Ret (_Tp::*_M_f)() const;
+    };
+  template<typename _Ret, typename _Tp, typename _Arg>
+    class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret>
+    {
+    public:
+      explicit
+      mem_fun1_t(_Ret (_Tp::*__pf)(_Arg))
+      : _M_f(__pf) { }
+      _Ret
+      operator()(_Tp* __p, _Arg __x) const
+      { return (__p->*_M_f)(__x); }
+    private:
+      _Ret (_Tp::*_M_f)(_Arg);
+    };
+  template<typename _Ret, typename _Tp, typename _Arg>
+    class const_mem_fun1_t : public binary_function<const _Tp*, _Arg, _Ret>
+    {
+    public:
+      explicit
+      const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const)
+      : _M_f(__pf) { }
+      _Ret
+      operator()(const _Tp* __p, _Arg __x) const
+      { return (__p->*_M_f)(__x); }
+    private:
+      _Ret (_Tp::*_M_f)(_Arg) const;
+    };
+  template<typename _Ret, typename _Tp, typename _Arg>
+    class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
+    {
+    public:
+      explicit
+      mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg))
+      : _M_f(__pf) { }
+      _Ret
+      operator()(_Tp& __r, _Arg __x) const
+      { return (__r.*_M_f)(__x); }
+    private:
+      _Ret (_Tp::*_M_f)(_Arg);
+    };
+  template<typename _Ret, typename _Tp, typename _Arg>
+    class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
+    {
+    public:
+      explicit
+      const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const)
+      : _M_f(__pf) { }
+      _Ret
+      operator()(const _Tp& __r, _Arg __x) const
+      { return (__r.*_M_f)(__x); }
+    private:
+      _Ret (_Tp::*_M_f)(_Arg) const;
+    };
+  template<typename _Ret, typename _Tp>
+    inline mem_fun_t<_Ret, _Tp>
+    mem_fun(_Ret (_Tp::*__f)())
+    { return mem_fun_t<_Ret, _Tp>(__f); }
+  template<typename _Ret, typename _Tp>
+    inline const_mem_fun_t<_Ret, _Tp>
+    mem_fun(_Ret (_Tp::*__f)() const)
+    { return const_mem_fun_t<_Ret, _Tp>(__f); }
+  template<typename _Ret, typename _Tp>
+    inline mem_fun_ref_t<_Ret, _Tp>
+    mem_fun_ref(_Ret (_Tp::*__f)())
+    { return mem_fun_ref_t<_Ret, _Tp>(__f); }
+  template<typename _Ret, typename _Tp>
+    inline const_mem_fun_ref_t<_Ret, _Tp>
+    mem_fun_ref(_Ret (_Tp::*__f)() const)
+    { return const_mem_fun_ref_t<_Ret, _Tp>(__f); }
+  template<typename _Ret, typename _Tp, typename _Arg>
+    inline mem_fun1_t<_Ret, _Tp, _Arg>
+    mem_fun(_Ret (_Tp::*__f)(_Arg))
+    { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
+  template<typename _Ret, typename _Tp, typename _Arg>
+    inline const_mem_fun1_t<_Ret, _Tp, _Arg>
+    mem_fun(_Ret (_Tp::*__f)(_Arg) const)
+    { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
+  template<typename _Ret, typename _Tp, typename _Arg>
+    inline mem_fun1_ref_t<_Ret, _Tp, _Arg>
+    mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
+    { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
+  template<typename _Ret, typename _Tp, typename _Arg>
+    inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg>
+    mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const)
+    { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Operation>
+    class binder1st
+    : public unary_function<typename _Operation::second_argument_type,
+       typename _Operation::result_type>
+    {
+    protected:
+      _Operation op;
+      typename _Operation::first_argument_type value;
+    public:
+      binder1st(const _Operation& __x,
+  const typename _Operation::first_argument_type& __y)
+      : op(__x), value(__y) { }
+      typename _Operation::result_type
+      operator()(const typename _Operation::second_argument_type& __x) const
+      { return op(value, __x); }
+      typename _Operation::result_type
+      operator()(typename _Operation::second_argument_type& __x) const
+      { return op(value, __x); }
+    } ;
+  template<typename _Operation, typename _Tp>
+    inline binder1st<_Operation>
+    bind1st(const _Operation& __fn, const _Tp& __x)
+    {
+      typedef typename _Operation::first_argument_type _Arg1_type;
+      return binder1st<_Operation>(__fn, _Arg1_type(__x));
+    }
+  template<typename _Operation>
+    class binder2nd
+    : public unary_function<typename _Operation::first_argument_type,
+       typename _Operation::result_type>
+    {
+    protected:
+      _Operation op;
+      typename _Operation::second_argument_type value;
+    public:
+      binder2nd(const _Operation& __x,
+  const typename _Operation::second_argument_type& __y)
+      : op(__x), value(__y) { }
+      typename _Operation::result_type
+      operator()(const typename _Operation::first_argument_type& __x) const
+      { return op(__x, value); }
+      typename _Operation::result_type
+      operator()(typename _Operation::first_argument_type& __x) const
+      { return op(__x, value); }
+    } ;
+  template<typename _Operation, typename _Tp>
+    inline binder2nd<_Operation>
+    bind2nd(const _Operation& __fn, const _Tp& __x)
+    {
+      typedef typename _Operation::second_argument_type _Arg2_type;
+      return binder2nd<_Operation>(__fn, _Arg2_type(__x));
+    }
+}
+       
+struct sched_param
+  {
+    int __sched_priority;
+  };
+extern "C" {
+extern int clone (int (*__fn) (void *__arg), void *__child_stack,
+    int __flags, void *__arg, ...) throw ();
+extern int unshare (int __flags) throw ();
+extern int sched_getcpu (void) throw ();
+}
+struct __sched_param
+  {
+    int __sched_priority;
+  };
+typedef unsigned long int __cpu_mask;
+typedef struct
+{
+  __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))];
+} cpu_set_t;
+extern "C" {
+extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
+  throw ();
+extern cpu_set_t *__sched_cpualloc (size_t __count) throw () ;
+extern void __sched_cpufree (cpu_set_t *__set) throw ();
+}
+extern "C" {
+extern int sched_setparam (__pid_t __pid, __const struct sched_param *__param)
+     throw ();
+extern int sched_getparam (__pid_t __pid, struct sched_param *__param) throw ();
+extern int sched_setscheduler (__pid_t __pid, int __policy,
+          __const struct sched_param *__param) throw ();
+extern int sched_getscheduler (__pid_t __pid) throw ();
+extern int sched_yield (void) throw ();
+extern int sched_get_priority_max (int __algorithm) throw ();
+extern int sched_get_priority_min (int __algorithm) throw ();
+extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) throw ();
+extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
+         __const cpu_set_t *__cpuset) throw ();
+extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
+         cpu_set_t *__cpuset) throw ();
+}
+enum
+{
+  PTHREAD_CREATE_JOINABLE,
+  PTHREAD_CREATE_DETACHED
+};
+enum
+{
+  PTHREAD_MUTEX_TIMED_NP,
+  PTHREAD_MUTEX_RECURSIVE_NP,
+  PTHREAD_MUTEX_ERRORCHECK_NP,
+  PTHREAD_MUTEX_ADAPTIVE_NP
+  ,
+  PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
+  PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
+  PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
+  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
+  , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP
+};
+enum
+{
+  PTHREAD_MUTEX_STALLED,
+  PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED,
+  PTHREAD_MUTEX_ROBUST,
+  PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST
+};
+enum
+{
+  PTHREAD_PRIO_NONE,
+  PTHREAD_PRIO_INHERIT,
+  PTHREAD_PRIO_PROTECT
+};
+enum
+{
+  PTHREAD_RWLOCK_PREFER_READER_NP,
+  PTHREAD_RWLOCK_PREFER_WRITER_NP,
+  PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
+  PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP
+};
+enum
+{
+  PTHREAD_INHERIT_SCHED,
+  PTHREAD_EXPLICIT_SCHED
+};
+enum
+{
+  PTHREAD_SCOPE_SYSTEM,
+  PTHREAD_SCOPE_PROCESS
+};
+enum
+{
+  PTHREAD_PROCESS_PRIVATE,
+  PTHREAD_PROCESS_SHARED
+};
+struct _pthread_cleanup_buffer
+{
+  void (*__routine) (void *);
+  void *__arg;
+  int __canceltype;
+  struct _pthread_cleanup_buffer *__prev;
+};
+enum
+{
+  PTHREAD_CANCEL_ENABLE,
+  PTHREAD_CANCEL_DISABLE
+};
+enum
+{
+  PTHREAD_CANCEL_DEFERRED,
+  PTHREAD_CANCEL_ASYNCHRONOUS
+};
+extern "C" {
+extern int pthread_create (pthread_t *__restrict __newthread,
+      __const pthread_attr_t *__restrict __attr,
+      void *(*__start_routine) (void *),
+      void *__restrict __arg) throw () __attribute__ ((__nonnull__ (1, 3)));
+extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__));
+extern int pthread_join (pthread_t __th, void **__thread_return);
+extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) throw ();
+extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
+     __const struct timespec *__abstime);
+extern int pthread_detach (pthread_t __th) throw ();
+extern pthread_t pthread_self (void) throw () __attribute__ ((__const__));
+extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) throw ();
+extern int pthread_attr_init (pthread_attr_t *__attr) throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_attr_destroy (pthread_attr_t *__attr)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_attr_getdetachstate (__const pthread_attr_t *__attr,
+     int *__detachstate)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
+     int __detachstate)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_attr_getguardsize (__const pthread_attr_t *__attr,
+          size_t *__guardsize)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
+          size_t __guardsize)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_attr_getschedparam (__const pthread_attr_t *__restrict
+           __attr,
+           struct sched_param *__restrict __param)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
+           __const struct sched_param *__restrict
+           __param) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_attr_getschedpolicy (__const pthread_attr_t *__restrict
+     __attr, int *__restrict __policy)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_attr_getinheritsched (__const pthread_attr_t *__restrict
+      __attr, int *__restrict __inherit)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
+      int __inherit)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_attr_getscope (__const pthread_attr_t *__restrict __attr,
+      int *__restrict __scope)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_attr_getstackaddr (__const pthread_attr_t *__restrict
+          __attr, void **__restrict __stackaddr)
+     throw () __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__));
+extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
+          void *__stackaddr)
+     throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__));
+extern int pthread_attr_getstacksize (__const pthread_attr_t *__restrict
+          __attr, size_t *__restrict __stacksize)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
+          size_t __stacksize)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_attr_getstack (__const pthread_attr_t *__restrict __attr,
+      void **__restrict __stackaddr,
+      size_t *__restrict __stacksize)
+     throw () __attribute__ ((__nonnull__ (1, 2, 3)));
+extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
+      size_t __stacksize) throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
+     size_t __cpusetsize,
+     __const cpu_set_t *__cpuset)
+     throw () __attribute__ ((__nonnull__ (1, 3)));
+extern int pthread_attr_getaffinity_np (__const pthread_attr_t *__attr,
+     size_t __cpusetsize,
+     cpu_set_t *__cpuset)
+     throw () __attribute__ ((__nonnull__ (1, 3)));
+extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
+      __const struct sched_param *__param)
+     throw () __attribute__ ((__nonnull__ (3)));
+extern int pthread_getschedparam (pthread_t __target_thread,
+      int *__restrict __policy,
+      struct sched_param *__restrict __param)
+     throw () __attribute__ ((__nonnull__ (2, 3)));
+extern int pthread_setschedprio (pthread_t __target_thread, int __prio)
+     throw ();
+extern int pthread_getconcurrency (void) throw ();
+extern int pthread_setconcurrency (int __level) throw ();
+extern int pthread_yield (void) throw ();
+extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize,
+       __const cpu_set_t *__cpuset)
+     throw () __attribute__ ((__nonnull__ (3)));
+extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize,
+       cpu_set_t *__cpuset)
+     throw () __attribute__ ((__nonnull__ (3)));
+extern int pthread_once (pthread_once_t *__once_control,
+    void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_setcancelstate (int __state, int *__oldstate);
+extern int pthread_setcanceltype (int __type, int *__oldtype);
+extern int pthread_cancel (pthread_t __th);
+extern void pthread_testcancel (void);
+typedef struct
+{
+  struct
+  {
+    __jmp_buf __cancel_jmp_buf;
+    int __mask_was_saved;
+  } __cancel_jmp_buf[1];
+  void *__pad[4];
+} __pthread_unwind_buf_t __attribute__ ((__aligned__));
+struct __pthread_cleanup_frame
+{
+  void (*__cancel_routine) (void *);
+  void *__cancel_arg;
+  int __do_it;
+  int __cancel_type;
+};
+class __pthread_cleanup_class
+{
+  void (*__cancel_routine) (void *);
+  void *__cancel_arg;
+  int __do_it;
+  int __cancel_type;
+ public:
+  __pthread_cleanup_class (void (*__fct) (void *), void *__arg)
+    : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { }
+  ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); }
+  void __setdoit (int __newval) { __do_it = __newval; }
+  void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED,
+        &__cancel_type); }
+  void __restore () const { pthread_setcanceltype (__cancel_type, 0); }
+};
+struct __jmp_buf_tag;
+extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) throw ();
+extern int pthread_mutex_init (pthread_mutex_t *__mutex,
+          __const pthread_mutexattr_t *__mutexattr)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutex_destroy (pthread_mutex_t *__mutex)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
+                                    __const struct timespec *__restrict
+                                    __abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutex_getprioceiling (__const pthread_mutex_t *
+      __restrict __mutex,
+      int *__restrict __prioceiling)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
+      int __prioceiling,
+      int *__restrict __old_ceiling)
+     throw () __attribute__ ((__nonnull__ (1, 3)));
+extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutexattr_getpshared (__const pthread_mutexattr_t *
+      __restrict __attr,
+      int *__restrict __pshared)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
+      int __pshared)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutexattr_gettype (__const pthread_mutexattr_t *__restrict
+          __attr, int *__restrict __kind)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutexattr_getprotocol (__const pthread_mutexattr_t *
+       __restrict __attr,
+       int *__restrict __protocol)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr,
+       int __protocol)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutexattr_getprioceiling (__const pthread_mutexattr_t *
+          __restrict __attr,
+          int *__restrict __prioceiling)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr,
+          int __prioceiling)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutexattr_getrobust (__const pthread_mutexattr_t *__attr,
+     int *__robustness)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_mutexattr_getrobust_np (__const pthread_mutexattr_t *__attr,
+        int *__robustness)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr,
+     int __robustness)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr,
+        int __robustness)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
+    __const pthread_rwlockattr_t *__restrict
+    __attr) throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
+  throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
+           __const struct timespec *__restrict
+           __abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
+           __const struct timespec *__restrict
+           __abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_rwlockattr_getpshared (__const pthread_rwlockattr_t *
+       __restrict __attr,
+       int *__restrict __pshared)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
+       int __pshared)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_rwlockattr_getkind_np (__const pthread_rwlockattr_t *
+       __restrict __attr,
+       int *__restrict __pref)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
+       int __pref) throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
+         __const pthread_condattr_t *__restrict
+         __cond_attr) throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_cond_destroy (pthread_cond_t *__cond)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_cond_signal (pthread_cond_t *__cond)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_cond_broadcast (pthread_cond_t *__cond)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
+         pthread_mutex_t *__restrict __mutex)
+     __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
+       pthread_mutex_t *__restrict __mutex,
+       __const struct timespec *__restrict
+       __abstime) __attribute__ ((__nonnull__ (1, 2, 3)));
+extern int pthread_condattr_init (pthread_condattr_t *__attr)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_condattr_getpshared (__const pthread_condattr_t *
+                                        __restrict __attr,
+                                        int *__restrict __pshared)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
+                                        int __pshared) throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_condattr_getclock (__const pthread_condattr_t *
+          __restrict __attr,
+          __clockid_t *__restrict __clock_id)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
+          __clockid_t __clock_id)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_spin_lock (pthread_spinlock_t *__lock)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
+     __const pthread_barrierattr_t *__restrict
+     __attr, unsigned int __count)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_barrierattr_getpshared (__const pthread_barrierattr_t *
+        __restrict __attr,
+        int *__restrict __pshared)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
+                                           int __pshared)
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_key_create (pthread_key_t *__key,
+          void (*__destr_function) (void *))
+     throw () __attribute__ ((__nonnull__ (1)));
+extern int pthread_key_delete (pthread_key_t __key) throw ();
+extern void *pthread_getspecific (pthread_key_t __key) throw ();
+extern int pthread_setspecific (pthread_key_t __key,
+    __const void *__pointer) throw () ;
+extern int pthread_getcpuclockid (pthread_t __thread_id,
+      __clockid_t *__clock_id)
+     throw () __attribute__ ((__nonnull__ (2)));
+extern int pthread_atfork (void (*__prepare) (void),
+      void (*__parent) (void),
+      void (*__child) (void)) throw ();
+}
+typedef pthread_t __gthread_t;
+typedef pthread_key_t __gthread_key_t;
+typedef pthread_once_t __gthread_once_t;
+typedef pthread_mutex_t __gthread_mutex_t;
+typedef pthread_mutex_t __gthread_recursive_mutex_t;
+typedef pthread_cond_t __gthread_cond_t;
+typedef struct timespec __gthread_time_t;
+static __typeof(pthread_once) __gthrw_pthread_once __attribute__ ((__weakref__("pthread_once")));
+static __typeof(pthread_getspecific) __gthrw_pthread_getspecific __attribute__ ((__weakref__("pthread_getspecific")));
+static __typeof(pthread_setspecific) __gthrw_pthread_setspecific __attribute__ ((__weakref__("pthread_setspecific")));
+static __typeof(pthread_create) __gthrw_pthread_create __attribute__ ((__weakref__("pthread_create")));
+static __typeof(pthread_join) __gthrw_pthread_join __attribute__ ((__weakref__("pthread_join")));
+static __typeof(pthread_equal) __gthrw_pthread_equal __attribute__ ((__weakref__("pthread_equal")));
+static __typeof(pthread_self) __gthrw_pthread_self __attribute__ ((__weakref__("pthread_self")));
+static __typeof(pthread_detach) __gthrw_pthread_detach __attribute__ ((__weakref__("pthread_detach")));
+static __typeof(pthread_cancel) __gthrw_pthread_cancel __attribute__ ((__weakref__("pthread_cancel")));
+static __typeof(sched_yield) __gthrw_sched_yield __attribute__ ((__weakref__("sched_yield")));
+static __typeof(pthread_mutex_lock) __gthrw_pthread_mutex_lock __attribute__ ((__weakref__("pthread_mutex_lock")));
+static __typeof(pthread_mutex_trylock) __gthrw_pthread_mutex_trylock __attribute__ ((__weakref__("pthread_mutex_trylock")));
+static __typeof(pthread_mutex_timedlock) __gthrw_pthread_mutex_timedlock __attribute__ ((__weakref__("pthread_mutex_timedlock")));
+static __typeof(pthread_mutex_unlock) __gthrw_pthread_mutex_unlock __attribute__ ((__weakref__("pthread_mutex_unlock")));
+static __typeof(pthread_mutex_init) __gthrw_pthread_mutex_init __attribute__ ((__weakref__("pthread_mutex_init")));
+static __typeof(pthread_mutex_destroy) __gthrw_pthread_mutex_destroy __attribute__ ((__weakref__("pthread_mutex_destroy")));
+static __typeof(pthread_cond_broadcast) __gthrw_pthread_cond_broadcast __attribute__ ((__weakref__("pthread_cond_broadcast")));
+static __typeof(pthread_cond_signal) __gthrw_pthread_cond_signal __attribute__ ((__weakref__("pthread_cond_signal")));
+static __typeof(pthread_cond_wait) __gthrw_pthread_cond_wait __attribute__ ((__weakref__("pthread_cond_wait")));
+static __typeof(pthread_cond_timedwait) __gthrw_pthread_cond_timedwait __attribute__ ((__weakref__("pthread_cond_timedwait")));
+static __typeof(pthread_cond_destroy) __gthrw_pthread_cond_destroy __attribute__ ((__weakref__("pthread_cond_destroy")));
+static __typeof(pthread_key_create) __gthrw_pthread_key_create __attribute__ ((__weakref__("pthread_key_create")));
+static __typeof(pthread_key_delete) __gthrw_pthread_key_delete __attribute__ ((__weakref__("pthread_key_delete")));
+static __typeof(pthread_mutexattr_init) __gthrw_pthread_mutexattr_init __attribute__ ((__weakref__("pthread_mutexattr_init")));
+static __typeof(pthread_mutexattr_settype) __gthrw_pthread_mutexattr_settype __attribute__ ((__weakref__("pthread_mutexattr_settype")));
+static __typeof(pthread_mutexattr_destroy) __gthrw_pthread_mutexattr_destroy __attribute__ ((__weakref__("pthread_mutexattr_destroy")));
+static inline int
+__gthread_active_p (void)
+{
+  static void *const __gthread_active_ptr
+    = __extension__ (void *) &__gthrw_pthread_cancel;
+  return __gthread_active_ptr != 0;
+}
+static inline int
+__gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
+    void *__args)
+{
+  return __gthrw_pthread_create (__threadid, __null, __func, __args);
+}
+static inline int
+__gthread_join (__gthread_t __threadid, void **__value_ptr)
+{
+  return __gthrw_pthread_join (__threadid, __value_ptr);
+}
+static inline int
+__gthread_detach (__gthread_t __threadid)
+{
+  return __gthrw_pthread_detach (__threadid);
+}
+static inline int
+__gthread_equal (__gthread_t __t1, __gthread_t __t2)
+{
+  return __gthrw_pthread_equal (__t1, __t2);
+}
+static inline __gthread_t
+__gthread_self (void)
+{
+  return __gthrw_pthread_self ();
+}
+static inline int
+__gthread_yield (void)
+{
+  return __gthrw_sched_yield ();
+}
+static inline int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+{
+  if (__gthread_active_p ())
+    return __gthrw_pthread_once (__once, __func);
+  else
+    return -1;
+}
+static inline int
+__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+{
+  return __gthrw_pthread_key_create (__key, __dtor);
+}
+static inline int
+__gthread_key_delete (__gthread_key_t __key)
+{
+  return __gthrw_pthread_key_delete (__key);
+}
+static inline void *
+__gthread_getspecific (__gthread_key_t __key)
+{
+  return __gthrw_pthread_getspecific (__key);
+}
+static inline int
+__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+{
+  return __gthrw_pthread_setspecific (__key, __ptr);
+}
+static inline int
+__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
+{
+  if (__gthread_active_p ())
+    return __gthrw_pthread_mutex_destroy (__mutex);
+  else
+    return 0;
+}
+static inline int
+__gthread_mutex_lock (__gthread_mutex_t *__mutex)
+{
+  if (__gthread_active_p ())
+    return __gthrw_pthread_mutex_lock (__mutex);
+  else
+    return 0;
+}
+static inline int
+__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+{
+  if (__gthread_active_p ())
+    return __gthrw_pthread_mutex_trylock (__mutex);
+  else
+    return 0;
+}
+static inline int
+__gthread_mutex_timedlock (__gthread_mutex_t *__mutex,
+      const __gthread_time_t *__abs_timeout)
+{
+  if (__gthread_active_p ())
+    return __gthrw_pthread_mutex_timedlock (__mutex, __abs_timeout);
+  else
+    return 0;
+}
+static inline int
+__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+{
+  if (__gthread_active_p ())
+    return __gthrw_pthread_mutex_unlock (__mutex);
+  else
+    return 0;
+}
+static inline int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+{
+  return __gthread_mutex_lock (__mutex);
+}
+static inline int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+{
+  return __gthread_mutex_trylock (__mutex);
+}
+static inline int
+__gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex,
+         const __gthread_time_t *__abs_timeout)
+{
+  return __gthread_mutex_timedlock (__mutex, __abs_timeout);
+}
+static inline int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+{
+  return __gthread_mutex_unlock (__mutex);
+}
+static inline int
+__gthread_cond_broadcast (__gthread_cond_t *__cond)
+{
+  return __gthrw_pthread_cond_broadcast (__cond);
+}
+static inline int
+__gthread_cond_signal (__gthread_cond_t *__cond)
+{
+  return __gthrw_pthread_cond_signal (__cond);
+}
+static inline int
+__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
+{
+  return __gthrw_pthread_cond_wait (__cond, __mutex);
+}
+static inline int
+__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
+     const __gthread_time_t *__abs_timeout)
+{
+  return __gthrw_pthread_cond_timedwait (__cond, __mutex, __abs_timeout);
+}
+static inline int
+__gthread_cond_wait_recursive (__gthread_cond_t *__cond,
+          __gthread_recursive_mutex_t *__mutex)
+{
+  return __gthread_cond_wait (__cond, __mutex);
+}
+static inline int
+__gthread_cond_timedwait_recursive (__gthread_cond_t *__cond,
+        __gthread_recursive_mutex_t *__mutex,
+        const __gthread_time_t *__abs_timeout)
+{
+  return __gthread_cond_timedwait (__cond, __mutex, __abs_timeout);
+}
+static inline int
+__gthread_cond_destroy (__gthread_cond_t* __cond)
+{
+  return __gthrw_pthread_cond_destroy (__cond);
+}
+typedef int _Atomic_word;
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+  static inline _Atomic_word
+  __exchange_and_add(volatile _Atomic_word* __mem, int __val)
+  { return __sync_fetch_and_add(__mem, __val); }
+  static inline void
+  __atomic_add(volatile _Atomic_word* __mem, int __val)
+  { __sync_fetch_and_add(__mem, __val); }
+  static inline _Atomic_word
+  __exchange_and_add_single(_Atomic_word* __mem, int __val)
+  {
+    _Atomic_word __result = *__mem;
+    *__mem += __val;
+    return __result;
+  }
+  static inline void
+  __atomic_add_single(_Atomic_word* __mem, int __val)
+  { *__mem += __val; }
+  static inline _Atomic_word
+  __attribute__ ((__unused__))
+  __exchange_and_add_dispatch(_Atomic_word* __mem, int __val)
+  {
+    if (__gthread_active_p())
+      return __exchange_and_add(__mem, __val);
+    else
+      return __exchange_and_add_single(__mem, __val);
+  }
+  static inline void
+  __attribute__ ((__unused__))
+  __atomic_add_dispatch(_Atomic_word* __mem, int __val)
+  {
+    if (__gthread_active_p())
+      __atomic_add(__mem, __val);
+    else
+      __atomic_add_single(__mem, __val);
+  }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    class basic_string
+    {
+      typedef typename _Alloc::template rebind<_CharT>::other _CharT_alloc_type;
+    public:
+      typedef _Traits traits_type;
+      typedef typename _Traits::char_type value_type;
+      typedef _Alloc allocator_type;
+      typedef typename _CharT_alloc_type::size_type size_type;
+      typedef typename _CharT_alloc_type::difference_type difference_type;
+      typedef typename _CharT_alloc_type::reference reference;
+      typedef typename _CharT_alloc_type::const_reference const_reference;
+      typedef typename _CharT_alloc_type::pointer pointer;
+      typedef typename _CharT_alloc_type::const_pointer const_pointer;
+      typedef __gnu_cxx::__normal_iterator<pointer, basic_string> iterator;
+      typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string>
+                                                            const_iterator;
+      typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+      typedef std::reverse_iterator<iterator> reverse_iterator;
+    private:
+      struct _Rep_base
+      {
+ size_type _M_length;
+ size_type _M_capacity;
+ _Atomic_word _M_refcount;
+      };
+      struct _Rep : _Rep_base
+      {
+ typedef typename _Alloc::template rebind<char>::other _Raw_bytes_alloc;
+ static const size_type _S_max_size;
+ static const _CharT _S_terminal;
+        static size_type _S_empty_rep_storage[];
+        static _Rep&
+        _S_empty_rep()
+        {
+   void* __p = reinterpret_cast<void*>(&_S_empty_rep_storage);
+   return *reinterpret_cast<_Rep*>(__p);
+ }
+        bool
+ _M_is_leaked() const
+        { return this->_M_refcount < 0; }
+        bool
+ _M_is_shared() const
+        { return this->_M_refcount > 0; }
+        void
+ _M_set_leaked()
+        { this->_M_refcount = -1; }
+        void
+ _M_set_sharable()
+        { this->_M_refcount = 0; }
+ void
+ _M_set_length_and_sharable(size_type __n)
+ {
+   if (__builtin_expect(this != &_S_empty_rep(), false))
+     {
+       this->_M_set_sharable();
+       this->_M_length = __n;
+       traits_type::assign(this->_M_refdata()[__n], _S_terminal);
+     }
+ }
+ _CharT*
+ _M_refdata() throw()
+ { return reinterpret_cast<_CharT*>(this + 1); }
+ _CharT*
+ _M_grab(const _Alloc& __alloc1, const _Alloc& __alloc2)
+ {
+   return (!_M_is_leaked() && __alloc1 == __alloc2)
+           ? _M_refcopy() : _M_clone(__alloc1);
+ }
+ static _Rep*
+ _S_create(size_type, size_type, const _Alloc&);
+ void
+ _M_dispose(const _Alloc& __a)
+ {
+   if (__builtin_expect(this != &_S_empty_rep(), false))
+     if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount,
+             -1) <= 0)
+       _M_destroy(__a);
+ }
+ void
+ _M_destroy(const _Alloc&) throw();
+ _CharT*
+ _M_refcopy() throw()
+ {
+   if (__builtin_expect(this != &_S_empty_rep(), false))
+            __gnu_cxx::__atomic_add_dispatch(&this->_M_refcount, 1);
+   return _M_refdata();
+ }
+ _CharT*
+ _M_clone(const _Alloc&, size_type __res = 0);
+      };
+      struct _Alloc_hider : _Alloc
+      {
+ _Alloc_hider(_CharT* __dat, const _Alloc& __a)
+ : _Alloc(__a), _M_p(__dat) { }
+ _CharT* _M_p;
+      };
+    public:
+      static const size_type npos = static_cast<size_type>(-1);
+    private:
+      mutable _Alloc_hider _M_dataplus;
+      _CharT*
+      _M_data() const
+      { return _M_dataplus._M_p; }
+      _CharT*
+      _M_data(_CharT* __p)
+      { return (_M_dataplus._M_p = __p); }
+      _Rep*
+      _M_rep() const
+      { return &((reinterpret_cast<_Rep*> (_M_data()))[-1]); }
+      iterator
+      _M_ibegin() const
+      { return iterator(_M_data()); }
+      iterator
+      _M_iend() const
+      { return iterator(_M_data() + this->size()); }
+      void
+      _M_leak()
+      {
+ if (!_M_rep()->_M_is_leaked())
+   _M_leak_hard();
+      }
+      size_type
+      _M_check(size_type __pos, const char* __s) const
+      {
+ if (__pos > this->size())
+   __throw_out_of_range((__s));
+ return __pos;
+      }
+      void
+      _M_check_length(size_type __n1, size_type __n2, const char* __s) const
+      {
+ if (this->max_size() - (this->size() - __n1) < __n2)
+   __throw_length_error((__s));
+      }
+      size_type
+      _M_limit(size_type __pos, size_type __off) const
+      {
+ const bool __testoff = __off < this->size() - __pos;
+ return __testoff ? __off : this->size() - __pos;
+      }
+      bool
+      _M_disjunct(const _CharT* __s) const
+      {
+ return (less<const _CharT*>()(__s, _M_data())
+  || less<const _CharT*>()(_M_data() + this->size(), __s));
+      }
+      static void
+      _M_copy(_CharT* __d, const _CharT* __s, size_type __n)
+      {
+ if (__n == 1)
+   traits_type::assign(*__d, *__s);
+ else
+   traits_type::copy(__d, __s, __n);
+      }
+      static void
+      _M_move(_CharT* __d, const _CharT* __s, size_type __n)
+      {
+ if (__n == 1)
+   traits_type::assign(*__d, *__s);
+ else
+   traits_type::move(__d, __s, __n);
+      }
+      static void
+      _M_assign(_CharT* __d, size_type __n, _CharT __c)
+      {
+ if (__n == 1)
+   traits_type::assign(*__d, __c);
+ else
+   traits_type::assign(__d, __n, __c);
+      }
+      template<class _Iterator>
+        static void
+        _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2)
+        {
+   for (; __k1 != __k2; ++__k1, ++__p)
+     traits_type::assign(*__p, *__k1);
+ }
+      static void
+      _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2)
+      { _S_copy_chars(__p, __k1.base(), __k2.base()); }
+      static void
+      _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2)
+      { _S_copy_chars(__p, __k1.base(), __k2.base()); }
+      static void
+      _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2)
+      { _M_copy(__p, __k1, __k2 - __k1); }
+      static void
+      _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2)
+      { _M_copy(__p, __k1, __k2 - __k1); }
+      static int
+      _S_compare(size_type __n1, size_type __n2)
+      {
+ const difference_type __d = difference_type(__n1 - __n2);
+ if (__d > __gnu_cxx::__numeric_traits<int>::__max)
+   return __gnu_cxx::__numeric_traits<int>::__max;
+ else if (__d < __gnu_cxx::__numeric_traits<int>::__min)
+   return __gnu_cxx::__numeric_traits<int>::__min;
+ else
+   return int(__d);
+      }
+      void
+      _M_mutate(size_type __pos, size_type __len1, size_type __len2);
+      void
+      _M_leak_hard();
+      static _Rep&
+      _S_empty_rep()
+      { return _Rep::_S_empty_rep(); }
+    public:
+      inline
+      basic_string();
+      explicit
+      basic_string(const _Alloc& __a);
+      basic_string(const basic_string& __str);
+      basic_string(const basic_string& __str, size_type __pos,
+     size_type __n = npos);
+      basic_string(const basic_string& __str, size_type __pos,
+     size_type __n, const _Alloc& __a);
+      basic_string(const _CharT* __s, size_type __n,
+     const _Alloc& __a = _Alloc());
+      basic_string(const _CharT* __s, const _Alloc& __a = _Alloc());
+      basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc());
+      template<class _InputIterator>
+        basic_string(_InputIterator __beg, _InputIterator __end,
+       const _Alloc& __a = _Alloc());
+      ~basic_string()
+      { _M_rep()->_M_dispose(this->get_allocator()); }
+      basic_string&
+      operator=(const basic_string& __str)
+      { return this->assign(__str); }
+      basic_string&
+      operator=(const _CharT* __s)
+      { return this->assign(__s); }
+      basic_string&
+      operator=(_CharT __c)
+      {
+ this->assign(1, __c);
+ return *this;
+      }
+      iterator
+      begin()
+      {
+ _M_leak();
+ return iterator(_M_data());
+      }
+      const_iterator
+      begin() const
+      { return const_iterator(_M_data()); }
+      iterator
+      end()
+      {
+ _M_leak();
+ return iterator(_M_data() + this->size());
+      }
+      const_iterator
+      end() const
+      { return const_iterator(_M_data() + this->size()); }
+      reverse_iterator
+      rbegin()
+      { return reverse_iterator(this->end()); }
+      const_reverse_iterator
+      rbegin() const
+      { return const_reverse_iterator(this->end()); }
+      reverse_iterator
+      rend()
+      { return reverse_iterator(this->begin()); }
+      const_reverse_iterator
+      rend() const
+      { return const_reverse_iterator(this->begin()); }
+    public:
+      size_type
+      size() const
+      { return _M_rep()->_M_length; }
+      size_type
+      length() const
+      { return _M_rep()->_M_length; }
+      size_type
+      max_size() const
+      { return _Rep::_S_max_size; }
+      void
+      resize(size_type __n, _CharT __c);
+      void
+      resize(size_type __n)
+      { this->resize(__n, _CharT()); }
+      size_type
+      capacity() const
+      { return _M_rep()->_M_capacity; }
+      void
+      reserve(size_type __res_arg = 0);
+      void
+      clear()
+      { _M_mutate(0, this->size(), 0); }
+      bool
+      empty() const
+      { return this->size() == 0; }
+      const_reference
+      operator[] (size_type __pos) const
+      {
+ ;
+ return _M_data()[__pos];
+      }
+      reference
+      operator[](size_type __pos)
+      {
+ ;
+ ;
+ _M_leak();
+ return _M_data()[__pos];
+      }
+      const_reference
+      at(size_type __n) const
+      {
+ if (__n >= this->size())
+   __throw_out_of_range(("basic_string::at"));
+ return _M_data()[__n];
+      }
+      reference
+      at(size_type __n)
+      {
+ if (__n >= size())
+   __throw_out_of_range(("basic_string::at"));
+ _M_leak();
+ return _M_data()[__n];
+      }
+      basic_string&
+      operator+=(const basic_string& __str)
+      { return this->append(__str); }
+      basic_string&
+      operator+=(const _CharT* __s)
+      { return this->append(__s); }
+      basic_string&
+      operator+=(_CharT __c)
+      {
+ this->push_back(__c);
+ return *this;
+      }
+      basic_string&
+      append(const basic_string& __str);
+      basic_string&
+      append(const basic_string& __str, size_type __pos, size_type __n);
+      basic_string&
+      append(const _CharT* __s, size_type __n);
+      basic_string&
+      append(const _CharT* __s)
+      {
+ ;
+ return this->append(__s, traits_type::length(__s));
+      }
+      basic_string&
+      append(size_type __n, _CharT __c);
+      template<class _InputIterator>
+        basic_string&
+        append(_InputIterator __first, _InputIterator __last)
+        { return this->replace(_M_iend(), _M_iend(), __first, __last); }
+      void
+      push_back(_CharT __c)
+      {
+ const size_type __len = 1 + this->size();
+ if (__len > this->capacity() || _M_rep()->_M_is_shared())
+   this->reserve(__len);
+ traits_type::assign(_M_data()[this->size()], __c);
+ _M_rep()->_M_set_length_and_sharable(__len);
+      }
+      basic_string&
+      assign(const basic_string& __str);
+      basic_string&
+      assign(const basic_string& __str, size_type __pos, size_type __n)
+      { return this->assign(__str._M_data()
+       + __str._M_check(__pos, "basic_string::assign"),
+       __str._M_limit(__pos, __n)); }
+      basic_string&
+      assign(const _CharT* __s, size_type __n);
+      basic_string&
+      assign(const _CharT* __s)
+      {
+ ;
+ return this->assign(__s, traits_type::length(__s));
+      }
+      basic_string&
+      assign(size_type __n, _CharT __c)
+      { return _M_replace_aux(size_type(0), this->size(), __n, __c); }
+      template<class _InputIterator>
+        basic_string&
+        assign(_InputIterator __first, _InputIterator __last)
+        { return this->replace(_M_ibegin(), _M_iend(), __first, __last); }
+      void
+      insert(iterator __p, size_type __n, _CharT __c)
+      { this->replace(__p, __p, __n, __c); }
+      template<class _InputIterator>
+        void
+        insert(iterator __p, _InputIterator __beg, _InputIterator __end)
+        { this->replace(__p, __p, __beg, __end); }
+      basic_string&
+      insert(size_type __pos1, const basic_string& __str)
+      { return this->insert(__pos1, __str, size_type(0), __str.size()); }
+      basic_string&
+      insert(size_type __pos1, const basic_string& __str,
+      size_type __pos2, size_type __n)
+      { return this->insert(__pos1, __str._M_data()
+       + __str._M_check(__pos2, "basic_string::insert"),
+       __str._M_limit(__pos2, __n)); }
+      basic_string&
+      insert(size_type __pos, const _CharT* __s, size_type __n);
+      basic_string&
+      insert(size_type __pos, const _CharT* __s)
+      {
+ ;
+ return this->insert(__pos, __s, traits_type::length(__s));
+      }
+      basic_string&
+      insert(size_type __pos, size_type __n, _CharT __c)
+      { return _M_replace_aux(_M_check(__pos, "basic_string::insert"),
+         size_type(0), __n, __c); }
+      iterator
+      insert(iterator __p, _CharT __c)
+      {
+ ;
+ const size_type __pos = __p - _M_ibegin();
+ _M_replace_aux(__pos, size_type(0), size_type(1), __c);
+ _M_rep()->_M_set_leaked();
+ return iterator(_M_data() + __pos);
+      }
+      basic_string&
+      erase(size_type __pos = 0, size_type __n = npos)
+      {
+ _M_mutate(_M_check(__pos, "basic_string::erase"),
+    _M_limit(__pos, __n), size_type(0));
+ return *this;
+      }
+      iterator
+      erase(iterator __position)
+      {
+ ;
+ const size_type __pos = __position - _M_ibegin();
+ _M_mutate(__pos, size_type(1), size_type(0));
+ _M_rep()->_M_set_leaked();
+ return iterator(_M_data() + __pos);
+      }
+      iterator
+      erase(iterator __first, iterator __last);
+      basic_string&
+      replace(size_type __pos, size_type __n, const basic_string& __str)
+      { return this->replace(__pos, __n, __str._M_data(), __str.size()); }
+      basic_string&
+      replace(size_type __pos1, size_type __n1, const basic_string& __str,
+       size_type __pos2, size_type __n2)
+      { return this->replace(__pos1, __n1, __str._M_data()
+        + __str._M_check(__pos2, "basic_string::replace"),
+        __str._M_limit(__pos2, __n2)); }
+      basic_string&
+      replace(size_type __pos, size_type __n1, const _CharT* __s,
+       size_type __n2);
+      basic_string&
+      replace(size_type __pos, size_type __n1, const _CharT* __s)
+      {
+ ;
+ return this->replace(__pos, __n1, __s, traits_type::length(__s));
+      }
+      basic_string&
+      replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
+      { return _M_replace_aux(_M_check(__pos, "basic_string::replace"),
+         _M_limit(__pos, __n1), __n2, __c); }
+      basic_string&
+      replace(iterator __i1, iterator __i2, const basic_string& __str)
+      { return this->replace(__i1, __i2, __str._M_data(), __str.size()); }
+      basic_string&
+      replace(iterator __i1, iterator __i2, const _CharT* __s, size_type __n)
+      {
+ ;
+ return this->replace(__i1 - _M_ibegin(), __i2 - __i1, __s, __n);
+      }
+      basic_string&
+      replace(iterator __i1, iterator __i2, const _CharT* __s)
+      {
+ ;
+ return this->replace(__i1, __i2, __s, traits_type::length(__s));
+      }
+      basic_string&
+      replace(iterator __i1, iterator __i2, size_type __n, _CharT __c)
+      {
+ ;
+ return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __c);
+      }
+      template<class _InputIterator>
+        basic_string&
+        replace(iterator __i1, iterator __i2,
+  _InputIterator __k1, _InputIterator __k2)
+        {
+   ;
+   ;
+   typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+   return _M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral());
+ }
+      basic_string&
+      replace(iterator __i1, iterator __i2, _CharT* __k1, _CharT* __k2)
+      {
+ ;
+ ;
+ return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
+        __k1, __k2 - __k1);
+      }
+      basic_string&
+      replace(iterator __i1, iterator __i2,
+       const _CharT* __k1, const _CharT* __k2)
+      {
+ ;
+ ;
+ return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
+        __k1, __k2 - __k1);
+      }
+      basic_string&
+      replace(iterator __i1, iterator __i2, iterator __k1, iterator __k2)
+      {
+ ;
+ ;
+ return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
+        __k1.base(), __k2 - __k1);
+      }
+      basic_string&
+      replace(iterator __i1, iterator __i2,
+       const_iterator __k1, const_iterator __k2)
+      {
+ ;
+ ;
+ return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
+        __k1.base(), __k2 - __k1);
+      }
+    private:
+      template<class _Integer>
+ basic_string&
+ _M_replace_dispatch(iterator __i1, iterator __i2, _Integer __n,
+       _Integer __val, __true_type)
+        { return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __val); }
+      template<class _InputIterator>
+ basic_string&
+ _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1,
+       _InputIterator __k2, __false_type);
+      basic_string&
+      _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
+       _CharT __c);
+      basic_string&
+      _M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s,
+        size_type __n2);
+      template<class _InIterator>
+        static _CharT*
+        _S_construct_aux(_InIterator __beg, _InIterator __end,
+    const _Alloc& __a, __false_type)
+ {
+          typedef typename iterator_traits<_InIterator>::iterator_category _Tag;
+          return _S_construct(__beg, __end, __a, _Tag());
+ }
+      template<class _Integer>
+        static _CharT*
+        _S_construct_aux(_Integer __beg, _Integer __end,
+    const _Alloc& __a, __true_type)
+        { return _S_construct(static_cast<size_type>(__beg), __end, __a); }
+      template<class _InIterator>
+        static _CharT*
+        _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a)
+ {
+   typedef typename std::__is_integer<_InIterator>::__type _Integral;
+   return _S_construct_aux(__beg, __end, __a, _Integral());
+        }
+      template<class _InIterator>
+        static _CharT*
+         _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a,
+        input_iterator_tag);
+      template<class _FwdIterator>
+        static _CharT*
+        _S_construct(_FwdIterator __beg, _FwdIterator __end, const _Alloc& __a,
+       forward_iterator_tag);
+      static _CharT*
+      _S_construct(size_type __req, _CharT __c, const _Alloc& __a);
+    public:
+      size_type
+      copy(_CharT* __s, size_type __n, size_type __pos = 0) const;
+      void
+      swap(basic_string& __s);
+      const _CharT*
+      c_str() const
+      { return _M_data(); }
+      const _CharT*
+      data() const
+      { return _M_data(); }
+      allocator_type
+      get_allocator() const
+      { return _M_dataplus; }
+      size_type
+      find(const _CharT* __s, size_type __pos, size_type __n) const;
+      size_type
+      find(const basic_string& __str, size_type __pos = 0) const
+      { return this->find(__str.data(), __pos, __str.size()); }
+      size_type
+      find(const _CharT* __s, size_type __pos = 0) const
+      {
+ ;
+ return this->find(__s, __pos, traits_type::length(__s));
+      }
+      size_type
+      find(_CharT __c, size_type __pos = 0) const;
+      size_type
+      rfind(const basic_string& __str, size_type __pos = npos) const
+      { return this->rfind(__str.data(), __pos, __str.size()); }
+      size_type
+      rfind(const _CharT* __s, size_type __pos, size_type __n) const;
+      size_type
+      rfind(const _CharT* __s, size_type __pos = npos) const
+      {
+ ;
+ return this->rfind(__s, __pos, traits_type::length(__s));
+      }
+      size_type
+      rfind(_CharT __c, size_type __pos = npos) const;
+      size_type
+      find_first_of(const basic_string& __str, size_type __pos = 0) const
+      { return this->find_first_of(__str.data(), __pos, __str.size()); }
+      size_type
+      find_first_of(const _CharT* __s, size_type __pos, size_type __n) const;
+      size_type
+      find_first_of(const _CharT* __s, size_type __pos = 0) const
+      {
+ ;
+ return this->find_first_of(__s, __pos, traits_type::length(__s));
+      }
+      size_type
+      find_first_of(_CharT __c, size_type __pos = 0) const
+      { return this->find(__c, __pos); }
+      size_type
+      find_last_of(const basic_string& __str, size_type __pos = npos) const
+      { return this->find_last_of(__str.data(), __pos, __str.size()); }
+      size_type
+      find_last_of(const _CharT* __s, size_type __pos, size_type __n) const;
+      size_type
+      find_last_of(const _CharT* __s, size_type __pos = npos) const
+      {
+ ;
+ return this->find_last_of(__s, __pos, traits_type::length(__s));
+      }
+      size_type
+      find_last_of(_CharT __c, size_type __pos = npos) const
+      { return this->rfind(__c, __pos); }
+      size_type
+      find_first_not_of(const basic_string& __str, size_type __pos = 0) const
+      { return this->find_first_not_of(__str.data(), __pos, __str.size()); }
+      size_type
+      find_first_not_of(const _CharT* __s, size_type __pos,
+   size_type __n) const;
+      size_type
+      find_first_not_of(const _CharT* __s, size_type __pos = 0) const
+      {
+ ;
+ return this->find_first_not_of(__s, __pos, traits_type::length(__s));
+      }
+      size_type
+      find_first_not_of(_CharT __c, size_type __pos = 0) const;
+      size_type
+      find_last_not_of(const basic_string& __str, size_type __pos = npos) const
+      { return this->find_last_not_of(__str.data(), __pos, __str.size()); }
+      size_type
+      find_last_not_of(const _CharT* __s, size_type __pos,
+         size_type __n) const;
+      size_type
+      find_last_not_of(const _CharT* __s, size_type __pos = npos) const
+      {
+ ;
+ return this->find_last_not_of(__s, __pos, traits_type::length(__s));
+      }
+      size_type
+      find_last_not_of(_CharT __c, size_type __pos = npos) const;
+      basic_string
+      substr(size_type __pos = 0, size_type __n = npos) const
+      { return basic_string(*this,
+       _M_check(__pos, "basic_string::substr"), __n); }
+      int
+      compare(const basic_string& __str) const
+      {
+ const size_type __size = this->size();
+ const size_type __osize = __str.size();
+ const size_type __len = std::min(__size, __osize);
+ int __r = traits_type::compare(_M_data(), __str.data(), __len);
+ if (!__r)
+   __r = _S_compare(__size, __osize);
+ return __r;
+      }
+      int
+      compare(size_type __pos, size_type __n, const basic_string& __str) const;
+      int
+      compare(size_type __pos1, size_type __n1, const basic_string& __str,
+       size_type __pos2, size_type __n2) const;
+      int
+      compare(const _CharT* __s) const;
+      int
+      compare(size_type __pos, size_type __n1, const _CharT* __s) const;
+      int
+      compare(size_type __pos, size_type __n1, const _CharT* __s,
+       size_type __n2) const;
+  };
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline basic_string<_CharT, _Traits, _Alloc>::
+    basic_string()
+    : _M_dataplus(_S_empty_rep()._M_refdata(), _Alloc()) { }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>
+    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    {
+      basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
+      __str.append(__rhs);
+      return __str;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT,_Traits,_Alloc>
+    operator+(const _CharT* __lhs,
+       const basic_string<_CharT,_Traits,_Alloc>& __rhs);
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT,_Traits,_Alloc>
+    operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs);
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline basic_string<_CharT, _Traits, _Alloc>
+    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+      const _CharT* __rhs)
+    {
+      basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
+      __str.append(__rhs);
+      return __str;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline basic_string<_CharT, _Traits, _Alloc>
+    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs)
+    {
+      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+      typedef typename __string_type::size_type __size_type;
+      __string_type __str(__lhs);
+      __str.append(__size_type(1), __rhs);
+      return __str;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return __lhs.compare(__rhs) == 0; }
+  template<typename _CharT>
+    inline
+    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, bool>::__type
+    operator==(const basic_string<_CharT>& __lhs,
+        const basic_string<_CharT>& __rhs)
+    { return (__lhs.size() == __rhs.size()
+       && !std::char_traits<_CharT>::compare(__lhs.data(), __rhs.data(),
+          __lhs.size())); }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator==(const _CharT* __lhs,
+        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return __rhs.compare(__lhs) == 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+        const _CharT* __rhs)
+    { return __lhs.compare(__rhs) == 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return !(__lhs == __rhs); }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator!=(const _CharT* __lhs,
+        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return !(__lhs == __rhs); }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+        const _CharT* __rhs)
+    { return !(__lhs == __rhs); }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return __lhs.compare(__rhs) < 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+       const _CharT* __rhs)
+    { return __lhs.compare(__rhs) < 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator<(const _CharT* __lhs,
+       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return __rhs.compare(__lhs) > 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return __lhs.compare(__rhs) > 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+       const _CharT* __rhs)
+    { return __lhs.compare(__rhs) > 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator>(const _CharT* __lhs,
+       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return __rhs.compare(__lhs) < 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return __lhs.compare(__rhs) <= 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+        const _CharT* __rhs)
+    { return __lhs.compare(__rhs) <= 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator<=(const _CharT* __lhs,
+        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return __rhs.compare(__lhs) >= 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return __lhs.compare(__rhs) >= 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+        const _CharT* __rhs)
+    { return __lhs.compare(__rhs) >= 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline bool
+    operator>=(const _CharT* __lhs,
+      const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { return __rhs.compare(__lhs) <= 0; }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline void
+    swap(basic_string<_CharT, _Traits, _Alloc>& __lhs,
+  basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    { __lhs.swap(__rhs); }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_istream<_CharT, _Traits>&
+    operator>>(basic_istream<_CharT, _Traits>& __is,
+        basic_string<_CharT, _Traits, _Alloc>& __str);
+  template<>
+    basic_istream<char>&
+    operator>>(basic_istream<char>& __is, basic_string<char>& __str);
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline basic_ostream<_CharT, _Traits>&
+    operator<<(basic_ostream<_CharT, _Traits>& __os,
+        const basic_string<_CharT, _Traits, _Alloc>& __str)
+    {
+      return __ostream_insert(__os, __str.data(), __str.size());
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_istream<_CharT, _Traits>&
+    getline(basic_istream<_CharT, _Traits>& __is,
+     basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim);
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    inline basic_istream<_CharT, _Traits>&
+    getline(basic_istream<_CharT, _Traits>& __is,
+     basic_string<_CharT, _Traits, _Alloc>& __str)
+    { return getline(__is, __str, __is.widen('\n')); }
+  template<>
+    basic_istream<char>&
+    getline(basic_istream<char>& __in, basic_string<char>& __str,
+     char __delim);
+  template<>
+    basic_istream<wchar_t>&
+    getline(basic_istream<wchar_t>& __in, basic_string<wchar_t>& __str,
+     wchar_t __delim);
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    const typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    _Rep::_S_max_size = (((npos - sizeof(_Rep_base))/sizeof(_CharT)) - 1) / 4;
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    const _CharT
+    basic_string<_CharT, _Traits, _Alloc>::
+    _Rep::_S_terminal = _CharT();
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    const typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::npos;
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_empty_rep_storage[
+    (sizeof(_Rep_base) + sizeof(_CharT) + sizeof(size_type) - 1) /
+      sizeof(size_type)];
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    template<typename _InIterator>
+      _CharT*
+      basic_string<_CharT, _Traits, _Alloc>::
+      _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a,
+     input_iterator_tag)
+      {
+ if (__beg == __end && __a == _Alloc())
+   return _S_empty_rep()._M_refdata();
+ _CharT __buf[128];
+ size_type __len = 0;
+ while (__beg != __end && __len < sizeof(__buf) / sizeof(_CharT))
+   {
+     __buf[__len++] = *__beg;
+     ++__beg;
+   }
+ _Rep* __r = _Rep::_S_create(__len, size_type(0), __a);
+ _M_copy(__r->_M_refdata(), __buf, __len);
+ try
+   {
+     while (__beg != __end)
+       {
+  if (__len == __r->_M_capacity)
+    {
+      _Rep* __another = _Rep::_S_create(__len + 1, __len, __a);
+      _M_copy(__another->_M_refdata(), __r->_M_refdata(), __len);
+      __r->_M_destroy(__a);
+      __r = __another;
+    }
+  __r->_M_refdata()[__len++] = *__beg;
+  ++__beg;
+       }
+   }
+ catch(...)
+   {
+     __r->_M_destroy(__a);
+     throw;
+   }
+ __r->_M_set_length_and_sharable(__len);
+ return __r->_M_refdata();
+      }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    template <typename _InIterator>
+      _CharT*
+      basic_string<_CharT, _Traits, _Alloc>::
+      _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a,
+     forward_iterator_tag)
+      {
+ if (__beg == __end && __a == _Alloc())
+   return _S_empty_rep()._M_refdata();
+ if (__builtin_expect(__gnu_cxx::__is_null_pointer(__beg)
+        && __beg != __end, 0))
+   __throw_logic_error(("basic_string::_S_construct NULL not valid"));
+ const size_type __dnew = static_cast<size_type>(std::distance(__beg,
+              __end));
+ _Rep* __r = _Rep::_S_create(__dnew, size_type(0), __a);
+ try
+   { _S_copy_chars(__r->_M_refdata(), __beg, __end); }
+ catch(...)
+   {
+     __r->_M_destroy(__a);
+     throw;
+   }
+ __r->_M_set_length_and_sharable(__dnew);
+ return __r->_M_refdata();
+      }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    _CharT*
+    basic_string<_CharT, _Traits, _Alloc>::
+    _S_construct(size_type __n, _CharT __c, const _Alloc& __a)
+    {
+      if (__n == 0 && __a == _Alloc())
+ return _S_empty_rep()._M_refdata();
+      _Rep* __r = _Rep::_S_create(__n, size_type(0), __a);
+      if (__n)
+ _M_assign(__r->_M_refdata(), __n, __c);
+      __r->_M_set_length_and_sharable(__n);
+      return __r->_M_refdata();
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>::
+    basic_string(const basic_string& __str)
+    : _M_dataplus(__str._M_rep()->_M_grab(_Alloc(__str.get_allocator()),
+       __str.get_allocator()),
+    __str.get_allocator())
+    { }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>::
+    basic_string(const _Alloc& __a)
+    : _M_dataplus(_S_construct(size_type(), _CharT(), __a), __a)
+    { }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>::
+    basic_string(const basic_string& __str, size_type __pos, size_type __n)
+    : _M_dataplus(_S_construct(__str._M_data()
+          + __str._M_check(__pos,
+      "basic_string::basic_string"),
+          __str._M_data() + __str._M_limit(__pos, __n)
+          + __pos, _Alloc()), _Alloc())
+    { }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>::
+    basic_string(const basic_string& __str, size_type __pos,
+   size_type __n, const _Alloc& __a)
+    : _M_dataplus(_S_construct(__str._M_data()
+          + __str._M_check(__pos,
+      "basic_string::basic_string"),
+          __str._M_data() + __str._M_limit(__pos, __n)
+          + __pos, __a), __a)
+    { }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>::
+    basic_string(const _CharT* __s, size_type __n, const _Alloc& __a)
+    : _M_dataplus(_S_construct(__s, __s + __n, __a), __a)
+    { }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>::
+    basic_string(const _CharT* __s, const _Alloc& __a)
+    : _M_dataplus(_S_construct(__s, __s ? __s + traits_type::length(__s) :
+          __s + npos, __a), __a)
+    { }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>::
+    basic_string(size_type __n, _CharT __c, const _Alloc& __a)
+    : _M_dataplus(_S_construct(__n, __c, __a), __a)
+    { }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    template<typename _InputIterator>
+    basic_string<_CharT, _Traits, _Alloc>::
+    basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a)
+    : _M_dataplus(_S_construct(__beg, __end, __a), __a)
+    { }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>&
+    basic_string<_CharT, _Traits, _Alloc>::
+    assign(const basic_string& __str)
+    {
+      if (_M_rep() != __str._M_rep())
+ {
+   const allocator_type __a = this->get_allocator();
+   _CharT* __tmp = __str._M_rep()->_M_grab(__a, __str.get_allocator());
+   _M_rep()->_M_dispose(__a);
+   _M_data(__tmp);
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>&
+    basic_string<_CharT, _Traits, _Alloc>::
+    assign(const _CharT* __s, size_type __n)
+    {
+      ;
+      _M_check_length(this->size(), __n, "basic_string::assign");
+      if (_M_disjunct(__s) || _M_rep()->_M_is_shared())
+ return _M_replace_safe(size_type(0), this->size(), __s, __n);
+      else
+ {
+   const size_type __pos = __s - _M_data();
+   if (__pos >= __n)
+     _M_copy(_M_data(), __s, __n);
+   else if (__pos)
+     _M_move(_M_data(), __s, __n);
+   _M_rep()->_M_set_length_and_sharable(__n);
+   return *this;
+ }
+     }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>&
+    basic_string<_CharT, _Traits, _Alloc>::
+    append(size_type __n, _CharT __c)
+    {
+      if (__n)
+ {
+   _M_check_length(size_type(0), __n, "basic_string::append");
+   const size_type __len = __n + this->size();
+   if (__len > this->capacity() || _M_rep()->_M_is_shared())
+     this->reserve(__len);
+   _M_assign(_M_data() + this->size(), __n, __c);
+   _M_rep()->_M_set_length_and_sharable(__len);
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>&
+    basic_string<_CharT, _Traits, _Alloc>::
+    append(const _CharT* __s, size_type __n)
+    {
+      ;
+      if (__n)
+ {
+   _M_check_length(size_type(0), __n, "basic_string::append");
+   const size_type __len = __n + this->size();
+   if (__len > this->capacity() || _M_rep()->_M_is_shared())
+     {
+       if (_M_disjunct(__s))
+  this->reserve(__len);
+       else
+  {
+    const size_type __off = __s - _M_data();
+    this->reserve(__len);
+    __s = _M_data() + __off;
+  }
+     }
+   _M_copy(_M_data() + this->size(), __s, __n);
+   _M_rep()->_M_set_length_and_sharable(__len);
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>&
+    basic_string<_CharT, _Traits, _Alloc>::
+    append(const basic_string& __str)
+    {
+      const size_type __size = __str.size();
+      if (__size)
+ {
+   const size_type __len = __size + this->size();
+   if (__len > this->capacity() || _M_rep()->_M_is_shared())
+     this->reserve(__len);
+   _M_copy(_M_data() + this->size(), __str._M_data(), __size);
+   _M_rep()->_M_set_length_and_sharable(__len);
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>&
+    basic_string<_CharT, _Traits, _Alloc>::
+    append(const basic_string& __str, size_type __pos, size_type __n)
+    {
+      __str._M_check(__pos, "basic_string::append");
+      __n = __str._M_limit(__pos, __n);
+      if (__n)
+ {
+   const size_type __len = __n + this->size();
+   if (__len > this->capacity() || _M_rep()->_M_is_shared())
+     this->reserve(__len);
+   _M_copy(_M_data() + this->size(), __str._M_data() + __pos, __n);
+   _M_rep()->_M_set_length_and_sharable(__len);
+ }
+      return *this;
+    }
+   template<typename _CharT, typename _Traits, typename _Alloc>
+     basic_string<_CharT, _Traits, _Alloc>&
+     basic_string<_CharT, _Traits, _Alloc>::
+     insert(size_type __pos, const _CharT* __s, size_type __n)
+     {
+       ;
+       _M_check(__pos, "basic_string::insert");
+       _M_check_length(size_type(0), __n, "basic_string::insert");
+       if (_M_disjunct(__s) || _M_rep()->_M_is_shared())
+         return _M_replace_safe(__pos, size_type(0), __s, __n);
+       else
+         {
+           const size_type __off = __s - _M_data();
+           _M_mutate(__pos, 0, __n);
+           __s = _M_data() + __off;
+           _CharT* __p = _M_data() + __pos;
+           if (__s + __n <= __p)
+             _M_copy(__p, __s, __n);
+           else if (__s >= __p)
+             _M_copy(__p, __s + __n, __n);
+           else
+             {
+        const size_type __nleft = __p - __s;
+               _M_copy(__p, __s, __nleft);
+               _M_copy(__p + __nleft, __p + __n, __n - __nleft);
+             }
+           return *this;
+         }
+     }
+   template<typename _CharT, typename _Traits, typename _Alloc>
+     typename basic_string<_CharT, _Traits, _Alloc>::iterator
+     basic_string<_CharT, _Traits, _Alloc>::
+     erase(iterator __first, iterator __last)
+     {
+       ;
+       const size_type __size = __last - __first;
+       if (__size)
+  {
+    const size_type __pos = __first - _M_ibegin();
+    _M_mutate(__pos, __size, size_type(0));
+    _M_rep()->_M_set_leaked();
+    return iterator(_M_data() + __pos);
+  }
+       else
+  return __first;
+     }
+   template<typename _CharT, typename _Traits, typename _Alloc>
+     basic_string<_CharT, _Traits, _Alloc>&
+     basic_string<_CharT, _Traits, _Alloc>::
+     replace(size_type __pos, size_type __n1, const _CharT* __s,
+      size_type __n2)
+     {
+       ;
+       _M_check(__pos, "basic_string::replace");
+       __n1 = _M_limit(__pos, __n1);
+       _M_check_length(__n1, __n2, "basic_string::replace");
+       bool __left;
+       if (_M_disjunct(__s) || _M_rep()->_M_is_shared())
+         return _M_replace_safe(__pos, __n1, __s, __n2);
+       else if ((__left = __s + __n2 <= _M_data() + __pos)
+  || _M_data() + __pos + __n1 <= __s)
+  {
+    size_type __off = __s - _M_data();
+    __left ? __off : (__off += __n2 - __n1);
+    _M_mutate(__pos, __n1, __n2);
+    _M_copy(_M_data() + __pos, _M_data() + __off, __n2);
+    return *this;
+  }
+       else
+  {
+    const basic_string __tmp(__s, __n2);
+    return _M_replace_safe(__pos, __n1, __tmp._M_data(), __n2);
+  }
+     }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    void
+    basic_string<_CharT, _Traits, _Alloc>::_Rep::
+    _M_destroy(const _Alloc& __a) throw ()
+    {
+      const size_type __size = sizeof(_Rep_base) +
+                        (this->_M_capacity + 1) * sizeof(_CharT);
+      _Raw_bytes_alloc(__a).deallocate(reinterpret_cast<char*>(this), __size);
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    void
+    basic_string<_CharT, _Traits, _Alloc>::
+    _M_leak_hard()
+    {
+      if (_M_rep() == &_S_empty_rep())
+ return;
+      if (_M_rep()->_M_is_shared())
+ _M_mutate(0, 0, 0);
+      _M_rep()->_M_set_leaked();
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    void
+    basic_string<_CharT, _Traits, _Alloc>::
+    _M_mutate(size_type __pos, size_type __len1, size_type __len2)
+    {
+      const size_type __old_size = this->size();
+      const size_type __new_size = __old_size + __len2 - __len1;
+      const size_type __how_much = __old_size - __pos - __len1;
+      if (__new_size > this->capacity() || _M_rep()->_M_is_shared())
+ {
+   const allocator_type __a = get_allocator();
+   _Rep* __r = _Rep::_S_create(__new_size, this->capacity(), __a);
+   if (__pos)
+     _M_copy(__r->_M_refdata(), _M_data(), __pos);
+   if (__how_much)
+     _M_copy(__r->_M_refdata() + __pos + __len2,
+      _M_data() + __pos + __len1, __how_much);
+   _M_rep()->_M_dispose(__a);
+   _M_data(__r->_M_refdata());
+ }
+      else if (__how_much && __len1 != __len2)
+ {
+   _M_move(_M_data() + __pos + __len2,
+    _M_data() + __pos + __len1, __how_much);
+ }
+      _M_rep()->_M_set_length_and_sharable(__new_size);
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    void
+    basic_string<_CharT, _Traits, _Alloc>::
+    reserve(size_type __res)
+    {
+      if (__res != this->capacity() || _M_rep()->_M_is_shared())
+        {
+   if (__res < this->size())
+     __res = this->size();
+   const allocator_type __a = get_allocator();
+   _CharT* __tmp = _M_rep()->_M_clone(__a, __res - this->size());
+   _M_rep()->_M_dispose(__a);
+   _M_data(__tmp);
+        }
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    void
+    basic_string<_CharT, _Traits, _Alloc>::
+    swap(basic_string& __s)
+    {
+      if (_M_rep()->_M_is_leaked())
+ _M_rep()->_M_set_sharable();
+      if (__s._M_rep()->_M_is_leaked())
+ __s._M_rep()->_M_set_sharable();
+      if (this->get_allocator() == __s.get_allocator())
+ {
+   _CharT* __tmp = _M_data();
+   _M_data(__s._M_data());
+   __s._M_data(__tmp);
+ }
+      else
+ {
+   const basic_string __tmp1(_M_ibegin(), _M_iend(),
+        __s.get_allocator());
+   const basic_string __tmp2(__s._M_ibegin(), __s._M_iend(),
+        this->get_allocator());
+   *this = __tmp2;
+   __s = __tmp1;
+ }
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::_Rep*
+    basic_string<_CharT, _Traits, _Alloc>::_Rep::
+    _S_create(size_type __capacity, size_type __old_capacity,
+       const _Alloc& __alloc)
+    {
+      if (__capacity > _S_max_size)
+ __throw_length_error(("basic_string::_S_create"));
+      const size_type __pagesize = 4096;
+      const size_type __malloc_header_size = 4 * sizeof(void*);
+      if (__capacity > __old_capacity && __capacity < 2 * __old_capacity)
+ __capacity = 2 * __old_capacity;
+      size_type __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);
+      const size_type __adj_size = __size + __malloc_header_size;
+      if (__adj_size > __pagesize && __capacity > __old_capacity)
+ {
+   const size_type __extra = __pagesize - __adj_size % __pagesize;
+   __capacity += __extra / sizeof(_CharT);
+   if (__capacity > _S_max_size)
+     __capacity = _S_max_size;
+   __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);
+ }
+      void* __place = _Raw_bytes_alloc(__alloc).allocate(__size);
+      _Rep *__p = new (__place) _Rep;
+      __p->_M_capacity = __capacity;
+      __p->_M_set_sharable();
+      return __p;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    _CharT*
+    basic_string<_CharT, _Traits, _Alloc>::_Rep::
+    _M_clone(const _Alloc& __alloc, size_type __res)
+    {
+      const size_type __requested_cap = this->_M_length + __res;
+      _Rep* __r = _Rep::_S_create(__requested_cap, this->_M_capacity,
+      __alloc);
+      if (this->_M_length)
+ _M_copy(__r->_M_refdata(), _M_refdata(), this->_M_length);
+      __r->_M_set_length_and_sharable(this->_M_length);
+      return __r->_M_refdata();
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    void
+    basic_string<_CharT, _Traits, _Alloc>::
+    resize(size_type __n, _CharT __c)
+    {
+      const size_type __size = this->size();
+      _M_check_length(__size, __n, "basic_string::resize");
+      if (__size < __n)
+ this->append(__n - __size, __c);
+      else if (__n < __size)
+ this->erase(__n);
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    template<typename _InputIterator>
+      basic_string<_CharT, _Traits, _Alloc>&
+      basic_string<_CharT, _Traits, _Alloc>::
+      _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1,
+     _InputIterator __k2, __false_type)
+      {
+ const basic_string __s(__k1, __k2);
+ const size_type __n1 = __i2 - __i1;
+ _M_check_length(__n1, __s.size(), "basic_string::_M_replace_dispatch");
+ return _M_replace_safe(__i1 - _M_ibegin(), __n1, __s._M_data(),
+          __s.size());
+      }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>&
+    basic_string<_CharT, _Traits, _Alloc>::
+    _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
+     _CharT __c)
+    {
+      _M_check_length(__n1, __n2, "basic_string::_M_replace_aux");
+      _M_mutate(__pos1, __n1, __n2);
+      if (__n2)
+ _M_assign(_M_data() + __pos1, __n2, __c);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>&
+    basic_string<_CharT, _Traits, _Alloc>::
+    _M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s,
+      size_type __n2)
+    {
+      _M_mutate(__pos1, __n1, __n2);
+      if (__n2)
+ _M_copy(_M_data() + __pos1, __s, __n2);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>
+    operator+(const _CharT* __lhs,
+       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    {
+      ;
+      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+      typedef typename __string_type::size_type __size_type;
+      const __size_type __len = _Traits::length(__lhs);
+      __string_type __str;
+      __str.reserve(__len + __rhs.size());
+      __str.append(__lhs, __len);
+      __str.append(__rhs);
+      return __str;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_string<_CharT, _Traits, _Alloc>
+    operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    {
+      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+      typedef typename __string_type::size_type __size_type;
+      __string_type __str;
+      const __size_type __len = __rhs.size();
+      __str.reserve(__len + 1);
+      __str.append(__size_type(1), __lhs);
+      __str.append(__rhs);
+      return __str;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    copy(_CharT* __s, size_type __n, size_type __pos) const
+    {
+      _M_check(__pos, "basic_string::copy");
+      __n = _M_limit(__pos, __n);
+      ;
+      if (__n)
+ _M_copy(__s, _M_data() + __pos, __n);
+      return __n;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    find(const _CharT* __s, size_type __pos, size_type __n) const
+    {
+      ;
+      const size_type __size = this->size();
+      const _CharT* __data = _M_data();
+      if (__n == 0)
+ return __pos <= __size ? __pos : npos;
+      if (__n <= __size)
+ {
+   for (; __pos <= __size - __n; ++__pos)
+     if (traits_type::eq(__data[__pos], __s[0])
+  && traits_type::compare(__data + __pos + 1,
+     __s + 1, __n - 1) == 0)
+       return __pos;
+ }
+      return npos;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    find(_CharT __c, size_type __pos) const
+    {
+      size_type __ret = npos;
+      const size_type __size = this->size();
+      if (__pos < __size)
+ {
+   const _CharT* __data = _M_data();
+   const size_type __n = __size - __pos;
+   const _CharT* __p = traits_type::find(__data + __pos, __n, __c);
+   if (__p)
+     __ret = __p - __data;
+ }
+      return __ret;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    rfind(const _CharT* __s, size_type __pos, size_type __n) const
+    {
+      ;
+      const size_type __size = this->size();
+      if (__n <= __size)
+ {
+   __pos = std::min(size_type(__size - __n), __pos);
+   const _CharT* __data = _M_data();
+   do
+     {
+       if (traits_type::compare(__data + __pos, __s, __n) == 0)
+  return __pos;
+     }
+   while (__pos-- > 0);
+ }
+      return npos;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    rfind(_CharT __c, size_type __pos) const
+    {
+      size_type __size = this->size();
+      if (__size)
+ {
+   if (--__size > __pos)
+     __size = __pos;
+   for (++__size; __size-- > 0; )
+     if (traits_type::eq(_M_data()[__size], __c))
+       return __size;
+ }
+      return npos;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
+    {
+      ;
+      for (; __n && __pos < this->size(); ++__pos)
+ {
+   const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]);
+   if (__p)
+     return __pos;
+ }
+      return npos;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
+    {
+      ;
+      size_type __size = this->size();
+      if (__size && __n)
+ {
+   if (--__size > __pos)
+     __size = __pos;
+   do
+     {
+       if (traits_type::find(__s, __n, _M_data()[__size]))
+  return __size;
+     }
+   while (__size-- != 0);
+ }
+      return npos;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const
+    {
+      ;
+      for (; __pos < this->size(); ++__pos)
+ if (!traits_type::find(__s, __n, _M_data()[__pos]))
+   return __pos;
+      return npos;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    find_first_not_of(_CharT __c, size_type __pos) const
+    {
+      for (; __pos < this->size(); ++__pos)
+ if (!traits_type::eq(_M_data()[__pos], __c))
+   return __pos;
+      return npos;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const
+    {
+      ;
+      size_type __size = this->size();
+      if (__size)
+ {
+   if (--__size > __pos)
+     __size = __pos;
+   do
+     {
+       if (!traits_type::find(__s, __n, _M_data()[__size]))
+  return __size;
+     }
+   while (__size--);
+ }
+      return npos;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    typename basic_string<_CharT, _Traits, _Alloc>::size_type
+    basic_string<_CharT, _Traits, _Alloc>::
+    find_last_not_of(_CharT __c, size_type __pos) const
+    {
+      size_type __size = this->size();
+      if (__size)
+ {
+   if (--__size > __pos)
+     __size = __pos;
+   do
+     {
+       if (!traits_type::eq(_M_data()[__size], __c))
+  return __size;
+     }
+   while (__size--);
+ }
+      return npos;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    int
+    basic_string<_CharT, _Traits, _Alloc>::
+    compare(size_type __pos, size_type __n, const basic_string& __str) const
+    {
+      _M_check(__pos, "basic_string::compare");
+      __n = _M_limit(__pos, __n);
+      const size_type __osize = __str.size();
+      const size_type __len = std::min(__n, __osize);
+      int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len);
+      if (!__r)
+ __r = _S_compare(__n, __osize);
+      return __r;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    int
+    basic_string<_CharT, _Traits, _Alloc>::
+    compare(size_type __pos1, size_type __n1, const basic_string& __str,
+     size_type __pos2, size_type __n2) const
+    {
+      _M_check(__pos1, "basic_string::compare");
+      __str._M_check(__pos2, "basic_string::compare");
+      __n1 = _M_limit(__pos1, __n1);
+      __n2 = __str._M_limit(__pos2, __n2);
+      const size_type __len = std::min(__n1, __n2);
+      int __r = traits_type::compare(_M_data() + __pos1,
+         __str.data() + __pos2, __len);
+      if (!__r)
+ __r = _S_compare(__n1, __n2);
+      return __r;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    int
+    basic_string<_CharT, _Traits, _Alloc>::
+    compare(const _CharT* __s) const
+    {
+      ;
+      const size_type __size = this->size();
+      const size_type __osize = traits_type::length(__s);
+      const size_type __len = std::min(__size, __osize);
+      int __r = traits_type::compare(_M_data(), __s, __len);
+      if (!__r)
+ __r = _S_compare(__size, __osize);
+      return __r;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    int
+    basic_string <_CharT, _Traits, _Alloc>::
+    compare(size_type __pos, size_type __n1, const _CharT* __s) const
+    {
+      ;
+      _M_check(__pos, "basic_string::compare");
+      __n1 = _M_limit(__pos, __n1);
+      const size_type __osize = traits_type::length(__s);
+      const size_type __len = std::min(__n1, __osize);
+      int __r = traits_type::compare(_M_data() + __pos, __s, __len);
+      if (!__r)
+ __r = _S_compare(__n1, __osize);
+      return __r;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    int
+    basic_string <_CharT, _Traits, _Alloc>::
+    compare(size_type __pos, size_type __n1, const _CharT* __s,
+     size_type __n2) const
+    {
+      ;
+      _M_check(__pos, "basic_string::compare");
+      __n1 = _M_limit(__pos, __n1);
+      const size_type __len = std::min(__n1, __n2);
+      int __r = traits_type::compare(_M_data() + __pos, __s, __len);
+      if (!__r)
+ __r = _S_compare(__n1, __n2);
+      return __r;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_istream<_CharT, _Traits>&
+    operator>>(basic_istream<_CharT, _Traits>& __in,
+        basic_string<_CharT, _Traits, _Alloc>& __str)
+    {
+      typedef basic_istream<_CharT, _Traits> __istream_type;
+      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+      typedef typename __istream_type::ios_base __ios_base;
+      typedef typename __istream_type::int_type __int_type;
+      typedef typename __string_type::size_type __size_type;
+      typedef ctype<_CharT> __ctype_type;
+      typedef typename __ctype_type::ctype_base __ctype_base;
+      __size_type __extracted = 0;
+      typename __ios_base::iostate __err = __ios_base::goodbit;
+      typename __istream_type::sentry __cerb(__in, false);
+      if (__cerb)
+ {
+   try
+     {
+       __str.erase();
+       _CharT __buf[128];
+       __size_type __len = 0;
+       const streamsize __w = __in.width();
+       const __size_type __n = __w > 0 ? static_cast<__size_type>(__w)
+                                : __str.max_size();
+       const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
+       const __int_type __eof = _Traits::eof();
+       __int_type __c = __in.rdbuf()->sgetc();
+       while (__extracted < __n
+       && !_Traits::eq_int_type(__c, __eof)
+       && !__ct.is(__ctype_base::space,
+     _Traits::to_char_type(__c)))
+  {
+    if (__len == sizeof(__buf) / sizeof(_CharT))
+      {
+        __str.append(__buf, sizeof(__buf) / sizeof(_CharT));
+        __len = 0;
+      }
+    __buf[__len++] = _Traits::to_char_type(__c);
+    ++__extracted;
+    __c = __in.rdbuf()->snextc();
+  }
+       __str.append(__buf, __len);
+       if (_Traits::eq_int_type(__c, __eof))
+  __err |= __ios_base::eofbit;
+       __in.width(0);
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       __in._M_setstate(__ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     {
+       __in._M_setstate(__ios_base::badbit);
+     }
+ }
+      if (!__extracted)
+ __err |= __ios_base::failbit;
+      if (__err)
+ __in.setstate(__err);
+      return __in;
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    basic_istream<_CharT, _Traits>&
+    getline(basic_istream<_CharT, _Traits>& __in,
+     basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)
+    {
+      typedef basic_istream<_CharT, _Traits> __istream_type;
+      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+      typedef typename __istream_type::ios_base __ios_base;
+      typedef typename __istream_type::int_type __int_type;
+      typedef typename __string_type::size_type __size_type;
+      __size_type __extracted = 0;
+      const __size_type __n = __str.max_size();
+      typename __ios_base::iostate __err = __ios_base::goodbit;
+      typename __istream_type::sentry __cerb(__in, true);
+      if (__cerb)
+ {
+   try
+     {
+       __str.erase();
+       const __int_type __idelim = _Traits::to_int_type(__delim);
+       const __int_type __eof = _Traits::eof();
+       __int_type __c = __in.rdbuf()->sgetc();
+       while (__extracted < __n
+       && !_Traits::eq_int_type(__c, __eof)
+       && !_Traits::eq_int_type(__c, __idelim))
+  {
+    __str += _Traits::to_char_type(__c);
+    ++__extracted;
+    __c = __in.rdbuf()->snextc();
+  }
+       if (_Traits::eq_int_type(__c, __eof))
+  __err |= __ios_base::eofbit;
+       else if (_Traits::eq_int_type(__c, __idelim))
+  {
+    ++__extracted;
+    __in.rdbuf()->sbumpc();
+  }
+       else
+  __err |= __ios_base::failbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       __in._M_setstate(__ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     {
+       __in._M_setstate(__ios_base::badbit);
+     }
+ }
+      if (!__extracted)
+ __err |= __ios_base::failbit;
+      if (__err)
+ __in.setstate(__err);
+      return __in;
+    }
+  extern template class basic_string<char>;
+  extern template
+    basic_istream<char>&
+    operator>>(basic_istream<char>&, string&);
+  extern template
+    basic_ostream<char>&
+    operator<<(basic_ostream<char>&, const string&);
+  extern template
+    basic_istream<char>&
+    getline(basic_istream<char>&, string&, char);
+  extern template
+    basic_istream<char>&
+    getline(basic_istream<char>&, string&);
+  extern template class basic_string<wchar_t>;
+  extern template
+    basic_istream<wchar_t>&
+    operator>>(basic_istream<wchar_t>&, wstring&);
+  extern template
+    basic_ostream<wchar_t>&
+    operator<<(basic_ostream<wchar_t>&, const wstring&);
+  extern template
+    basic_istream<wchar_t>&
+    getline(basic_istream<wchar_t>&, wstring&, wchar_t);
+  extern template
+    basic_istream<wchar_t>&
+    getline(basic_istream<wchar_t>&, wstring&);
+}
+       
+       
+       
+       
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  class locale
+  {
+  public:
+    typedef int category;
+    class facet;
+    class id;
+    class _Impl;
+    friend class facet;
+    friend class _Impl;
+    template<typename _Facet>
+      friend bool
+      has_facet(const locale&) throw();
+    template<typename _Facet>
+      friend const _Facet&
+      use_facet(const locale&);
+    template<typename _Cache>
+      friend struct __use_cache;
+    static const category none = 0;
+    static const category ctype = 1L << 0;
+    static const category numeric = 1L << 1;
+    static const category collate = 1L << 2;
+    static const category time = 1L << 3;
+    static const category monetary = 1L << 4;
+    static const category messages = 1L << 5;
+    static const category all = (ctype | numeric | collate |
+        time | monetary | messages);
+    locale() throw();
+    locale(const locale& __other) throw();
+    explicit
+    locale(const char* __s);
+    locale(const locale& __base, const char* __s, category __cat);
+    locale(const locale& __base, const locale& __add, category __cat);
+    template<typename _Facet>
+      locale(const locale& __other, _Facet* __f);
+    ~locale() throw();
+    const locale&
+    operator=(const locale& __other) throw();
+    template<typename _Facet>
+      locale
+      combine(const locale& __other) const;
+    string
+    name() const;
+    bool
+    operator==(const locale& __other) const throw ();
+    bool
+    operator!=(const locale& __other) const throw ()
+    { return !(this->operator==(__other)); }
+    template<typename _Char, typename _Traits, typename _Alloc>
+      bool
+      operator()(const basic_string<_Char, _Traits, _Alloc>& __s1,
+   const basic_string<_Char, _Traits, _Alloc>& __s2) const;
+    static locale
+    global(const locale&);
+    static const locale&
+    classic();
+  private:
+    _Impl* _M_impl;
+    static _Impl* _S_classic;
+    static _Impl* _S_global;
+    static const char* const* const _S_categories;
+    enum { _S_categories_size = 6 + 6 };
+    static __gthread_once_t _S_once;
+    explicit
+    locale(_Impl*) throw();
+    static void
+    _S_initialize();
+    static void
+    _S_initialize_once();
+    static category
+    _S_normalize_category(category);
+    void
+    _M_coalesce(const locale& __base, const locale& __add, category __cat);
+  };
+  class locale::facet
+  {
+  private:
+    friend class locale;
+    friend class locale::_Impl;
+    mutable _Atomic_word _M_refcount;
+    static __c_locale _S_c_locale;
+    static const char _S_c_name[2];
+    static __gthread_once_t _S_once;
+    static void
+    _S_initialize_once();
+  protected:
+    explicit
+    facet(size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0)
+    { }
+    virtual
+    ~facet();
+    static void
+    _S_create_c_locale(__c_locale& __cloc, const char* __s,
+         __c_locale __old = 0);
+    static __c_locale
+    _S_clone_c_locale(__c_locale& __cloc);
+    static void
+    _S_destroy_c_locale(__c_locale& __cloc);
+    static __c_locale
+    _S_get_c_locale();
+    static const char*
+    _S_get_c_name();
+  private:
+    void
+    _M_add_reference() const throw()
+    { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
+    void
+    _M_remove_reference() const throw()
+    {
+      if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
+ {
+   try
+     { delete this; }
+   catch(...)
+     { }
+ }
+    }
+    facet(const facet&);
+    facet&
+    operator=(const facet&);
+  };
+  class locale::id
+  {
+  private:
+    friend class locale;
+    friend class locale::_Impl;
+    template<typename _Facet>
+      friend const _Facet&
+      use_facet(const locale&);
+    template<typename _Facet>
+      friend bool
+      has_facet(const locale&) throw ();
+    mutable size_t _M_index;
+    static _Atomic_word _S_refcount;
+    void
+    operator=(const id&);
+    id(const id&);
+  public:
+    id() { }
+    size_t
+    _M_id() const;
+  };
+  class locale::_Impl
+  {
+  public:
+    friend class locale;
+    friend class locale::facet;
+    template<typename _Facet>
+      friend bool
+      has_facet(const locale&) throw();
+    template<typename _Facet>
+      friend const _Facet&
+      use_facet(const locale&);
+    template<typename _Cache>
+      friend struct __use_cache;
+  private:
+    _Atomic_word _M_refcount;
+    const facet** _M_facets;
+    size_t _M_facets_size;
+    const facet** _M_caches;
+    char** _M_names;
+    static const locale::id* const _S_id_ctype[];
+    static const locale::id* const _S_id_numeric[];
+    static const locale::id* const _S_id_collate[];
+    static const locale::id* const _S_id_time[];
+    static const locale::id* const _S_id_monetary[];
+    static const locale::id* const _S_id_messages[];
+    static const locale::id* const* const _S_facet_categories[];
+    void
+    _M_add_reference() throw()
+    { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
+    void
+    _M_remove_reference() throw()
+    {
+      if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
+ {
+   try
+     { delete this; }
+   catch(...)
+     { }
+ }
+    }
+    _Impl(const _Impl&, size_t);
+    _Impl(const char*, size_t);
+    _Impl(size_t) throw();
+   ~_Impl() throw();
+    _Impl(const _Impl&);
+    void
+    operator=(const _Impl&);
+    bool
+    _M_check_same_name()
+    {
+      bool __ret = true;
+      if (_M_names[1])
+ for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i)
+   __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0;
+      return __ret;
+    }
+    void
+    _M_replace_categories(const _Impl*, category);
+    void
+    _M_replace_category(const _Impl*, const locale::id* const*);
+    void
+    _M_replace_facet(const _Impl*, const locale::id*);
+    void
+    _M_install_facet(const locale::id*, const facet*);
+    template<typename _Facet>
+      void
+      _M_init_facet(_Facet* __facet)
+      { _M_install_facet(&_Facet::id, __facet); }
+    void
+    _M_install_cache(const facet*, size_t);
+  };
+  template<typename _Facet>
+    bool
+    has_facet(const locale& __loc) throw();
+  template<typename _Facet>
+    const _Facet&
+    use_facet(const locale& __loc);
+  template<typename _CharT>
+    class collate : public locale::facet
+    {
+    public:
+      typedef _CharT char_type;
+      typedef basic_string<_CharT> string_type;
+    protected:
+      __c_locale _M_c_locale_collate;
+    public:
+      static locale::id id;
+      explicit
+      collate(size_t __refs = 0)
+      : facet(__refs), _M_c_locale_collate(_S_get_c_locale())
+      { }
+      explicit
+      collate(__c_locale __cloc, size_t __refs = 0)
+      : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc))
+      { }
+      int
+      compare(const _CharT* __lo1, const _CharT* __hi1,
+       const _CharT* __lo2, const _CharT* __hi2) const
+      { return this->do_compare(__lo1, __hi1, __lo2, __hi2); }
+      string_type
+      transform(const _CharT* __lo, const _CharT* __hi) const
+      { return this->do_transform(__lo, __hi); }
+      long
+      hash(const _CharT* __lo, const _CharT* __hi) const
+      { return this->do_hash(__lo, __hi); }
+      int
+      _M_compare(const _CharT*, const _CharT*) const;
+      size_t
+      _M_transform(_CharT*, const _CharT*, size_t) const;
+  protected:
+      virtual
+      ~collate()
+      { _S_destroy_c_locale(_M_c_locale_collate); }
+      virtual int
+      do_compare(const _CharT* __lo1, const _CharT* __hi1,
+   const _CharT* __lo2, const _CharT* __hi2) const;
+      virtual string_type
+      do_transform(const _CharT* __lo, const _CharT* __hi) const;
+      virtual long
+      do_hash(const _CharT* __lo, const _CharT* __hi) const;
+    };
+  template<typename _CharT>
+    locale::id collate<_CharT>::id;
+  template<>
+    int
+    collate<char>::_M_compare(const char*, const char*) const;
+  template<>
+    size_t
+    collate<char>::_M_transform(char*, const char*, size_t) const;
+  template<>
+    int
+    collate<wchar_t>::_M_compare(const wchar_t*, const wchar_t*) const;
+  template<>
+    size_t
+    collate<wchar_t>::_M_transform(wchar_t*, const wchar_t*, size_t) const;
+  template<typename _CharT>
+    class collate_byname : public collate<_CharT>
+    {
+    public:
+      typedef _CharT char_type;
+      typedef basic_string<_CharT> string_type;
+      explicit
+      collate_byname(const char* __s, size_t __refs = 0)
+      : collate<_CharT>(__refs)
+      {
+ if (__builtin_strcmp(__s, "C") != 0
+     && __builtin_strcmp(__s, "POSIX") != 0)
+   {
+     this->_S_destroy_c_locale(this->_M_c_locale_collate);
+     this->_S_create_c_locale(this->_M_c_locale_collate, __s);
+   }
+      }
+    protected:
+      virtual
+      ~collate_byname() { }
+    };
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Facet>
+    locale::
+    locale(const locale& __other, _Facet* __f)
+    {
+      _M_impl = new _Impl(*__other._M_impl, 1);
+      try
+ { _M_impl->_M_install_facet(&_Facet::id, __f); }
+      catch(...)
+ {
+   _M_impl->_M_remove_reference();
+   throw;
+ }
+      delete [] _M_impl->_M_names[0];
+      _M_impl->_M_names[0] = 0;
+    }
+  template<typename _Facet>
+    locale
+    locale::
+    combine(const locale& __other) const
+    {
+      _Impl* __tmp = new _Impl(*_M_impl, 1);
+      try
+ {
+   __tmp->_M_replace_facet(__other._M_impl, &_Facet::id);
+ }
+      catch(...)
+ {
+   __tmp->_M_remove_reference();
+   throw;
+ }
+      return locale(__tmp);
+    }
+  template<typename _CharT, typename _Traits, typename _Alloc>
+    bool
+    locale::
+    operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1,
+        const basic_string<_CharT, _Traits, _Alloc>& __s2) const
+    {
+      typedef std::collate<_CharT> __collate_type;
+      const __collate_type& __collate = use_facet<__collate_type>(*this);
+      return (__collate.compare(__s1.data(), __s1.data() + __s1.length(),
+    __s2.data(), __s2.data() + __s2.length()) < 0);
+    }
+  template<typename _Facet>
+    bool
+    has_facet(const locale& __loc) throw()
+    {
+      const size_t __i = _Facet::id._M_id();
+      const locale::facet** __facets = __loc._M_impl->_M_facets;
+      return (__i < __loc._M_impl->_M_facets_size
+       && dynamic_cast<const _Facet*>(__facets[__i]));
+    }
+  template<typename _Facet>
+    const _Facet&
+    use_facet(const locale& __loc)
+    {
+      const size_t __i = _Facet::id._M_id();
+      const locale::facet** __facets = __loc._M_impl->_M_facets;
+      if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i])
+        __throw_bad_cast();
+      return dynamic_cast<const _Facet&>(*__facets[__i]);
+    }
+  template<typename _CharT>
+    int
+    collate<_CharT>::_M_compare(const _CharT*, const _CharT*) const
+    { return 0; }
+  template<typename _CharT>
+    size_t
+    collate<_CharT>::_M_transform(_CharT*, const _CharT*, size_t) const
+    { return 0; }
+  template<typename _CharT>
+    int
+    collate<_CharT>::
+    do_compare(const _CharT* __lo1, const _CharT* __hi1,
+        const _CharT* __lo2, const _CharT* __hi2) const
+    {
+      const string_type __one(__lo1, __hi1);
+      const string_type __two(__lo2, __hi2);
+      const _CharT* __p = __one.c_str();
+      const _CharT* __pend = __one.data() + __one.length();
+      const _CharT* __q = __two.c_str();
+      const _CharT* __qend = __two.data() + __two.length();
+      for (;;)
+ {
+   const int __res = _M_compare(__p, __q);
+   if (__res)
+     return __res;
+   __p += char_traits<_CharT>::length(__p);
+   __q += char_traits<_CharT>::length(__q);
+   if (__p == __pend && __q == __qend)
+     return 0;
+   else if (__p == __pend)
+     return -1;
+   else if (__q == __qend)
+     return 1;
+   __p++;
+   __q++;
+ }
+    }
+  template<typename _CharT>
+    typename collate<_CharT>::string_type
+    collate<_CharT>::
+    do_transform(const _CharT* __lo, const _CharT* __hi) const
+    {
+      string_type __ret;
+      const string_type __str(__lo, __hi);
+      const _CharT* __p = __str.c_str();
+      const _CharT* __pend = __str.data() + __str.length();
+      size_t __len = (__hi - __lo) * 2;
+      _CharT* __c = new _CharT[__len];
+      try
+ {
+   for (;;)
+     {
+       size_t __res = _M_transform(__c, __p, __len);
+       if (__res >= __len)
+  {
+    __len = __res + 1;
+    delete [] __c, __c = 0;
+    __c = new _CharT[__len];
+    __res = _M_transform(__c, __p, __len);
+  }
+       __ret.append(__c, __res);
+       __p += char_traits<_CharT>::length(__p);
+       if (__p == __pend)
+  break;
+       __p++;
+       __ret.push_back(_CharT());
+     }
+ }
+      catch(...)
+ {
+   delete [] __c;
+   throw;
+ }
+      delete [] __c;
+      return __ret;
+    }
+  template<typename _CharT>
+    long
+    collate<_CharT>::
+    do_hash(const _CharT* __lo, const _CharT* __hi) const
+    {
+      unsigned long __val = 0;
+      for (; __lo < __hi; ++__lo)
+ __val =
+   *__lo + ((__val << 7)
+     | (__val >> (__gnu_cxx::__numeric_traits<unsigned long>::
+    __digits - 7)));
+      return static_cast<long>(__val);
+    }
+  extern template class collate<char>;
+  extern template class collate_byname<char>;
+  extern template
+    const collate<char>&
+    use_facet<collate<char> >(const locale&);
+  extern template
+    bool
+    has_facet<collate<char> >(const locale&);
+  extern template class collate<wchar_t>;
+  extern template class collate_byname<wchar_t>;
+  extern template
+    const collate<wchar_t>&
+    use_facet<collate<wchar_t> >(const locale&);
+  extern template
+    bool
+    has_facet<collate<wchar_t> >(const locale&);
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  enum _Ios_Fmtflags
+    {
+      _S_boolalpha = 1L << 0,
+      _S_dec = 1L << 1,
+      _S_fixed = 1L << 2,
+      _S_hex = 1L << 3,
+      _S_internal = 1L << 4,
+      _S_left = 1L << 5,
+      _S_oct = 1L << 6,
+      _S_right = 1L << 7,
+      _S_scientific = 1L << 8,
+      _S_showbase = 1L << 9,
+      _S_showpoint = 1L << 10,
+      _S_showpos = 1L << 11,
+      _S_skipws = 1L << 12,
+      _S_unitbuf = 1L << 13,
+      _S_uppercase = 1L << 14,
+      _S_adjustfield = _S_left | _S_right | _S_internal,
+      _S_basefield = _S_dec | _S_oct | _S_hex,
+      _S_floatfield = _S_scientific | _S_fixed,
+      _S_ios_fmtflags_end = 1L << 16
+    };
+  inline _Ios_Fmtflags
+  operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
+  { return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); }
+  inline _Ios_Fmtflags
+  operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
+  { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); }
+  inline _Ios_Fmtflags
+  operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
+  { return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); }
+  inline _Ios_Fmtflags&
+  operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
+  { return __a = __a | __b; }
+  inline _Ios_Fmtflags&
+  operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
+  { return __a = __a & __b; }
+  inline _Ios_Fmtflags&
+  operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
+  { return __a = __a ^ __b; }
+  inline _Ios_Fmtflags
+  operator~(_Ios_Fmtflags __a)
+  { return _Ios_Fmtflags(~static_cast<int>(__a)); }
+  enum _Ios_Openmode
+    {
+      _S_app = 1L << 0,
+      _S_ate = 1L << 1,
+      _S_bin = 1L << 2,
+      _S_in = 1L << 3,
+      _S_out = 1L << 4,
+      _S_trunc = 1L << 5,
+      _S_ios_openmode_end = 1L << 16
+    };
+  inline _Ios_Openmode
+  operator&(_Ios_Openmode __a, _Ios_Openmode __b)
+  { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); }
+  inline _Ios_Openmode
+  operator|(_Ios_Openmode __a, _Ios_Openmode __b)
+  { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); }
+  inline _Ios_Openmode
+  operator^(_Ios_Openmode __a, _Ios_Openmode __b)
+  { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); }
+  inline _Ios_Openmode&
+  operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
+  { return __a = __a | __b; }
+  inline _Ios_Openmode&
+  operator&=(_Ios_Openmode& __a, _Ios_Openmode __b)
+  { return __a = __a & __b; }
+  inline _Ios_Openmode&
+  operator^=(_Ios_Openmode& __a, _Ios_Openmode __b)
+  { return __a = __a ^ __b; }
+  inline _Ios_Openmode
+  operator~(_Ios_Openmode __a)
+  { return _Ios_Openmode(~static_cast<int>(__a)); }
+  enum _Ios_Iostate
+    {
+      _S_goodbit = 0,
+      _S_badbit = 1L << 0,
+      _S_eofbit = 1L << 1,
+      _S_failbit = 1L << 2,
+      _S_ios_iostate_end = 1L << 16
+    };
+  inline _Ios_Iostate
+  operator&(_Ios_Iostate __a, _Ios_Iostate __b)
+  { return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); }
+  inline _Ios_Iostate
+  operator|(_Ios_Iostate __a, _Ios_Iostate __b)
+  { return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); }
+  inline _Ios_Iostate
+  operator^(_Ios_Iostate __a, _Ios_Iostate __b)
+  { return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); }
+  inline _Ios_Iostate&
+  operator|=(_Ios_Iostate& __a, _Ios_Iostate __b)
+  { return __a = __a | __b; }
+  inline _Ios_Iostate&
+  operator&=(_Ios_Iostate& __a, _Ios_Iostate __b)
+  { return __a = __a & __b; }
+  inline _Ios_Iostate&
+  operator^=(_Ios_Iostate& __a, _Ios_Iostate __b)
+  { return __a = __a ^ __b; }
+  inline _Ios_Iostate
+  operator~(_Ios_Iostate __a)
+  { return _Ios_Iostate(~static_cast<int>(__a)); }
+  enum _Ios_Seekdir
+    {
+      _S_beg = 0,
+      _S_cur = 1,
+      _S_end = 2,
+      _S_ios_seekdir_end = 1L << 16
+    };
+  class ios_base
+  {
+  public:
+    class failure : public exception
+    {
+    public:
+      explicit
+      failure(const string& __str) throw();
+      virtual
+      ~failure() throw();
+      virtual const char*
+      what() const throw();
+    private:
+      string _M_msg;
+    };
+    typedef _Ios_Fmtflags fmtflags;
+    static const fmtflags boolalpha = _S_boolalpha;
+    static const fmtflags dec = _S_dec;
+    static const fmtflags fixed = _S_fixed;
+    static const fmtflags hex = _S_hex;
+    static const fmtflags internal = _S_internal;
+    static const fmtflags left = _S_left;
+    static const fmtflags oct = _S_oct;
+    static const fmtflags right = _S_right;
+    static const fmtflags scientific = _S_scientific;
+    static const fmtflags showbase = _S_showbase;
+    static const fmtflags showpoint = _S_showpoint;
+    static const fmtflags showpos = _S_showpos;
+    static const fmtflags skipws = _S_skipws;
+    static const fmtflags unitbuf = _S_unitbuf;
+    static const fmtflags uppercase = _S_uppercase;
+    static const fmtflags adjustfield = _S_adjustfield;
+    static const fmtflags basefield = _S_basefield;
+    static const fmtflags floatfield = _S_floatfield;
+    typedef _Ios_Iostate iostate;
+    static const iostate badbit = _S_badbit;
+    static const iostate eofbit = _S_eofbit;
+    static const iostate failbit = _S_failbit;
+    static const iostate goodbit = _S_goodbit;
+    typedef _Ios_Openmode openmode;
+    static const openmode app = _S_app;
+    static const openmode ate = _S_ate;
+    static const openmode binary = _S_bin;
+    static const openmode in = _S_in;
+    static const openmode out = _S_out;
+    static const openmode trunc = _S_trunc;
+    typedef _Ios_Seekdir seekdir;
+    static const seekdir beg = _S_beg;
+    static const seekdir cur = _S_cur;
+    static const seekdir end = _S_end;
+    typedef int io_state;
+    typedef int open_mode;
+    typedef int seek_dir;
+    typedef std::streampos streampos;
+    typedef std::streamoff streamoff;
+    enum event
+    {
+      erase_event,
+      imbue_event,
+      copyfmt_event
+    };
+    typedef void (*event_callback) (event, ios_base&, int);
+    void
+    register_callback(event_callback __fn, int __index);
+  protected:
+    streamsize _M_precision;
+    streamsize _M_width;
+    fmtflags _M_flags;
+    iostate _M_exception;
+    iostate _M_streambuf_state;
+    struct _Callback_list
+    {
+      _Callback_list* _M_next;
+      ios_base::event_callback _M_fn;
+      int _M_index;
+      _Atomic_word _M_refcount;
+      _Callback_list(ios_base::event_callback __fn, int __index,
+       _Callback_list* __cb)
+      : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { }
+      void
+      _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
+      int
+      _M_remove_reference()
+      { return __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1); }
+    };
+     _Callback_list* _M_callbacks;
+    void
+    _M_call_callbacks(event __ev) throw();
+    void
+    _M_dispose_callbacks(void);
+    struct _Words
+    {
+      void* _M_pword;
+      long _M_iword;
+      _Words() : _M_pword(0), _M_iword(0) { }
+    };
+    _Words _M_word_zero;
+    enum { _S_local_word_size = 8 };
+    _Words _M_local_word[_S_local_word_size];
+    int _M_word_size;
+    _Words* _M_word;
+    _Words&
+    _M_grow_words(int __index, bool __iword);
+    locale _M_ios_locale;
+    void
+    _M_init();
+  public:
+    class Init
+    {
+      friend class ios_base;
+    public:
+      Init();
+      ~Init();
+    private:
+      static _Atomic_word _S_refcount;
+      static bool _S_synced_with_stdio;
+    };
+    fmtflags
+    flags() const
+    { return _M_flags; }
+    fmtflags
+    flags(fmtflags __fmtfl)
+    {
+      fmtflags __old = _M_flags;
+      _M_flags = __fmtfl;
+      return __old;
+    }
+    fmtflags
+    setf(fmtflags __fmtfl)
+    {
+      fmtflags __old = _M_flags;
+      _M_flags |= __fmtfl;
+      return __old;
+    }
+    fmtflags
+    setf(fmtflags __fmtfl, fmtflags __mask)
+    {
+      fmtflags __old = _M_flags;
+      _M_flags &= ~__mask;
+      _M_flags |= (__fmtfl & __mask);
+      return __old;
+    }
+    void
+    unsetf(fmtflags __mask)
+    { _M_flags &= ~__mask; }
+    streamsize
+    precision() const
+    { return _M_precision; }
+    streamsize
+    precision(streamsize __prec)
+    {
+      streamsize __old = _M_precision;
+      _M_precision = __prec;
+      return __old;
+    }
+    streamsize
+    width() const
+    { return _M_width; }
+    streamsize
+    width(streamsize __wide)
+    {
+      streamsize __old = _M_width;
+      _M_width = __wide;
+      return __old;
+    }
+    static bool
+    sync_with_stdio(bool __sync = true);
+    locale
+    imbue(const locale& __loc);
+    locale
+    getloc() const
+    { return _M_ios_locale; }
+    const locale&
+    _M_getloc() const
+    { return _M_ios_locale; }
+    static int
+    xalloc() throw();
+    long&
+    iword(int __ix)
+    {
+      _Words& __word = (__ix < _M_word_size)
+   ? _M_word[__ix] : _M_grow_words(__ix, true);
+      return __word._M_iword;
+    }
+    void*&
+    pword(int __ix)
+    {
+      _Words& __word = (__ix < _M_word_size)
+   ? _M_word[__ix] : _M_grow_words(__ix, false);
+      return __word._M_pword;
+    }
+    virtual ~ios_base();
+  protected:
+    ios_base();
+  private:
+    ios_base(const ios_base&);
+    ios_base&
+    operator=(const ios_base&);
+  };
+  inline ios_base&
+  boolalpha(ios_base& __base)
+  {
+    __base.setf(ios_base::boolalpha);
+    return __base;
+  }
+  inline ios_base&
+  noboolalpha(ios_base& __base)
+  {
+    __base.unsetf(ios_base::boolalpha);
+    return __base;
+  }
+  inline ios_base&
+  showbase(ios_base& __base)
+  {
+    __base.setf(ios_base::showbase);
+    return __base;
+  }
+  inline ios_base&
+  noshowbase(ios_base& __base)
+  {
+    __base.unsetf(ios_base::showbase);
+    return __base;
+  }
+  inline ios_base&
+  showpoint(ios_base& __base)
+  {
+    __base.setf(ios_base::showpoint);
+    return __base;
+  }
+  inline ios_base&
+  noshowpoint(ios_base& __base)
+  {
+    __base.unsetf(ios_base::showpoint);
+    return __base;
+  }
+  inline ios_base&
+  showpos(ios_base& __base)
+  {
+    __base.setf(ios_base::showpos);
+    return __base;
+  }
+  inline ios_base&
+  noshowpos(ios_base& __base)
+  {
+    __base.unsetf(ios_base::showpos);
+    return __base;
+  }
+  inline ios_base&
+  skipws(ios_base& __base)
+  {
+    __base.setf(ios_base::skipws);
+    return __base;
+  }
+  inline ios_base&
+  noskipws(ios_base& __base)
+  {
+    __base.unsetf(ios_base::skipws);
+    return __base;
+  }
+  inline ios_base&
+  uppercase(ios_base& __base)
+  {
+    __base.setf(ios_base::uppercase);
+    return __base;
+  }
+  inline ios_base&
+  nouppercase(ios_base& __base)
+  {
+    __base.unsetf(ios_base::uppercase);
+    return __base;
+  }
+  inline ios_base&
+  unitbuf(ios_base& __base)
+  {
+     __base.setf(ios_base::unitbuf);
+     return __base;
+  }
+  inline ios_base&
+  nounitbuf(ios_base& __base)
+  {
+     __base.unsetf(ios_base::unitbuf);
+     return __base;
+  }
+  inline ios_base&
+  internal(ios_base& __base)
+  {
+     __base.setf(ios_base::internal, ios_base::adjustfield);
+     return __base;
+  }
+  inline ios_base&
+  left(ios_base& __base)
+  {
+    __base.setf(ios_base::left, ios_base::adjustfield);
+    return __base;
+  }
+  inline ios_base&
+  right(ios_base& __base)
+  {
+    __base.setf(ios_base::right, ios_base::adjustfield);
+    return __base;
+  }
+  inline ios_base&
+  dec(ios_base& __base)
+  {
+    __base.setf(ios_base::dec, ios_base::basefield);
+    return __base;
+  }
+  inline ios_base&
+  hex(ios_base& __base)
+  {
+    __base.setf(ios_base::hex, ios_base::basefield);
+    return __base;
+  }
+  inline ios_base&
+  oct(ios_base& __base)
+  {
+    __base.setf(ios_base::oct, ios_base::basefield);
+    return __base;
+  }
+  inline ios_base&
+  fixed(ios_base& __base)
+  {
+    __base.setf(ios_base::fixed, ios_base::floatfield);
+    return __base;
+  }
+  inline ios_base&
+  scientific(ios_base& __base)
+  {
+    __base.setf(ios_base::scientific, ios_base::floatfield);
+    return __base;
+  }
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits>
+    streamsize
+    __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>*,
+     basic_streambuf<_CharT, _Traits>*, bool&);
+  template<typename _CharT, typename _Traits>
+    class basic_streambuf
+    {
+    public:
+      typedef _CharT char_type;
+      typedef _Traits traits_type;
+      typedef typename traits_type::int_type int_type;
+      typedef typename traits_type::pos_type pos_type;
+      typedef typename traits_type::off_type off_type;
+      typedef basic_streambuf<char_type, traits_type> __streambuf_type;
+      friend class basic_ios<char_type, traits_type>;
+      friend class basic_istream<char_type, traits_type>;
+      friend class basic_ostream<char_type, traits_type>;
+      friend class istreambuf_iterator<char_type, traits_type>;
+      friend class ostreambuf_iterator<char_type, traits_type>;
+      friend streamsize
+      __copy_streambufs_eof<>(__streambuf_type*, __streambuf_type*, bool&);
+      template<bool _IsMove, typename _CharT2>
+        friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+            _CharT2*>::__type
+        __copy_move_a2(istreambuf_iterator<_CharT2>,
+         istreambuf_iterator<_CharT2>, _CharT2*);
+      template<typename _CharT2>
+        friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+      istreambuf_iterator<_CharT2> >::__type
+        find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
+      const _CharT2&);
+      template<typename _CharT2, typename _Traits2>
+        friend basic_istream<_CharT2, _Traits2>&
+        operator>>(basic_istream<_CharT2, _Traits2>&, _CharT2*);
+      template<typename _CharT2, typename _Traits2, typename _Alloc>
+        friend basic_istream<_CharT2, _Traits2>&
+        operator>>(basic_istream<_CharT2, _Traits2>&,
+     basic_string<_CharT2, _Traits2, _Alloc>&);
+      template<typename _CharT2, typename _Traits2, typename _Alloc>
+        friend basic_istream<_CharT2, _Traits2>&
+        getline(basic_istream<_CharT2, _Traits2>&,
+  basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2);
+    protected:
+      char_type* _M_in_beg;
+      char_type* _M_in_cur;
+      char_type* _M_in_end;
+      char_type* _M_out_beg;
+      char_type* _M_out_cur;
+      char_type* _M_out_end;
+      locale _M_buf_locale;
+  public:
+      virtual
+      ~basic_streambuf()
+      { }
+      locale
+      pubimbue(const locale &__loc)
+      {
+ locale __tmp(this->getloc());
+ this->imbue(__loc);
+ _M_buf_locale = __loc;
+ return __tmp;
+      }
+      locale
+      getloc() const
+      { return _M_buf_locale; }
+      __streambuf_type*
+      pubsetbuf(char_type* __s, streamsize __n)
+      { return this->setbuf(__s, __n); }
+      pos_type
+      pubseekoff(off_type __off, ios_base::seekdir __way,
+   ios_base::openmode __mode = ios_base::in | ios_base::out)
+      { return this->seekoff(__off, __way, __mode); }
+      pos_type
+      pubseekpos(pos_type __sp,
+   ios_base::openmode __mode = ios_base::in | ios_base::out)
+      { return this->seekpos(__sp, __mode); }
+      int
+      pubsync() { return this->sync(); }
+      streamsize
+      in_avail()
+      {
+ const streamsize __ret = this->egptr() - this->gptr();
+ return __ret ? __ret : this->showmanyc();
+      }
+      int_type
+      snextc()
+      {
+ int_type __ret = traits_type::eof();
+ if (__builtin_expect(!traits_type::eq_int_type(this->sbumpc(),
+             __ret), true))
+   __ret = this->sgetc();
+ return __ret;
+      }
+      int_type
+      sbumpc()
+      {
+ int_type __ret;
+ if (__builtin_expect(this->gptr() < this->egptr(), true))
+   {
+     __ret = traits_type::to_int_type(*this->gptr());
+     this->gbump(1);
+   }
+ else
+   __ret = this->uflow();
+ return __ret;
+      }
+      int_type
+      sgetc()
+      {
+ int_type __ret;
+ if (__builtin_expect(this->gptr() < this->egptr(), true))
+   __ret = traits_type::to_int_type(*this->gptr());
+ else
+   __ret = this->underflow();
+ return __ret;
+      }
+      streamsize
+      sgetn(char_type* __s, streamsize __n)
+      { return this->xsgetn(__s, __n); }
+      int_type
+      sputbackc(char_type __c)
+      {
+ int_type __ret;
+ const bool __testpos = this->eback() < this->gptr();
+ if (__builtin_expect(!__testpos ||
+        !traits_type::eq(__c, this->gptr()[-1]), false))
+   __ret = this->pbackfail(traits_type::to_int_type(__c));
+ else
+   {
+     this->gbump(-1);
+     __ret = traits_type::to_int_type(*this->gptr());
+   }
+ return __ret;
+      }
+      int_type
+      sungetc()
+      {
+ int_type __ret;
+ if (__builtin_expect(this->eback() < this->gptr(), true))
+   {
+     this->gbump(-1);
+     __ret = traits_type::to_int_type(*this->gptr());
+   }
+ else
+   __ret = this->pbackfail();
+ return __ret;
+      }
+      int_type
+      sputc(char_type __c)
+      {
+ int_type __ret;
+ if (__builtin_expect(this->pptr() < this->epptr(), true))
+   {
+     *this->pptr() = __c;
+     this->pbump(1);
+     __ret = traits_type::to_int_type(__c);
+   }
+ else
+   __ret = this->overflow(traits_type::to_int_type(__c));
+ return __ret;
+      }
+      streamsize
+      sputn(const char_type* __s, streamsize __n)
+      { return this->xsputn(__s, __n); }
+    protected:
+      basic_streambuf()
+      : _M_in_beg(0), _M_in_cur(0), _M_in_end(0),
+      _M_out_beg(0), _M_out_cur(0), _M_out_end(0),
+      _M_buf_locale(locale())
+      { }
+      char_type*
+      eback() const { return _M_in_beg; }
+      char_type*
+      gptr() const { return _M_in_cur; }
+      char_type*
+      egptr() const { return _M_in_end; }
+      void
+      gbump(int __n) { _M_in_cur += __n; }
+      void
+      setg(char_type* __gbeg, char_type* __gnext, char_type* __gend)
+      {
+ _M_in_beg = __gbeg;
+ _M_in_cur = __gnext;
+ _M_in_end = __gend;
+      }
+      char_type*
+      pbase() const { return _M_out_beg; }
+      char_type*
+      pptr() const { return _M_out_cur; }
+      char_type*
+      epptr() const { return _M_out_end; }
+      void
+      pbump(int __n) { _M_out_cur += __n; }
+      void
+      setp(char_type* __pbeg, char_type* __pend)
+      {
+ _M_out_beg = _M_out_cur = __pbeg;
+ _M_out_end = __pend;
+      }
+      virtual void
+      imbue(const locale&)
+      { }
+      virtual basic_streambuf<char_type,_Traits>*
+      setbuf(char_type*, streamsize)
+      { return this; }
+      virtual pos_type
+      seekoff(off_type, ios_base::seekdir,
+       ios_base::openmode = ios_base::in | ios_base::out)
+      { return pos_type(off_type(-1)); }
+      virtual pos_type
+      seekpos(pos_type,
+       ios_base::openmode = ios_base::in | ios_base::out)
+      { return pos_type(off_type(-1)); }
+      virtual int
+      sync() { return 0; }
+      virtual streamsize
+      showmanyc() { return 0; }
+      virtual streamsize
+      xsgetn(char_type* __s, streamsize __n);
+      virtual int_type
+      underflow()
+      { return traits_type::eof(); }
+      virtual int_type
+      uflow()
+      {
+ int_type __ret = traits_type::eof();
+ const bool __testeof = traits_type::eq_int_type(this->underflow(),
+       __ret);
+ if (!__testeof)
+   {
+     __ret = traits_type::to_int_type(*this->gptr());
+     this->gbump(1);
+   }
+ return __ret;
+      }
+      virtual int_type
+      pbackfail(int_type = traits_type::eof())
+      { return traits_type::eof(); }
+      virtual streamsize
+      xsputn(const char_type* __s, streamsize __n);
+      virtual int_type
+      overflow(int_type = traits_type::eof())
+      { return traits_type::eof(); }
+    public:
+      void
+      stossc()
+      {
+ if (this->gptr() < this->egptr())
+   this->gbump(1);
+ else
+   this->uflow();
+      }
+    private:
+      basic_streambuf(const __streambuf_type& __sb)
+      : _M_in_beg(__sb._M_in_beg), _M_in_cur(__sb._M_in_cur),
+      _M_in_end(__sb._M_in_end), _M_out_beg(__sb._M_out_beg),
+      _M_out_cur(__sb._M_out_cur), _M_out_end(__sb._M_out_cur),
+      _M_buf_locale(__sb._M_buf_locale)
+      { }
+      __streambuf_type&
+      operator=(const __streambuf_type&) { return *this; };
+    };
+  template<>
+    streamsize
+    __copy_streambufs_eof(basic_streambuf<char>* __sbin,
+     basic_streambuf<char>* __sbout, bool& __ineof);
+  template<>
+    streamsize
+    __copy_streambufs_eof(basic_streambuf<wchar_t>* __sbin,
+     basic_streambuf<wchar_t>* __sbout, bool& __ineof);
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits>
+    streamsize
+    basic_streambuf<_CharT, _Traits>::
+    xsgetn(char_type* __s, streamsize __n)
+    {
+      streamsize __ret = 0;
+      while (__ret < __n)
+ {
+   const streamsize __buf_len = this->egptr() - this->gptr();
+   if (__buf_len)
+     {
+       const streamsize __remaining = __n - __ret;
+       const streamsize __len = std::min(__buf_len, __remaining);
+       traits_type::copy(__s, this->gptr(), __len);
+       __ret += __len;
+       __s += __len;
+       this->gbump(__len);
+     }
+   if (__ret < __n)
+     {
+       const int_type __c = this->uflow();
+       if (!traits_type::eq_int_type(__c, traits_type::eof()))
+  {
+    traits_type::assign(*__s++, traits_type::to_char_type(__c));
+    ++__ret;
+  }
+       else
+  break;
+     }
+ }
+      return __ret;
+    }
+  template<typename _CharT, typename _Traits>
+    streamsize
+    basic_streambuf<_CharT, _Traits>::
+    xsputn(const char_type* __s, streamsize __n)
+    {
+      streamsize __ret = 0;
+      while (__ret < __n)
+ {
+   const streamsize __buf_len = this->epptr() - this->pptr();
+   if (__buf_len)
+     {
+       const streamsize __remaining = __n - __ret;
+       const streamsize __len = std::min(__buf_len, __remaining);
+       traits_type::copy(this->pptr(), __s, __len);
+       __ret += __len;
+       __s += __len;
+       this->pbump(__len);
+     }
+   if (__ret < __n)
+     {
+       int_type __c = this->overflow(traits_type::to_int_type(*__s));
+       if (!traits_type::eq_int_type(__c, traits_type::eof()))
+  {
+    ++__ret;
+    ++__s;
+  }
+       else
+  break;
+     }
+ }
+      return __ret;
+    }
+  template<typename _CharT, typename _Traits>
+    streamsize
+    __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin,
+     basic_streambuf<_CharT, _Traits>* __sbout,
+     bool& __ineof)
+    {
+      streamsize __ret = 0;
+      __ineof = true;
+      typename _Traits::int_type __c = __sbin->sgetc();
+      while (!_Traits::eq_int_type(__c, _Traits::eof()))
+ {
+   __c = __sbout->sputc(_Traits::to_char_type(__c));
+   if (_Traits::eq_int_type(__c, _Traits::eof()))
+     {
+       __ineof = false;
+       break;
+     }
+   ++__ret;
+   __c = __sbin->snextc();
+ }
+      return __ret;
+    }
+  template<typename _CharT, typename _Traits>
+    inline streamsize
+    __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin,
+        basic_streambuf<_CharT, _Traits>* __sbout)
+    {
+      bool __ineof;
+      return __copy_streambufs_eof(__sbin, __sbout, __ineof);
+    }
+  extern template class basic_streambuf<char>;
+  extern template
+    streamsize
+    __copy_streambufs(basic_streambuf<char>*,
+        basic_streambuf<char>*);
+  extern template
+    streamsize
+    __copy_streambufs_eof(basic_streambuf<char>*,
+     basic_streambuf<char>*, bool&);
+  extern template class basic_streambuf<wchar_t>;
+  extern template
+    streamsize
+    __copy_streambufs(basic_streambuf<wchar_t>*,
+        basic_streambuf<wchar_t>*);
+  extern template
+    streamsize
+    __copy_streambufs_eof(basic_streambuf<wchar_t>*,
+     basic_streambuf<wchar_t>*, bool&);
+}
+       
+       
+       
+typedef unsigned long int wctype_t;
+enum
+{
+  __ISwupper = 0,
+  __ISwlower = 1,
+  __ISwalpha = 2,
+  __ISwdigit = 3,
+  __ISwxdigit = 4,
+  __ISwspace = 5,
+  __ISwprint = 6,
+  __ISwgraph = 7,
+  __ISwblank = 8,
+  __ISwcntrl = 9,
+  __ISwpunct = 10,
+  __ISwalnum = 11,
+  _ISwupper = ((__ISwupper) < 8 ? (int) ((1UL << (__ISwupper)) << 24) : ((__ISwupper) < 16 ? (int) ((1UL << (__ISwupper)) << 8) : ((__ISwupper) < 24 ? (int) ((1UL << (__ISwupper)) >> 8) : (int) ((1UL << (__ISwupper)) >> 24)))),
+  _ISwlower = ((__ISwlower) < 8 ? (int) ((1UL << (__ISwlower)) << 24) : ((__ISwlower) < 16 ? (int) ((1UL << (__ISwlower)) << 8) : ((__ISwlower) < 24 ? (int) ((1UL << (__ISwlower)) >> 8) : (int) ((1UL << (__ISwlower)) >> 24)))),
+  _ISwalpha = ((__ISwalpha) < 8 ? (int) ((1UL << (__ISwalpha)) << 24) : ((__ISwalpha) < 16 ? (int) ((1UL << (__ISwalpha)) << 8) : ((__ISwalpha) < 24 ? (int) ((1UL << (__ISwalpha)) >> 8) : (int) ((1UL << (__ISwalpha)) >> 24)))),
+  _ISwdigit = ((__ISwdigit) < 8 ? (int) ((1UL << (__ISwdigit)) << 24) : ((__ISwdigit) < 16 ? (int) ((1UL << (__ISwdigit)) << 8) : ((__ISwdigit) < 24 ? (int) ((1UL << (__ISwdigit)) >> 8) : (int) ((1UL << (__ISwdigit)) >> 24)))),
+  _ISwxdigit = ((__ISwxdigit) < 8 ? (int) ((1UL << (__ISwxdigit)) << 24) : ((__ISwxdigit) < 16 ? (int) ((1UL << (__ISwxdigit)) << 8) : ((__ISwxdigit) < 24 ? (int) ((1UL << (__ISwxdigit)) >> 8) : (int) ((1UL << (__ISwxdigit)) >> 24)))),
+  _ISwspace = ((__ISwspace) < 8 ? (int) ((1UL << (__ISwspace)) << 24) : ((__ISwspace) < 16 ? (int) ((1UL << (__ISwspace)) << 8) : ((__ISwspace) < 24 ? (int) ((1UL << (__ISwspace)) >> 8) : (int) ((1UL << (__ISwspace)) >> 24)))),
+  _ISwprint = ((__ISwprint) < 8 ? (int) ((1UL << (__ISwprint)) << 24) : ((__ISwprint) < 16 ? (int) ((1UL << (__ISwprint)) << 8) : ((__ISwprint) < 24 ? (int) ((1UL << (__ISwprint)) >> 8) : (int) ((1UL << (__ISwprint)) >> 24)))),
+  _ISwgraph = ((__ISwgraph) < 8 ? (int) ((1UL << (__ISwgraph)) << 24) : ((__ISwgraph) < 16 ? (int) ((1UL << (__ISwgraph)) << 8) : ((__ISwgraph) < 24 ? (int) ((1UL << (__ISwgraph)) >> 8) : (int) ((1UL << (__ISwgraph)) >> 24)))),
+  _ISwblank = ((__ISwblank) < 8 ? (int) ((1UL << (__ISwblank)) << 24) : ((__ISwblank) < 16 ? (int) ((1UL << (__ISwblank)) << 8) : ((__ISwblank) < 24 ? (int) ((1UL << (__ISwblank)) >> 8) : (int) ((1UL << (__ISwblank)) >> 24)))),
+  _ISwcntrl = ((__ISwcntrl) < 8 ? (int) ((1UL << (__ISwcntrl)) << 24) : ((__ISwcntrl) < 16 ? (int) ((1UL << (__ISwcntrl)) << 8) : ((__ISwcntrl) < 24 ? (int) ((1UL << (__ISwcntrl)) >> 8) : (int) ((1UL << (__ISwcntrl)) >> 24)))),
+  _ISwpunct = ((__ISwpunct) < 8 ? (int) ((1UL << (__ISwpunct)) << 24) : ((__ISwpunct) < 16 ? (int) ((1UL << (__ISwpunct)) << 8) : ((__ISwpunct) < 24 ? (int) ((1UL << (__ISwpunct)) >> 8) : (int) ((1UL << (__ISwpunct)) >> 24)))),
+  _ISwalnum = ((__ISwalnum) < 8 ? (int) ((1UL << (__ISwalnum)) << 24) : ((__ISwalnum) < 16 ? (int) ((1UL << (__ISwalnum)) << 8) : ((__ISwalnum) < 24 ? (int) ((1UL << (__ISwalnum)) >> 8) : (int) ((1UL << (__ISwalnum)) >> 24))))
+};
+extern "C" {
+extern int iswalnum (wint_t __wc) throw ();
+extern int iswalpha (wint_t __wc) throw ();
+extern int iswcntrl (wint_t __wc) throw ();
+extern int iswdigit (wint_t __wc) throw ();
+extern int iswgraph (wint_t __wc) throw ();
+extern int iswlower (wint_t __wc) throw ();
+extern int iswprint (wint_t __wc) throw ();
+extern int iswpunct (wint_t __wc) throw ();
+extern int iswspace (wint_t __wc) throw ();
+extern int iswupper (wint_t __wc) throw ();
+extern int iswxdigit (wint_t __wc) throw ();
+extern int iswblank (wint_t __wc) throw ();
+extern wctype_t wctype (__const char *__property) throw ();
+extern int iswctype (wint_t __wc, wctype_t __desc) throw ();
+typedef __const __int32_t *wctrans_t;
+extern wint_t towlower (wint_t __wc) throw ();
+extern wint_t towupper (wint_t __wc) throw ();
+}
+extern "C" {
+extern wctrans_t wctrans (__const char *__property) throw ();
+extern wint_t towctrans (wint_t __wc, wctrans_t __desc) throw ();
+extern int iswalnum_l (wint_t __wc, __locale_t __locale) throw ();
+extern int iswalpha_l (wint_t __wc, __locale_t __locale) throw ();
+extern int iswcntrl_l (wint_t __wc, __locale_t __locale) throw ();
+extern int iswdigit_l (wint_t __wc, __locale_t __locale) throw ();
+extern int iswgraph_l (wint_t __wc, __locale_t __locale) throw ();
+extern int iswlower_l (wint_t __wc, __locale_t __locale) throw ();
+extern int iswprint_l (wint_t __wc, __locale_t __locale) throw ();
+extern int iswpunct_l (wint_t __wc, __locale_t __locale) throw ();
+extern int iswspace_l (wint_t __wc, __locale_t __locale) throw ();
+extern int iswupper_l (wint_t __wc, __locale_t __locale) throw ();
+extern int iswxdigit_l (wint_t __wc, __locale_t __locale) throw ();
+extern int iswblank_l (wint_t __wc, __locale_t __locale) throw ();
+extern wctype_t wctype_l (__const char *__property, __locale_t __locale)
+     throw ();
+extern int iswctype_l (wint_t __wc, wctype_t __desc, __locale_t __locale)
+     throw ();
+extern wint_t towlower_l (wint_t __wc, __locale_t __locale) throw ();
+extern wint_t towupper_l (wint_t __wc, __locale_t __locale) throw ();
+extern wctrans_t wctrans_l (__const char *__property, __locale_t __locale)
+     throw ();
+extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc,
+      __locale_t __locale) throw ();
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  using ::wctrans_t;
+  using ::wctype_t;
+  using ::wint_t;
+  using ::iswalnum;
+  using ::iswalpha;
+  using ::iswblank;
+  using ::iswcntrl;
+  using ::iswctype;
+  using ::iswdigit;
+  using ::iswgraph;
+  using ::iswlower;
+  using ::iswprint;
+  using ::iswpunct;
+  using ::iswspace;
+  using ::iswupper;
+  using ::iswxdigit;
+  using ::towctrans;
+  using ::towlower;
+  using ::towupper;
+  using ::wctrans;
+  using ::wctype;
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  struct ctype_base
+  {
+    typedef const int* __to_type;
+    typedef unsigned short mask;
+    static const mask upper = _ISupper;
+    static const mask lower = _ISlower;
+    static const mask alpha = _ISalpha;
+    static const mask digit = _ISdigit;
+    static const mask xdigit = _ISxdigit;
+    static const mask space = _ISspace;
+    static const mask print = _ISprint;
+    static const mask graph = _ISalpha | _ISdigit | _ISpunct;
+    static const mask cntrl = _IScntrl;
+    static const mask punct = _ISpunct;
+    static const mask alnum = _ISalpha | _ISdigit;
+  };
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits>
+    class istreambuf_iterator
+    : public iterator<input_iterator_tag, _CharT, typename _Traits::off_type,
+        _CharT*, _CharT&>
+    {
+    public:
+      typedef _CharT char_type;
+      typedef _Traits traits_type;
+      typedef typename _Traits::int_type int_type;
+      typedef basic_streambuf<_CharT, _Traits> streambuf_type;
+      typedef basic_istream<_CharT, _Traits> istream_type;
+      template<typename _CharT2>
+ friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+                      ostreambuf_iterator<_CharT2> >::__type
+ copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
+      ostreambuf_iterator<_CharT2>);
+      template<bool _IsMove, typename _CharT2>
+ friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+            _CharT2*>::__type
+ __copy_move_a2(istreambuf_iterator<_CharT2>,
+         istreambuf_iterator<_CharT2>, _CharT2*);
+      template<typename _CharT2>
+ friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+               istreambuf_iterator<_CharT2> >::__type
+ find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
+      const _CharT2&);
+    private:
+      mutable streambuf_type* _M_sbuf;
+      mutable int_type _M_c;
+    public:
+      istreambuf_iterator() throw()
+      : _M_sbuf(0), _M_c(traits_type::eof()) { }
+      istreambuf_iterator(istream_type& __s) throw()
+      : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { }
+      istreambuf_iterator(streambuf_type* __s) throw()
+      : _M_sbuf(__s), _M_c(traits_type::eof()) { }
+      char_type
+      operator*() const
+      {
+ return traits_type::to_char_type(_M_get());
+      }
+      istreambuf_iterator&
+      operator++()
+      {
+ ;
+ if (_M_sbuf)
+   {
+     _M_sbuf->sbumpc();
+     _M_c = traits_type::eof();
+   }
+ return *this;
+      }
+      istreambuf_iterator
+      operator++(int)
+      {
+ ;
+ istreambuf_iterator __old = *this;
+ if (_M_sbuf)
+   {
+     __old._M_c = _M_sbuf->sbumpc();
+     _M_c = traits_type::eof();
+   }
+ return __old;
+      }
+      bool
+      equal(const istreambuf_iterator& __b) const
+      { return _M_at_eof() == __b._M_at_eof(); }
+    private:
+      int_type
+      _M_get() const
+      {
+ const int_type __eof = traits_type::eof();
+ int_type __ret = __eof;
+ if (_M_sbuf)
+   {
+     if (!traits_type::eq_int_type(_M_c, __eof))
+       __ret = _M_c;
+     else if (!traits_type::eq_int_type((__ret = _M_sbuf->sgetc()),
+            __eof))
+       _M_c = __ret;
+     else
+       _M_sbuf = 0;
+   }
+ return __ret;
+      }
+      bool
+      _M_at_eof() const
+      {
+ const int_type __eof = traits_type::eof();
+ return traits_type::eq_int_type(_M_get(), __eof);
+      }
+    };
+  template<typename _CharT, typename _Traits>
+    inline bool
+    operator==(const istreambuf_iterator<_CharT, _Traits>& __a,
+        const istreambuf_iterator<_CharT, _Traits>& __b)
+    { return __a.equal(__b); }
+  template<typename _CharT, typename _Traits>
+    inline bool
+    operator!=(const istreambuf_iterator<_CharT, _Traits>& __a,
+        const istreambuf_iterator<_CharT, _Traits>& __b)
+    { return !__a.equal(__b); }
+  template<typename _CharT, typename _Traits>
+    class ostreambuf_iterator
+    : public iterator<output_iterator_tag, void, void, void, void>
+    {
+    public:
+      typedef _CharT char_type;
+      typedef _Traits traits_type;
+      typedef basic_streambuf<_CharT, _Traits> streambuf_type;
+      typedef basic_ostream<_CharT, _Traits> ostream_type;
+      template<typename _CharT2>
+ friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+                      ostreambuf_iterator<_CharT2> >::__type
+ copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
+      ostreambuf_iterator<_CharT2>);
+    private:
+      streambuf_type* _M_sbuf;
+      bool _M_failed;
+    public:
+      ostreambuf_iterator(ostream_type& __s) throw ()
+      : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { }
+      ostreambuf_iterator(streambuf_type* __s) throw ()
+      : _M_sbuf(__s), _M_failed(!_M_sbuf) { }
+      ostreambuf_iterator&
+      operator=(_CharT __c)
+      {
+ if (!_M_failed &&
+     _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof()))
+   _M_failed = true;
+ return *this;
+      }
+      ostreambuf_iterator&
+      operator*()
+      { return *this; }
+      ostreambuf_iterator&
+      operator++(int)
+      { return *this; }
+      ostreambuf_iterator&
+      operator++()
+      { return *this; }
+      bool
+      failed() const throw()
+      { return _M_failed; }
+      ostreambuf_iterator&
+      _M_put(const _CharT* __ws, streamsize __len)
+      {
+ if (__builtin_expect(!_M_failed, true)
+     && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len,
+    false))
+   _M_failed = true;
+ return *this;
+      }
+    };
+  template<typename _CharT>
+    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+                           ostreambuf_iterator<_CharT> >::__type
+    copy(istreambuf_iterator<_CharT> __first,
+  istreambuf_iterator<_CharT> __last,
+  ostreambuf_iterator<_CharT> __result)
+    {
+      if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed)
+ {
+   bool __ineof;
+   __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof);
+   if (!__ineof)
+     __result._M_failed = true;
+ }
+      return __result;
+    }
+  template<bool _IsMove, typename _CharT>
+    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+            ostreambuf_iterator<_CharT> >::__type
+    __copy_move_a2(_CharT* __first, _CharT* __last,
+     ostreambuf_iterator<_CharT> __result)
+    {
+      const streamsize __num = __last - __first;
+      if (__num > 0)
+ __result._M_put(__first, __num);
+      return __result;
+    }
+  template<bool _IsMove, typename _CharT>
+    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+        ostreambuf_iterator<_CharT> >::__type
+    __copy_move_a2(const _CharT* __first, const _CharT* __last,
+     ostreambuf_iterator<_CharT> __result)
+    {
+      const streamsize __num = __last - __first;
+      if (__num > 0)
+ __result._M_put(__first, __num);
+      return __result;
+    }
+  template<bool _IsMove, typename _CharT>
+    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+            _CharT*>::__type
+    __copy_move_a2(istreambuf_iterator<_CharT> __first,
+     istreambuf_iterator<_CharT> __last, _CharT* __result)
+    {
+      typedef istreambuf_iterator<_CharT> __is_iterator_type;
+      typedef typename __is_iterator_type::traits_type traits_type;
+      typedef typename __is_iterator_type::streambuf_type streambuf_type;
+      typedef typename traits_type::int_type int_type;
+      if (__first._M_sbuf && !__last._M_sbuf)
+ {
+   streambuf_type* __sb = __first._M_sbuf;
+   int_type __c = __sb->sgetc();
+   while (!traits_type::eq_int_type(__c, traits_type::eof()))
+     {
+       const streamsize __n = __sb->egptr() - __sb->gptr();
+       if (__n > 1)
+  {
+    traits_type::copy(__result, __sb->gptr(), __n);
+    __sb->gbump(__n);
+    __result += __n;
+    __c = __sb->underflow();
+  }
+       else
+  {
+    *__result++ = traits_type::to_char_type(__c);
+    __c = __sb->snextc();
+  }
+     }
+ }
+      return __result;
+    }
+  template<typename _CharT>
+    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+          istreambuf_iterator<_CharT> >::__type
+    find(istreambuf_iterator<_CharT> __first,
+  istreambuf_iterator<_CharT> __last, const _CharT& __val)
+    {
+      typedef istreambuf_iterator<_CharT> __is_iterator_type;
+      typedef typename __is_iterator_type::traits_type traits_type;
+      typedef typename __is_iterator_type::streambuf_type streambuf_type;
+      typedef typename traits_type::int_type int_type;
+      if (__first._M_sbuf && !__last._M_sbuf)
+ {
+   const int_type __ival = traits_type::to_int_type(__val);
+   streambuf_type* __sb = __first._M_sbuf;
+   int_type __c = __sb->sgetc();
+   while (!traits_type::eq_int_type(__c, traits_type::eof())
+   && !traits_type::eq_int_type(__c, __ival))
+     {
+       streamsize __n = __sb->egptr() - __sb->gptr();
+       if (__n > 1)
+  {
+    const _CharT* __p = traits_type::find(__sb->gptr(),
+       __n, __val);
+    if (__p)
+      __n = __p - __sb->gptr();
+    __sb->gbump(__n);
+    __c = __sb->sgetc();
+  }
+       else
+  __c = __sb->snextc();
+     }
+   if (!traits_type::eq_int_type(__c, traits_type::eof()))
+     __first._M_c = __c;
+   else
+     __first._M_sbuf = 0;
+ }
+      return __first;
+    }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Tv>
+    void
+    __convert_to_v(const char* __in, _Tv& __out, ios_base::iostate& __err,
+     const __c_locale& __cloc);
+  template<>
+    void
+    __convert_to_v(const char*, float&, ios_base::iostate&,
+     const __c_locale&);
+  template<>
+    void
+    __convert_to_v(const char*, double&, ios_base::iostate&,
+     const __c_locale&);
+  template<>
+    void
+    __convert_to_v(const char*, long double&, ios_base::iostate&,
+     const __c_locale&);
+  template<typename _CharT, typename _Traits>
+    struct __pad
+    {
+      static void
+      _S_pad(ios_base& __io, _CharT __fill, _CharT* __news,
+      const _CharT* __olds, streamsize __newlen, streamsize __oldlen);
+    };
+  template<typename _CharT>
+    _CharT*
+    __add_grouping(_CharT* __s, _CharT __sep,
+     const char* __gbeg, size_t __gsize,
+     const _CharT* __first, const _CharT* __last);
+  template<typename _CharT>
+    inline
+    ostreambuf_iterator<_CharT>
+    __write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len)
+    {
+      __s._M_put(__ws, __len);
+      return __s;
+    }
+  template<typename _CharT, typename _OutIter>
+    inline
+    _OutIter
+    __write(_OutIter __s, const _CharT* __ws, int __len)
+    {
+      for (int __j = 0; __j < __len; __j++, ++__s)
+ *__s = __ws[__j];
+      return __s;
+    }
+  template<typename _CharT>
+    class __ctype_abstract_base : public locale::facet, public ctype_base
+    {
+    public:
+      typedef _CharT char_type;
+      bool
+      is(mask __m, char_type __c) const
+      { return this->do_is(__m, __c); }
+      const char_type*
+      is(const char_type *__lo, const char_type *__hi, mask *__vec) const
+      { return this->do_is(__lo, __hi, __vec); }
+      const char_type*
+      scan_is(mask __m, const char_type* __lo, const char_type* __hi) const
+      { return this->do_scan_is(__m, __lo, __hi); }
+      const char_type*
+      scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
+      { return this->do_scan_not(__m, __lo, __hi); }
+      char_type
+      toupper(char_type __c) const
+      { return this->do_toupper(__c); }
+      const char_type*
+      toupper(char_type *__lo, const char_type* __hi) const
+      { return this->do_toupper(__lo, __hi); }
+      char_type
+      tolower(char_type __c) const
+      { return this->do_tolower(__c); }
+      const char_type*
+      tolower(char_type* __lo, const char_type* __hi) const
+      { return this->do_tolower(__lo, __hi); }
+      char_type
+      widen(char __c) const
+      { return this->do_widen(__c); }
+      const char*
+      widen(const char* __lo, const char* __hi, char_type* __to) const
+      { return this->do_widen(__lo, __hi, __to); }
+      char
+      narrow(char_type __c, char __dfault) const
+      { return this->do_narrow(__c, __dfault); }
+      const char_type*
+      narrow(const char_type* __lo, const char_type* __hi,
+       char __dfault, char *__to) const
+      { return this->do_narrow(__lo, __hi, __dfault, __to); }
+    protected:
+      explicit
+      __ctype_abstract_base(size_t __refs = 0): facet(__refs) { }
+      virtual
+      ~__ctype_abstract_base() { }
+      virtual bool
+      do_is(mask __m, char_type __c) const = 0;
+      virtual const char_type*
+      do_is(const char_type* __lo, const char_type* __hi,
+     mask* __vec) const = 0;
+      virtual const char_type*
+      do_scan_is(mask __m, const char_type* __lo,
+   const char_type* __hi) const = 0;
+      virtual const char_type*
+      do_scan_not(mask __m, const char_type* __lo,
+    const char_type* __hi) const = 0;
+      virtual char_type
+      do_toupper(char_type) const = 0;
+      virtual const char_type*
+      do_toupper(char_type* __lo, const char_type* __hi) const = 0;
+      virtual char_type
+      do_tolower(char_type) const = 0;
+      virtual const char_type*
+      do_tolower(char_type* __lo, const char_type* __hi) const = 0;
+      virtual char_type
+      do_widen(char) const = 0;
+      virtual const char*
+      do_widen(const char* __lo, const char* __hi,
+        char_type* __dest) const = 0;
+      virtual char
+      do_narrow(char_type, char __dfault) const = 0;
+      virtual const char_type*
+      do_narrow(const char_type* __lo, const char_type* __hi,
+  char __dfault, char* __dest) const = 0;
+    };
+  template<typename _CharT>
+    class ctype : public __ctype_abstract_base<_CharT>
+    {
+    public:
+      typedef _CharT char_type;
+      typedef typename __ctype_abstract_base<_CharT>::mask mask;
+      static locale::id id;
+      explicit
+      ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { }
+   protected:
+      virtual
+      ~ctype();
+      virtual bool
+      do_is(mask __m, char_type __c) const;
+      virtual const char_type*
+      do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;
+      virtual const char_type*
+      do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;
+      virtual const char_type*
+      do_scan_not(mask __m, const char_type* __lo,
+    const char_type* __hi) const;
+      virtual char_type
+      do_toupper(char_type __c) const;
+      virtual const char_type*
+      do_toupper(char_type* __lo, const char_type* __hi) const;
+      virtual char_type
+      do_tolower(char_type __c) const;
+      virtual const char_type*
+      do_tolower(char_type* __lo, const char_type* __hi) const;
+      virtual char_type
+      do_widen(char __c) const;
+      virtual const char*
+      do_widen(const char* __lo, const char* __hi, char_type* __dest) const;
+      virtual char
+      do_narrow(char_type, char __dfault) const;
+      virtual const char_type*
+      do_narrow(const char_type* __lo, const char_type* __hi,
+  char __dfault, char* __dest) const;
+    };
+  template<typename _CharT>
+    locale::id ctype<_CharT>::id;
+  template<>
+    class ctype<char> : public locale::facet, public ctype_base
+    {
+    public:
+      typedef char char_type;
+    protected:
+      __c_locale _M_c_locale_ctype;
+      bool _M_del;
+      __to_type _M_toupper;
+      __to_type _M_tolower;
+      const mask* _M_table;
+      mutable char _M_widen_ok;
+      mutable char _M_widen[1 + static_cast<unsigned char>(-1)];
+      mutable char _M_narrow[1 + static_cast<unsigned char>(-1)];
+      mutable char _M_narrow_ok;
+    public:
+      static locale::id id;
+      static const size_t table_size = 1 + static_cast<unsigned char>(-1);
+      explicit
+      ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0);
+      explicit
+      ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false,
+     size_t __refs = 0);
+      inline bool
+      is(mask __m, char __c) const;
+      inline const char*
+      is(const char* __lo, const char* __hi, mask* __vec) const;
+      inline const char*
+      scan_is(mask __m, const char* __lo, const char* __hi) const;
+      inline const char*
+      scan_not(mask __m, const char* __lo, const char* __hi) const;
+      char_type
+      toupper(char_type __c) const
+      { return this->do_toupper(__c); }
+      const char_type*
+      toupper(char_type *__lo, const char_type* __hi) const
+      { return this->do_toupper(__lo, __hi); }
+      char_type
+      tolower(char_type __c) const
+      { return this->do_tolower(__c); }
+      const char_type*
+      tolower(char_type* __lo, const char_type* __hi) const
+      { return this->do_tolower(__lo, __hi); }
+      char_type
+      widen(char __c) const
+      {
+ if (_M_widen_ok)
+   return _M_widen[static_cast<unsigned char>(__c)];
+ this->_M_widen_init();
+ return this->do_widen(__c);
+      }
+      const char*
+      widen(const char* __lo, const char* __hi, char_type* __to) const
+      {
+ if (_M_widen_ok == 1)
+   {
+     __builtin_memcpy(__to, __lo, __hi - __lo);
+     return __hi;
+   }
+ if (!_M_widen_ok)
+   _M_widen_init();
+ return this->do_widen(__lo, __hi, __to);
+      }
+      char
+      narrow(char_type __c, char __dfault) const
+      {
+ if (_M_narrow[static_cast<unsigned char>(__c)])
+   return _M_narrow[static_cast<unsigned char>(__c)];
+ const char __t = do_narrow(__c, __dfault);
+ if (__t != __dfault)
+   _M_narrow[static_cast<unsigned char>(__c)] = __t;
+ return __t;
+      }
+      const char_type*
+      narrow(const char_type* __lo, const char_type* __hi,
+      char __dfault, char *__to) const
+      {
+ if (__builtin_expect(_M_narrow_ok == 1, true))
+   {
+     __builtin_memcpy(__to, __lo, __hi - __lo);
+     return __hi;
+   }
+ if (!_M_narrow_ok)
+   _M_narrow_init();
+ return this->do_narrow(__lo, __hi, __dfault, __to);
+      }
+      const mask*
+      table() const throw()
+      { return _M_table; }
+      static const mask*
+      classic_table() throw();
+    protected:
+      virtual
+      ~ctype();
+      virtual char_type
+      do_toupper(char_type) const;
+      virtual const char_type*
+      do_toupper(char_type* __lo, const char_type* __hi) const;
+      virtual char_type
+      do_tolower(char_type) const;
+      virtual const char_type*
+      do_tolower(char_type* __lo, const char_type* __hi) const;
+      virtual char_type
+      do_widen(char __c) const
+      { return __c; }
+      virtual const char*
+      do_widen(const char* __lo, const char* __hi, char_type* __dest) const
+      {
+ __builtin_memcpy(__dest, __lo, __hi - __lo);
+ return __hi;
+      }
+      virtual char
+      do_narrow(char_type __c, char) const
+      { return __c; }
+      virtual const char_type*
+      do_narrow(const char_type* __lo, const char_type* __hi,
+  char, char* __dest) const
+      {
+ __builtin_memcpy(__dest, __lo, __hi - __lo);
+ return __hi;
+      }
+    private:
+      void _M_narrow_init() const;
+      void _M_widen_init() const;
+    };
+  template<>
+    class ctype<wchar_t> : public __ctype_abstract_base<wchar_t>
+    {
+    public:
+      typedef wchar_t char_type;
+      typedef wctype_t __wmask_type;
+    protected:
+      __c_locale _M_c_locale_ctype;
+      bool _M_narrow_ok;
+      char _M_narrow[128];
+      wint_t _M_widen[1 + static_cast<unsigned char>(-1)];
+      mask _M_bit[16];
+      __wmask_type _M_wmask[16];
+    public:
+      static locale::id id;
+      explicit
+      ctype(size_t __refs = 0);
+      explicit
+      ctype(__c_locale __cloc, size_t __refs = 0);
+    protected:
+      __wmask_type
+      _M_convert_to_wmask(const mask __m) const;
+      virtual
+      ~ctype();
+      virtual bool
+      do_is(mask __m, char_type __c) const;
+      virtual const char_type*
+      do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;
+      virtual const char_type*
+      do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;
+      virtual const char_type*
+      do_scan_not(mask __m, const char_type* __lo,
+    const char_type* __hi) const;
+      virtual char_type
+      do_toupper(char_type) const;
+      virtual const char_type*
+      do_toupper(char_type* __lo, const char_type* __hi) const;
+      virtual char_type
+      do_tolower(char_type) const;
+      virtual const char_type*
+      do_tolower(char_type* __lo, const char_type* __hi) const;
+      virtual char_type
+      do_widen(char) const;
+      virtual const char*
+      do_widen(const char* __lo, const char* __hi, char_type* __dest) const;
+      virtual char
+      do_narrow(char_type, char __dfault) const;
+      virtual const char_type*
+      do_narrow(const char_type* __lo, const char_type* __hi,
+  char __dfault, char* __dest) const;
+      void
+      _M_initialize_ctype();
+    };
+  template<typename _CharT>
+    class ctype_byname : public ctype<_CharT>
+    {
+    public:
+      typedef typename ctype<_CharT>::mask mask;
+      explicit
+      ctype_byname(const char* __s, size_t __refs = 0);
+    protected:
+      virtual
+      ~ctype_byname() { };
+    };
+  template<>
+    class ctype_byname<char> : public ctype<char>
+    {
+    public:
+      explicit
+      ctype_byname(const char* __s, size_t __refs = 0);
+    protected:
+      virtual
+      ~ctype_byname();
+    };
+  template<>
+    class ctype_byname<wchar_t> : public ctype<wchar_t>
+    {
+    public:
+      explicit
+      ctype_byname(const char* __s, size_t __refs = 0);
+    protected:
+      virtual
+      ~ctype_byname();
+    };
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  bool
+  ctype<char>::
+  is(mask __m, char __c) const
+  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
+  const char*
+  ctype<char>::
+  is(const char* __low, const char* __high, mask* __vec) const
+  {
+    while (__low < __high)
+      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
+    return __high;
+  }
+  const char*
+  ctype<char>::
+  scan_is(mask __m, const char* __low, const char* __high) const
+  {
+    while (__low < __high
+    && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
+      ++__low;
+    return __low;
+  }
+  const char*
+  ctype<char>::
+  scan_not(mask __m, const char* __low, const char* __high) const
+  {
+    while (__low < __high
+    && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
+      ++__low;
+    return __low;
+  }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  class __num_base
+  {
+  public:
+    enum
+      {
+        _S_ominus,
+        _S_oplus,
+        _S_ox,
+        _S_oX,
+        _S_odigits,
+        _S_odigits_end = _S_odigits + 16,
+        _S_oudigits = _S_odigits_end,
+        _S_oudigits_end = _S_oudigits + 16,
+        _S_oe = _S_odigits + 14,
+        _S_oE = _S_oudigits + 14,
+ _S_oend = _S_oudigits_end
+      };
+    static const char* _S_atoms_out;
+    static const char* _S_atoms_in;
+    enum
+    {
+      _S_iminus,
+      _S_iplus,
+      _S_ix,
+      _S_iX,
+      _S_izero,
+      _S_ie = _S_izero + 14,
+      _S_iE = _S_izero + 20,
+      _S_iend = 26
+    };
+    static void
+    _S_format_float(const ios_base& __io, char* __fptr, char __mod);
+  };
+  template<typename _CharT>
+    struct __numpunct_cache : public locale::facet
+    {
+      const char* _M_grouping;
+      size_t _M_grouping_size;
+      bool _M_use_grouping;
+      const _CharT* _M_truename;
+      size_t _M_truename_size;
+      const _CharT* _M_falsename;
+      size_t _M_falsename_size;
+      _CharT _M_decimal_point;
+      _CharT _M_thousands_sep;
+      _CharT _M_atoms_out[__num_base::_S_oend];
+      _CharT _M_atoms_in[__num_base::_S_iend];
+      bool _M_allocated;
+      __numpunct_cache(size_t __refs = 0) : facet(__refs),
+      _M_grouping(__null), _M_grouping_size(0), _M_use_grouping(false),
+      _M_truename(__null), _M_truename_size(0), _M_falsename(__null),
+      _M_falsename_size(0), _M_decimal_point(_CharT()),
+      _M_thousands_sep(_CharT()), _M_allocated(false)
+      { }
+      ~__numpunct_cache();
+      void
+      _M_cache(const locale& __loc);
+    private:
+      __numpunct_cache&
+      operator=(const __numpunct_cache&);
+      explicit
+      __numpunct_cache(const __numpunct_cache&);
+    };
+  template<typename _CharT>
+    __numpunct_cache<_CharT>::~__numpunct_cache()
+    {
+      if (_M_allocated)
+ {
+   delete [] _M_grouping;
+   delete [] _M_truename;
+   delete [] _M_falsename;
+ }
+    }
+  template<typename _CharT>
+    class numpunct : public locale::facet
+    {
+    public:
+      typedef _CharT char_type;
+      typedef basic_string<_CharT> string_type;
+      typedef __numpunct_cache<_CharT> __cache_type;
+    protected:
+      __cache_type* _M_data;
+    public:
+      static locale::id id;
+      explicit
+      numpunct(size_t __refs = 0) : facet(__refs), _M_data(__null)
+      { _M_initialize_numpunct(); }
+      explicit
+      numpunct(__cache_type* __cache, size_t __refs = 0)
+      : facet(__refs), _M_data(__cache)
+      { _M_initialize_numpunct(); }
+      explicit
+      numpunct(__c_locale __cloc, size_t __refs = 0)
+      : facet(__refs), _M_data(__null)
+      { _M_initialize_numpunct(__cloc); }
+      char_type
+      decimal_point() const
+      { return this->do_decimal_point(); }
+      char_type
+      thousands_sep() const
+      { return this->do_thousands_sep(); }
+      string
+      grouping() const
+      { return this->do_grouping(); }
+      string_type
+      truename() const
+      { return this->do_truename(); }
+      string_type
+      falsename() const
+      { return this->do_falsename(); }
+    protected:
+      virtual
+      ~numpunct();
+      virtual char_type
+      do_decimal_point() const
+      { return _M_data->_M_decimal_point; }
+      virtual char_type
+      do_thousands_sep() const
+      { return _M_data->_M_thousands_sep; }
+      virtual string
+      do_grouping() const
+      { return _M_data->_M_grouping; }
+      virtual string_type
+      do_truename() const
+      { return _M_data->_M_truename; }
+      virtual string_type
+      do_falsename() const
+      { return _M_data->_M_falsename; }
+      void
+      _M_initialize_numpunct(__c_locale __cloc = __null);
+    };
+  template<typename _CharT>
+    locale::id numpunct<_CharT>::id;
+  template<>
+    numpunct<char>::~numpunct();
+  template<>
+    void
+    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc);
+  template<>
+    numpunct<wchar_t>::~numpunct();
+  template<>
+    void
+    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc);
+  template<typename _CharT>
+    class numpunct_byname : public numpunct<_CharT>
+    {
+    public:
+      typedef _CharT char_type;
+      typedef basic_string<_CharT> string_type;
+      explicit
+      numpunct_byname(const char* __s, size_t __refs = 0)
+      : numpunct<_CharT>(__refs)
+      {
+ if (__builtin_strcmp(__s, "C") != 0
+     && __builtin_strcmp(__s, "POSIX") != 0)
+   {
+     __c_locale __tmp;
+     this->_S_create_c_locale(__tmp, __s);
+     this->_M_initialize_numpunct(__tmp);
+     this->_S_destroy_c_locale(__tmp);
+   }
+      }
+    protected:
+      virtual
+      ~numpunct_byname() { }
+    };
+  template<typename _CharT, typename _InIter>
+    class num_get : public locale::facet
+    {
+    public:
+      typedef _CharT char_type;
+      typedef _InIter iter_type;
+      static locale::id id;
+      explicit
+      num_get(size_t __refs = 0) : facet(__refs) { }
+      iter_type
+      get(iter_type __in, iter_type __end, ios_base& __io,
+   ios_base::iostate& __err, bool& __v) const
+      { return this->do_get(__in, __end, __io, __err, __v); }
+      iter_type
+      get(iter_type __in, iter_type __end, ios_base& __io,
+   ios_base::iostate& __err, long& __v) const
+      { return this->do_get(__in, __end, __io, __err, __v); }
+      iter_type
+      get(iter_type __in, iter_type __end, ios_base& __io,
+   ios_base::iostate& __err, unsigned short& __v) const
+      { return this->do_get(__in, __end, __io, __err, __v); }
+      iter_type
+      get(iter_type __in, iter_type __end, ios_base& __io,
+   ios_base::iostate& __err, unsigned int& __v) const
+      { return this->do_get(__in, __end, __io, __err, __v); }
+      iter_type
+      get(iter_type __in, iter_type __end, ios_base& __io,
+   ios_base::iostate& __err, unsigned long& __v) const
+      { return this->do_get(__in, __end, __io, __err, __v); }
+      iter_type
+      get(iter_type __in, iter_type __end, ios_base& __io,
+   ios_base::iostate& __err, long long& __v) const
+      { return this->do_get(__in, __end, __io, __err, __v); }
+      iter_type
+      get(iter_type __in, iter_type __end, ios_base& __io,
+   ios_base::iostate& __err, unsigned long long& __v) const
+      { return this->do_get(__in, __end, __io, __err, __v); }
+      iter_type
+      get(iter_type __in, iter_type __end, ios_base& __io,
+   ios_base::iostate& __err, float& __v) const
+      { return this->do_get(__in, __end, __io, __err, __v); }
+      iter_type
+      get(iter_type __in, iter_type __end, ios_base& __io,
+   ios_base::iostate& __err, double& __v) const
+      { return this->do_get(__in, __end, __io, __err, __v); }
+      iter_type
+      get(iter_type __in, iter_type __end, ios_base& __io,
+   ios_base::iostate& __err, long double& __v) const
+      { return this->do_get(__in, __end, __io, __err, __v); }
+      iter_type
+      get(iter_type __in, iter_type __end, ios_base& __io,
+   ios_base::iostate& __err, void*& __v) const
+      { return this->do_get(__in, __end, __io, __err, __v); }
+    protected:
+      virtual ~num_get() { }
+      iter_type
+      _M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&,
+         string&) const;
+      template<typename _ValueT>
+        iter_type
+        _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&,
+         _ValueT&) const;
+      template<typename _CharT2>
+      typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type
+        _M_find(const _CharT2*, size_t __len, _CharT2 __c) const
+        {
+   int __ret = -1;
+   if (__len <= 10)
+     {
+       if (__c >= _CharT2('0') && __c < _CharT2(_CharT2('0') + __len))
+  __ret = __c - _CharT2('0');
+     }
+   else
+     {
+       if (__c >= _CharT2('0') && __c <= _CharT2('9'))
+  __ret = __c - _CharT2('0');
+       else if (__c >= _CharT2('a') && __c <= _CharT2('f'))
+  __ret = 10 + (__c - _CharT2('a'));
+       else if (__c >= _CharT2('A') && __c <= _CharT2('F'))
+  __ret = 10 + (__c - _CharT2('A'));
+     }
+   return __ret;
+ }
+      template<typename _CharT2>
+      typename __gnu_cxx::__enable_if<!__is_char<_CharT2>::__value,
+          int>::__type
+        _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const
+        {
+   int __ret = -1;
+   const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c);
+   if (__q)
+     {
+       __ret = __q - __zero;
+       if (__ret > 15)
+  __ret -= 6;
+     }
+   return __ret;
+ }
+      virtual iter_type
+      do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const;
+      virtual iter_type
+      do_get(iter_type __beg, iter_type __end, ios_base& __io,
+      ios_base::iostate& __err, long& __v) const
+      { return _M_extract_int(__beg, __end, __io, __err, __v); }
+      virtual iter_type
+      do_get(iter_type __beg, iter_type __end, ios_base& __io,
+      ios_base::iostate& __err, unsigned short& __v) const
+      { return _M_extract_int(__beg, __end, __io, __err, __v); }
+      virtual iter_type
+      do_get(iter_type __beg, iter_type __end, ios_base& __io,
+      ios_base::iostate& __err, unsigned int& __v) const
+      { return _M_extract_int(__beg, __end, __io, __err, __v); }
+      virtual iter_type
+      do_get(iter_type __beg, iter_type __end, ios_base& __io,
+      ios_base::iostate& __err, unsigned long& __v) const
+      { return _M_extract_int(__beg, __end, __io, __err, __v); }
+      virtual iter_type
+      do_get(iter_type __beg, iter_type __end, ios_base& __io,
+      ios_base::iostate& __err, long long& __v) const
+      { return _M_extract_int(__beg, __end, __io, __err, __v); }
+      virtual iter_type
+      do_get(iter_type __beg, iter_type __end, ios_base& __io,
+      ios_base::iostate& __err, unsigned long long& __v) const
+      { return _M_extract_int(__beg, __end, __io, __err, __v); }
+      virtual iter_type
+      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+      float&) const;
+      virtual iter_type
+      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+      double&) const;
+      virtual iter_type
+      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+      long double&) const;
+      virtual iter_type
+      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+      void*&) const;
+    };
+  template<typename _CharT, typename _InIter>
+    locale::id num_get<_CharT, _InIter>::id;
+  template<typename _CharT, typename _OutIter>
+    class num_put : public locale::facet
+    {
+    public:
+      typedef _CharT char_type;
+      typedef _OutIter iter_type;
+      static locale::id id;
+      explicit
+      num_put(size_t __refs = 0) : facet(__refs) { }
+      iter_type
+      put(iter_type __s, ios_base& __f, char_type __fill, bool __v) const
+      { return this->do_put(__s, __f, __fill, __v); }
+      iter_type
+      put(iter_type __s, ios_base& __f, char_type __fill, long __v) const
+      { return this->do_put(__s, __f, __fill, __v); }
+      iter_type
+      put(iter_type __s, ios_base& __f, char_type __fill,
+   unsigned long __v) const
+      { return this->do_put(__s, __f, __fill, __v); }
+      iter_type
+      put(iter_type __s, ios_base& __f, char_type __fill, long long __v) const
+      { return this->do_put(__s, __f, __fill, __v); }
+      iter_type
+      put(iter_type __s, ios_base& __f, char_type __fill,
+   unsigned long long __v) const
+      { return this->do_put(__s, __f, __fill, __v); }
+      iter_type
+      put(iter_type __s, ios_base& __f, char_type __fill, double __v) const
+      { return this->do_put(__s, __f, __fill, __v); }
+      iter_type
+      put(iter_type __s, ios_base& __f, char_type __fill,
+   long double __v) const
+      { return this->do_put(__s, __f, __fill, __v); }
+      iter_type
+      put(iter_type __s, ios_base& __f, char_type __fill,
+   const void* __v) const
+      { return this->do_put(__s, __f, __fill, __v); }
+    protected:
+      template<typename _ValueT>
+        iter_type
+        _M_insert_float(iter_type, ios_base& __io, char_type __fill,
+   char __mod, _ValueT __v) const;
+      void
+      _M_group_float(const char* __grouping, size_t __grouping_size,
+       char_type __sep, const char_type* __p, char_type* __new,
+       char_type* __cs, int& __len) const;
+      template<typename _ValueT>
+        iter_type
+        _M_insert_int(iter_type, ios_base& __io, char_type __fill,
+        _ValueT __v) const;
+      void
+      _M_group_int(const char* __grouping, size_t __grouping_size,
+     char_type __sep, ios_base& __io, char_type* __new,
+     char_type* __cs, int& __len) const;
+      void
+      _M_pad(char_type __fill, streamsize __w, ios_base& __io,
+      char_type* __new, const char_type* __cs, int& __len) const;
+      virtual
+      ~num_put() { };
+      virtual iter_type
+      do_put(iter_type, ios_base&, char_type __fill, bool __v) const;
+      virtual iter_type
+      do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
+      { return _M_insert_int(__s, __io, __fill, __v); }
+      virtual iter_type
+      do_put(iter_type __s, ios_base& __io, char_type __fill,
+      unsigned long __v) const
+      { return _M_insert_int(__s, __io, __fill, __v); }
+      virtual iter_type
+      do_put(iter_type __s, ios_base& __io, char_type __fill,
+      long long __v) const
+      { return _M_insert_int(__s, __io, __fill, __v); }
+      virtual iter_type
+      do_put(iter_type __s, ios_base& __io, char_type __fill,
+      unsigned long long __v) const
+      { return _M_insert_int(__s, __io, __fill, __v); }
+      virtual iter_type
+      do_put(iter_type, ios_base&, char_type __fill, double __v) const;
+      virtual iter_type
+      do_put(iter_type, ios_base&, char_type __fill, long double __v) const;
+      virtual iter_type
+      do_put(iter_type, ios_base&, char_type __fill, const void* __v) const;
+    };
+  template <typename _CharT, typename _OutIter>
+    locale::id num_put<_CharT, _OutIter>::id;
+  template<typename _CharT>
+    inline bool
+    isspace(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::space, __c); }
+  template<typename _CharT>
+    inline bool
+    isprint(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::print, __c); }
+  template<typename _CharT>
+    inline bool
+    iscntrl(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::cntrl, __c); }
+  template<typename _CharT>
+    inline bool
+    isupper(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::upper, __c); }
+  template<typename _CharT>
+    inline bool
+    islower(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); }
+  template<typename _CharT>
+    inline bool
+    isalpha(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alpha, __c); }
+  template<typename _CharT>
+    inline bool
+    isdigit(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::digit, __c); }
+  template<typename _CharT>
+    inline bool
+    ispunct(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::punct, __c); }
+  template<typename _CharT>
+    inline bool
+    isxdigit(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::xdigit, __c); }
+  template<typename _CharT>
+    inline bool
+    isalnum(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alnum, __c); }
+  template<typename _CharT>
+    inline bool
+    isgraph(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); }
+  template<typename _CharT>
+    inline _CharT
+    toupper(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).toupper(__c); }
+  template<typename _CharT>
+    inline _CharT
+    tolower(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).tolower(__c); }
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Facet>
+    struct __use_cache
+    {
+      const _Facet*
+      operator() (const locale& __loc) const;
+    };
+  template<typename _CharT>
+    struct __use_cache<__numpunct_cache<_CharT> >
+    {
+      const __numpunct_cache<_CharT>*
+      operator() (const locale& __loc) const
+      {
+ const size_t __i = numpunct<_CharT>::id._M_id();
+ const locale::facet** __caches = __loc._M_impl->_M_caches;
+ if (!__caches[__i])
+   {
+     __numpunct_cache<_CharT>* __tmp = __null;
+     try
+       {
+  __tmp = new __numpunct_cache<_CharT>;
+  __tmp->_M_cache(__loc);
+       }
+     catch(...)
+       {
+  delete __tmp;
+  throw;
+       }
+     __loc._M_impl->_M_install_cache(__tmp, __i);
+   }
+ return static_cast<const __numpunct_cache<_CharT>*>(__caches[__i]);
+      }
+    };
+  template<typename _CharT>
+    void
+    __numpunct_cache<_CharT>::_M_cache(const locale& __loc)
+    {
+      _M_allocated = true;
+      const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
+      _M_grouping_size = __np.grouping().size();
+      char* __grouping = new char[_M_grouping_size];
+      __np.grouping().copy(__grouping, _M_grouping_size);
+      _M_grouping = __grouping;
+      _M_use_grouping = (_M_grouping_size
+    && static_cast<signed char>(_M_grouping[0]) > 0
+    && (_M_grouping[0]
+        != __gnu_cxx::__numeric_traits<char>::__max));
+      _M_truename_size = __np.truename().size();
+      _CharT* __truename = new _CharT[_M_truename_size];
+      __np.truename().copy(__truename, _M_truename_size);
+      _M_truename = __truename;
+      _M_falsename_size = __np.falsename().size();
+      _CharT* __falsename = new _CharT[_M_falsename_size];
+      __np.falsename().copy(__falsename, _M_falsename_size);
+      _M_falsename = __falsename;
+      _M_decimal_point = __np.decimal_point();
+      _M_thousands_sep = __np.thousands_sep();
+      const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc);
+      __ct.widen(__num_base::_S_atoms_out,
+   __num_base::_S_atoms_out + __num_base::_S_oend, _M_atoms_out);
+      __ct.widen(__num_base::_S_atoms_in,
+   __num_base::_S_atoms_in + __num_base::_S_iend, _M_atoms_in);
+    }
+  bool
+  __verify_grouping(const char* __grouping, size_t __grouping_size,
+      const string& __grouping_tmp);
+  template<typename _CharT, typename _InIter>
+    _InIter
+    num_get<_CharT, _InIter>::
+    _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io,
+       ios_base::iostate& __err, string& __xtrc) const
+    {
+      typedef char_traits<_CharT> __traits_type;
+      typedef __numpunct_cache<_CharT> __cache_type;
+      __use_cache<__cache_type> __uc;
+      const locale& __loc = __io._M_getloc();
+      const __cache_type* __lc = __uc(__loc);
+      const _CharT* __lit = __lc->_M_atoms_in;
+      char_type __c = char_type();
+      bool __testeof = __beg == __end;
+      if (!__testeof)
+ {
+   __c = *__beg;
+   const bool __plus = __c == __lit[__num_base::_S_iplus];
+   if ((__plus || __c == __lit[__num_base::_S_iminus])
+       && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+       && !(__c == __lc->_M_decimal_point))
+     {
+       __xtrc += __plus ? '+' : '-';
+       if (++__beg != __end)
+  __c = *__beg;
+       else
+  __testeof = true;
+     }
+ }
+      bool __found_mantissa = false;
+      int __sep_pos = 0;
+      while (!__testeof)
+ {
+   if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+       || __c == __lc->_M_decimal_point)
+     break;
+   else if (__c == __lit[__num_base::_S_izero])
+     {
+       if (!__found_mantissa)
+  {
+    __xtrc += '0';
+    __found_mantissa = true;
+  }
+       ++__sep_pos;
+       if (++__beg != __end)
+  __c = *__beg;
+       else
+  __testeof = true;
+     }
+   else
+     break;
+ }
+      bool __found_dec = false;
+      bool __found_sci = false;
+      string __found_grouping;
+      if (__lc->_M_use_grouping)
+ __found_grouping.reserve(32);
+      const char_type* __lit_zero = __lit + __num_base::_S_izero;
+      if (!__lc->_M_allocated)
+ while (!__testeof)
+   {
+     const int __digit = _M_find(__lit_zero, 10, __c);
+     if (__digit != -1)
+       {
+  __xtrc += '0' + __digit;
+  __found_mantissa = true;
+       }
+     else if (__c == __lc->_M_decimal_point
+       && !__found_dec && !__found_sci)
+       {
+  __xtrc += '.';
+  __found_dec = true;
+       }
+     else if ((__c == __lit[__num_base::_S_ie]
+        || __c == __lit[__num_base::_S_iE])
+       && !__found_sci && __found_mantissa)
+       {
+  __xtrc += 'e';
+  __found_sci = true;
+  if (++__beg != __end)
+    {
+      __c = *__beg;
+      const bool __plus = __c == __lit[__num_base::_S_iplus];
+      if (__plus || __c == __lit[__num_base::_S_iminus])
+        __xtrc += __plus ? '+' : '-';
+      else
+        continue;
+    }
+  else
+    {
+      __testeof = true;
+      break;
+    }
+       }
+     else
+       break;
+     if (++__beg != __end)
+       __c = *__beg;
+     else
+       __testeof = true;
+   }
+      else
+ while (!__testeof)
+   {
+     if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+       {
+  if (!__found_dec && !__found_sci)
+    {
+      if (__sep_pos)
+        {
+   __found_grouping += static_cast<char>(__sep_pos);
+   __sep_pos = 0;
+        }
+      else
+        {
+   __xtrc.clear();
+   break;
+        }
+    }
+  else
+    break;
+       }
+     else if (__c == __lc->_M_decimal_point)
+       {
+  if (!__found_dec && !__found_sci)
+    {
+      if (__found_grouping.size())
+        __found_grouping += static_cast<char>(__sep_pos);
+      __xtrc += '.';
+      __found_dec = true;
+    }
+  else
+    break;
+       }
+     else
+       {
+  const char_type* __q =
+    __traits_type::find(__lit_zero, 10, __c);
+  if (__q)
+    {
+      __xtrc += '0' + (__q - __lit_zero);
+      __found_mantissa = true;
+      ++__sep_pos;
+    }
+  else if ((__c == __lit[__num_base::_S_ie]
+     || __c == __lit[__num_base::_S_iE])
+    && !__found_sci && __found_mantissa)
+    {
+      if (__found_grouping.size() && !__found_dec)
+        __found_grouping += static_cast<char>(__sep_pos);
+      __xtrc += 'e';
+      __found_sci = true;
+      if (++__beg != __end)
+        {
+   __c = *__beg;
+   const bool __plus = __c == __lit[__num_base::_S_iplus];
+   if ((__plus || __c == __lit[__num_base::_S_iminus])
+       && !(__lc->_M_use_grouping
+     && __c == __lc->_M_thousands_sep)
+       && !(__c == __lc->_M_decimal_point))
+        __xtrc += __plus ? '+' : '-';
+   else
+     continue;
+        }
+      else
+        {
+   __testeof = true;
+   break;
+        }
+    }
+  else
+    break;
+       }
+     if (++__beg != __end)
+       __c = *__beg;
+     else
+       __testeof = true;
+   }
+      if (__found_grouping.size())
+        {
+   if (!__found_dec && !__found_sci)
+     __found_grouping += static_cast<char>(__sep_pos);
+          if (!std::__verify_grouping(__lc->_M_grouping,
+          __lc->_M_grouping_size,
+          __found_grouping))
+     __err = ios_base::failbit;
+        }
+      return __beg;
+    }
+  template<typename _CharT, typename _InIter>
+    template<typename _ValueT>
+      _InIter
+      num_get<_CharT, _InIter>::
+      _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io,
+       ios_base::iostate& __err, _ValueT& __v) const
+      {
+        typedef char_traits<_CharT> __traits_type;
+ using __gnu_cxx::__add_unsigned;
+ typedef typename __add_unsigned<_ValueT>::__type __unsigned_type;
+ typedef __numpunct_cache<_CharT> __cache_type;
+ __use_cache<__cache_type> __uc;
+ const locale& __loc = __io._M_getloc();
+ const __cache_type* __lc = __uc(__loc);
+ const _CharT* __lit = __lc->_M_atoms_in;
+ char_type __c = char_type();
+ const ios_base::fmtflags __basefield = __io.flags()
+                                        & ios_base::basefield;
+ const bool __oct = __basefield == ios_base::oct;
+ int __base = __oct ? 8 : (__basefield == ios_base::hex ? 16 : 10);
+ bool __testeof = __beg == __end;
+ bool __negative = false;
+ if (!__testeof)
+   {
+     __c = *__beg;
+     __negative = __c == __lit[__num_base::_S_iminus];
+     if ((__negative || __c == __lit[__num_base::_S_iplus])
+  && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+  && !(__c == __lc->_M_decimal_point))
+       {
+  if (++__beg != __end)
+    __c = *__beg;
+  else
+    __testeof = true;
+       }
+   }
+ bool __found_zero = false;
+ int __sep_pos = 0;
+ while (!__testeof)
+   {
+     if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+  || __c == __lc->_M_decimal_point)
+       break;
+     else if (__c == __lit[__num_base::_S_izero]
+       && (!__found_zero || __base == 10))
+       {
+  __found_zero = true;
+  ++__sep_pos;
+  if (__basefield == 0)
+    __base = 8;
+  if (__base == 8)
+    __sep_pos = 0;
+       }
+     else if (__found_zero
+       && (__c == __lit[__num_base::_S_ix]
+    || __c == __lit[__num_base::_S_iX]))
+       {
+  if (__basefield == 0)
+    __base = 16;
+  if (__base == 16)
+    {
+      __found_zero = false;
+      __sep_pos = 0;
+    }
+  else
+    break;
+       }
+     else
+       break;
+     if (++__beg != __end)
+       {
+  __c = *__beg;
+  if (!__found_zero)
+    break;
+       }
+     else
+       __testeof = true;
+   }
+ const size_t __len = (__base == 16 ? __num_base::_S_iend
+         - __num_base::_S_izero : __base);
+ string __found_grouping;
+ if (__lc->_M_use_grouping)
+   __found_grouping.reserve(32);
+ bool __testfail = false;
+ bool __testoverflow = false;
+ const __unsigned_type __max =
+   (__negative && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
+   ? -__gnu_cxx::__numeric_traits<_ValueT>::__min
+   : __gnu_cxx::__numeric_traits<_ValueT>::__max;
+ const __unsigned_type __smax = __max / __base;
+ __unsigned_type __result = 0;
+ int __digit = 0;
+ const char_type* __lit_zero = __lit + __num_base::_S_izero;
+ if (!__lc->_M_allocated)
+   while (!__testeof)
+     {
+       __digit = _M_find(__lit_zero, __len, __c);
+       if (__digit == -1)
+  break;
+       if (__result > __smax)
+  __testoverflow = true;
+       else
+  {
+    __result *= __base;
+    __testoverflow |= __result > __max - __digit;
+    __result += __digit;
+    ++__sep_pos;
+  }
+       if (++__beg != __end)
+  __c = *__beg;
+       else
+  __testeof = true;
+     }
+ else
+   while (!__testeof)
+     {
+       if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+  {
+    if (__sep_pos)
+      {
+        __found_grouping += static_cast<char>(__sep_pos);
+        __sep_pos = 0;
+      }
+    else
+      {
+        __testfail = true;
+        break;
+      }
+  }
+       else if (__c == __lc->_M_decimal_point)
+  break;
+       else
+  {
+    const char_type* __q =
+      __traits_type::find(__lit_zero, __len, __c);
+    if (!__q)
+      break;
+    __digit = __q - __lit_zero;
+    if (__digit > 15)
+      __digit -= 6;
+    if (__result > __smax)
+      __testoverflow = true;
+    else
+      {
+        __result *= __base;
+        __testoverflow |= __result > __max - __digit;
+        __result += __digit;
+        ++__sep_pos;
+      }
+  }
+       if (++__beg != __end)
+  __c = *__beg;
+       else
+  __testeof = true;
+     }
+ if (__found_grouping.size())
+   {
+     __found_grouping += static_cast<char>(__sep_pos);
+     if (!std::__verify_grouping(__lc->_M_grouping,
+     __lc->_M_grouping_size,
+     __found_grouping))
+       __err = ios_base::failbit;
+   }
+ if ((!__sep_pos && !__found_zero && !__found_grouping.size())
+     || __testfail)
+   {
+     __v = 0;
+     __err = ios_base::failbit;
+   }
+ else if (__testoverflow)
+   {
+     if (__negative
+  && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
+       __v = __gnu_cxx::__numeric_traits<_ValueT>::__min;
+     else
+       __v = __gnu_cxx::__numeric_traits<_ValueT>::__max;
+     __err = ios_base::failbit;
+   }
+ else
+   __v = __negative ? -__result : __result;
+ if (__testeof)
+   __err |= ios_base::eofbit;
+ return __beg;
+      }
+  template<typename _CharT, typename _InIter>
+    _InIter
+    num_get<_CharT, _InIter>::
+    do_get(iter_type __beg, iter_type __end, ios_base& __io,
+           ios_base::iostate& __err, bool& __v) const
+    {
+      if (!(__io.flags() & ios_base::boolalpha))
+        {
+   long __l = -1;
+          __beg = _M_extract_int(__beg, __end, __io, __err, __l);
+   if (__l == 0 || __l == 1)
+     __v = bool(__l);
+   else
+     {
+       __v = true;
+       __err = ios_base::failbit;
+       if (__beg == __end)
+  __err |= ios_base::eofbit;
+     }
+        }
+      else
+        {
+   typedef __numpunct_cache<_CharT> __cache_type;
+   __use_cache<__cache_type> __uc;
+   const locale& __loc = __io._M_getloc();
+   const __cache_type* __lc = __uc(__loc);
+   bool __testf = true;
+   bool __testt = true;
+   bool __donef = __lc->_M_falsename_size == 0;
+   bool __donet = __lc->_M_truename_size == 0;
+   bool __testeof = false;
+   size_t __n = 0;
+   while (!__donef || !__donet)
+     {
+       if (__beg == __end)
+  {
+    __testeof = true;
+    break;
+  }
+       const char_type __c = *__beg;
+       if (!__donef)
+  __testf = __c == __lc->_M_falsename[__n];
+       if (!__testf && __donet)
+  break;
+       if (!__donet)
+  __testt = __c == __lc->_M_truename[__n];
+       if (!__testt && __donef)
+  break;
+       if (!__testt && !__testf)
+  break;
+       ++__n;
+       ++__beg;
+       __donef = !__testf || __n >= __lc->_M_falsename_size;
+       __donet = !__testt || __n >= __lc->_M_truename_size;
+     }
+   if (__testf && __n == __lc->_M_falsename_size && __n)
+     {
+       __v = false;
+       if (__testt && __n == __lc->_M_truename_size)
+  __err = ios_base::failbit;
+       else
+  __err = __testeof ? ios_base::eofbit : ios_base::goodbit;
+     }
+   else if (__testt && __n == __lc->_M_truename_size && __n)
+     {
+       __v = true;
+       __err = __testeof ? ios_base::eofbit : ios_base::goodbit;
+     }
+   else
+     {
+       __v = false;
+       __err = ios_base::failbit;
+       if (__testeof)
+  __err |= ios_base::eofbit;
+     }
+ }
+      return __beg;
+    }
+  template<typename _CharT, typename _InIter>
+    _InIter
+    num_get<_CharT, _InIter>::
+    do_get(iter_type __beg, iter_type __end, ios_base& __io,
+    ios_base::iostate& __err, float& __v) const
+    {
+      string __xtrc;
+      __xtrc.reserve(32);
+      __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
+      std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
+      if (__beg == __end)
+ __err |= ios_base::eofbit;
+      return __beg;
+    }
+  template<typename _CharT, typename _InIter>
+    _InIter
+    num_get<_CharT, _InIter>::
+    do_get(iter_type __beg, iter_type __end, ios_base& __io,
+           ios_base::iostate& __err, double& __v) const
+    {
+      string __xtrc;
+      __xtrc.reserve(32);
+      __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
+      std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
+      if (__beg == __end)
+ __err |= ios_base::eofbit;
+      return __beg;
+    }
+  template<typename _CharT, typename _InIter>
+    _InIter
+    num_get<_CharT, _InIter>::
+    do_get(iter_type __beg, iter_type __end, ios_base& __io,
+           ios_base::iostate& __err, long double& __v) const
+    {
+      string __xtrc;
+      __xtrc.reserve(32);
+      __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
+      std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
+      if (__beg == __end)
+ __err |= ios_base::eofbit;
+      return __beg;
+    }
+  template<typename _CharT, typename _InIter>
+    _InIter
+    num_get<_CharT, _InIter>::
+    do_get(iter_type __beg, iter_type __end, ios_base& __io,
+           ios_base::iostate& __err, void*& __v) const
+    {
+      typedef ios_base::fmtflags fmtflags;
+      const fmtflags __fmt = __io.flags();
+      __io.flags((__fmt & ~ios_base::basefield) | ios_base::hex);
+      typedef __gnu_cxx::__conditional_type<(sizeof(void*)
+          <= sizeof(unsigned long)),
+ unsigned long, unsigned long long>::__type _UIntPtrType;
+      _UIntPtrType __ul;
+      __beg = _M_extract_int(__beg, __end, __io, __err, __ul);
+      __io.flags(__fmt);
+      __v = reinterpret_cast<void*>(__ul);
+      return __beg;
+    }
+  template<typename _CharT, typename _OutIter>
+    void
+    num_put<_CharT, _OutIter>::
+    _M_pad(_CharT __fill, streamsize __w, ios_base& __io,
+    _CharT* __new, const _CharT* __cs, int& __len) const
+    {
+      __pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new,
+        __cs, __w, __len);
+      __len = static_cast<int>(__w);
+    }
+  template<typename _CharT, typename _ValueT>
+    int
+    __int_to_char(_CharT* __bufend, _ValueT __v, const _CharT* __lit,
+    ios_base::fmtflags __flags, bool __dec)
+    {
+      _CharT* __buf = __bufend;
+      if (__builtin_expect(__dec, true))
+ {
+   do
+     {
+       *--__buf = __lit[(__v % 10) + __num_base::_S_odigits];
+       __v /= 10;
+     }
+   while (__v != 0);
+ }
+      else if ((__flags & ios_base::basefield) == ios_base::oct)
+ {
+   do
+     {
+       *--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits];
+       __v >>= 3;
+     }
+   while (__v != 0);
+ }
+      else
+ {
+   const bool __uppercase = __flags & ios_base::uppercase;
+   const int __case_offset = __uppercase ? __num_base::_S_oudigits
+                                         : __num_base::_S_odigits;
+   do
+     {
+       *--__buf = __lit[(__v & 0xf) + __case_offset];
+       __v >>= 4;
+     }
+   while (__v != 0);
+ }
+      return __bufend - __buf;
+    }
+  template<typename _CharT, typename _OutIter>
+    void
+    num_put<_CharT, _OutIter>::
+    _M_group_int(const char* __grouping, size_t __grouping_size, _CharT __sep,
+   ios_base&, _CharT* __new, _CharT* __cs, int& __len) const
+    {
+      _CharT* __p = std::__add_grouping(__new, __sep, __grouping,
+     __grouping_size, __cs, __cs + __len);
+      __len = __p - __new;
+    }
+  template<typename _CharT, typename _OutIter>
+    template<typename _ValueT>
+      _OutIter
+      num_put<_CharT, _OutIter>::
+      _M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill,
+      _ValueT __v) const
+      {
+ using __gnu_cxx::__add_unsigned;
+ typedef typename __add_unsigned<_ValueT>::__type __unsigned_type;
+ typedef __numpunct_cache<_CharT> __cache_type;
+ __use_cache<__cache_type> __uc;
+ const locale& __loc = __io._M_getloc();
+ const __cache_type* __lc = __uc(__loc);
+ const _CharT* __lit = __lc->_M_atoms_out;
+ const ios_base::fmtflags __flags = __io.flags();
+ const int __ilen = 5 * sizeof(_ValueT);
+ _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+            * __ilen));
+ const ios_base::fmtflags __basefield = __flags & ios_base::basefield;
+ const bool __dec = (__basefield != ios_base::oct
+       && __basefield != ios_base::hex);
+ const __unsigned_type __u = ((__v > 0 || !__dec)
+         ? __unsigned_type(__v)
+         : -__unsigned_type(__v));
+  int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec);
+ __cs += __ilen - __len;
+ if (__lc->_M_use_grouping)
+   {
+     _CharT* __cs2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+          * (__len + 1)
+          * 2));
+     _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size,
+    __lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len);
+     __cs = __cs2 + 2;
+   }
+ if (__builtin_expect(__dec, true))
+   {
+     if (__v >= 0)
+       {
+  if (bool(__flags & ios_base::showpos)
+      && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
+    *--__cs = __lit[__num_base::_S_oplus], ++__len;
+       }
+     else
+       *--__cs = __lit[__num_base::_S_ominus], ++__len;
+   }
+ else if (bool(__flags & ios_base::showbase) && __v)
+   {
+     if (__basefield == ios_base::oct)
+       *--__cs = __lit[__num_base::_S_odigits], ++__len;
+     else
+       {
+  const bool __uppercase = __flags & ios_base::uppercase;
+  *--__cs = __lit[__num_base::_S_ox + __uppercase];
+  *--__cs = __lit[__num_base::_S_odigits];
+  __len += 2;
+       }
+   }
+ const streamsize __w = __io.width();
+ if (__w > static_cast<streamsize>(__len))
+   {
+     _CharT* __cs3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+          * __w));
+     _M_pad(__fill, __w, __io, __cs3, __cs, __len);
+     __cs = __cs3;
+   }
+ __io.width(0);
+ return std::__write(__s, __cs, __len);
+      }
+  template<typename _CharT, typename _OutIter>
+    void
+    num_put<_CharT, _OutIter>::
+    _M_group_float(const char* __grouping, size_t __grouping_size,
+     _CharT __sep, const _CharT* __p, _CharT* __new,
+     _CharT* __cs, int& __len) const
+    {
+      const int __declen = __p ? __p - __cs : __len;
+      _CharT* __p2 = std::__add_grouping(__new, __sep, __grouping,
+      __grouping_size,
+      __cs, __cs + __declen);
+      int __newlen = __p2 - __new;
+      if (__p)
+ {
+   char_traits<_CharT>::copy(__p2, __p, __len - __declen);
+   __newlen += __len - __declen;
+ }
+      __len = __newlen;
+    }
+  template<typename _CharT, typename _OutIter>
+    template<typename _ValueT>
+      _OutIter
+      num_put<_CharT, _OutIter>::
+      _M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod,
+         _ValueT __v) const
+      {
+ typedef __numpunct_cache<_CharT> __cache_type;
+ __use_cache<__cache_type> __uc;
+ const locale& __loc = __io._M_getloc();
+ const __cache_type* __lc = __uc(__loc);
+ const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision();
+ const int __max_digits =
+   __gnu_cxx::__numeric_traits<_ValueT>::__digits10;
+ int __len;
+ char __fbuf[16];
+ __num_base::_S_format_float(__io, __fbuf, __mod);
+ int __cs_size = __max_digits * 3;
+ char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
+ __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
+          __fbuf, __prec, __v);
+ if (__len >= __cs_size)
+   {
+     __cs_size = __len + 1;
+     __cs = static_cast<char*>(__builtin_alloca(__cs_size));
+     __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
+       __fbuf, __prec, __v);
+   }
+ const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+ _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+            * __len));
+ __ctype.widen(__cs, __cs + __len, __ws);
+ _CharT* __wp = 0;
+ const char* __p = char_traits<char>::find(__cs, __len, '.');
+ if (__p)
+   {
+     __wp = __ws + (__p - __cs);
+     *__wp = __lc->_M_decimal_point;
+   }
+ if (__lc->_M_use_grouping
+     && (__wp || __len < 3 || (__cs[1] <= '9' && __cs[2] <= '9'
+          && __cs[1] >= '0' && __cs[2] >= '0')))
+   {
+     _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+          * __len * 2));
+     streamsize __off = 0;
+     if (__cs[0] == '-' || __cs[0] == '+')
+       {
+  __off = 1;
+  __ws2[0] = __ws[0];
+  __len -= 1;
+       }
+     _M_group_float(__lc->_M_grouping, __lc->_M_grouping_size,
+      __lc->_M_thousands_sep, __wp, __ws2 + __off,
+      __ws + __off, __len);
+     __len += __off;
+     __ws = __ws2;
+   }
+ const streamsize __w = __io.width();
+ if (__w > static_cast<streamsize>(__len))
+   {
+     _CharT* __ws3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+          * __w));
+     _M_pad(__fill, __w, __io, __ws3, __ws, __len);
+     __ws = __ws3;
+   }
+ __io.width(0);
+ return std::__write(__s, __ws, __len);
+      }
+  template<typename _CharT, typename _OutIter>
+    _OutIter
+    num_put<_CharT, _OutIter>::
+    do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const
+    {
+      const ios_base::fmtflags __flags = __io.flags();
+      if ((__flags & ios_base::boolalpha) == 0)
+        {
+          const long __l = __v;
+          __s = _M_insert_int(__s, __io, __fill, __l);
+        }
+      else
+        {
+   typedef __numpunct_cache<_CharT> __cache_type;
+   __use_cache<__cache_type> __uc;
+   const locale& __loc = __io._M_getloc();
+   const __cache_type* __lc = __uc(__loc);
+   const _CharT* __name = __v ? __lc->_M_truename
+                              : __lc->_M_falsename;
+   int __len = __v ? __lc->_M_truename_size
+                   : __lc->_M_falsename_size;
+   const streamsize __w = __io.width();
+   if (__w > static_cast<streamsize>(__len))
+     {
+       const streamsize __plen = __w - __len;
+       _CharT* __ps
+  = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+       * __plen));
+       char_traits<_CharT>::assign(__ps, __plen, __fill);
+       __io.width(0);
+       if ((__flags & ios_base::adjustfield) == ios_base::left)
+  {
+    __s = std::__write(__s, __name, __len);
+    __s = std::__write(__s, __ps, __plen);
+  }
+       else
+  {
+    __s = std::__write(__s, __ps, __plen);
+    __s = std::__write(__s, __name, __len);
+  }
+       return __s;
+     }
+   __io.width(0);
+   __s = std::__write(__s, __name, __len);
+ }
+      return __s;
+    }
+  template<typename _CharT, typename _OutIter>
+    _OutIter
+    num_put<_CharT, _OutIter>::
+    do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
+    { return _M_insert_float(__s, __io, __fill, char(), __v); }
+  template<typename _CharT, typename _OutIter>
+    _OutIter
+    num_put<_CharT, _OutIter>::
+    do_put(iter_type __s, ios_base& __io, char_type __fill,
+    long double __v) const
+    { return _M_insert_float(__s, __io, __fill, 'L', __v); }
+  template<typename _CharT, typename _OutIter>
+    _OutIter
+    num_put<_CharT, _OutIter>::
+    do_put(iter_type __s, ios_base& __io, char_type __fill,
+           const void* __v) const
+    {
+      const ios_base::fmtflags __flags = __io.flags();
+      const ios_base::fmtflags __fmt = ~(ios_base::basefield
+      | ios_base::uppercase);
+      __io.flags((__flags & __fmt) | (ios_base::hex | ios_base::showbase));
+      typedef __gnu_cxx::__conditional_type<(sizeof(const void*)
+          <= sizeof(unsigned long)),
+ unsigned long, unsigned long long>::__type _UIntPtrType;
+      __s = _M_insert_int(__s, __io, __fill,
+     reinterpret_cast<_UIntPtrType>(__v));
+      __io.flags(__flags);
+      return __s;
+    }
+  template<typename _CharT, typename _Traits>
+    void
+    __pad<_CharT, _Traits>::_S_pad(ios_base& __io, _CharT __fill,
+       _CharT* __news, const _CharT* __olds,
+       streamsize __newlen, streamsize __oldlen)
+    {
+      const size_t __plen = static_cast<size_t>(__newlen - __oldlen);
+      const ios_base::fmtflags __adjust = __io.flags() & ios_base::adjustfield;
+      if (__adjust == ios_base::left)
+ {
+   _Traits::copy(__news, __olds, __oldlen);
+   _Traits::assign(__news + __oldlen, __plen, __fill);
+   return;
+ }
+      size_t __mod = 0;
+      if (__adjust == ios_base::internal)
+ {
+          const locale& __loc = __io._M_getloc();
+   const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+   if (__ctype.widen('-') == __olds[0]
+       || __ctype.widen('+') == __olds[0])
+     {
+       __news[0] = __olds[0];
+       __mod = 1;
+       ++__news;
+     }
+   else if (__ctype.widen('0') == __olds[0]
+     && __oldlen > 1
+     && (__ctype.widen('x') == __olds[1]
+         || __ctype.widen('X') == __olds[1]))
+     {
+       __news[0] = __olds[0];
+       __news[1] = __olds[1];
+       __mod = 2;
+       __news += 2;
+     }
+ }
+      _Traits::assign(__news, __plen, __fill);
+      _Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod);
+    }
+  template<typename _CharT>
+    _CharT*
+    __add_grouping(_CharT* __s, _CharT __sep,
+     const char* __gbeg, size_t __gsize,
+     const _CharT* __first, const _CharT* __last)
+    {
+      size_t __idx = 0;
+      size_t __ctr = 0;
+      while (__last - __first > __gbeg[__idx]
+      && static_cast<signed char>(__gbeg[__idx]) > 0
+      && __gbeg[__idx] != __gnu_cxx::__numeric_traits<char>::__max)
+ {
+   __last -= __gbeg[__idx];
+   __idx < __gsize - 1 ? ++__idx : ++__ctr;
+ }
+      while (__first != __last)
+ *__s++ = *__first++;
+      while (__ctr--)
+ {
+   *__s++ = __sep;
+   for (char __i = __gbeg[__idx]; __i > 0; --__i)
+     *__s++ = *__first++;
+ }
+      while (__idx--)
+ {
+   *__s++ = __sep;
+   for (char __i = __gbeg[__idx]; __i > 0; --__i)
+     *__s++ = *__first++;
+ }
+      return __s;
+    }
+  extern template class numpunct<char>;
+  extern template class numpunct_byname<char>;
+  extern template class num_get<char>;
+  extern template class num_put<char>;
+  extern template class ctype_byname<char>;
+  extern template
+    const ctype<char>&
+    use_facet<ctype<char> >(const locale&);
+  extern template
+    const numpunct<char>&
+    use_facet<numpunct<char> >(const locale&);
+  extern template
+    const num_put<char>&
+    use_facet<num_put<char> >(const locale&);
+  extern template
+    const num_get<char>&
+    use_facet<num_get<char> >(const locale&);
+  extern template
+    bool
+    has_facet<ctype<char> >(const locale&);
+  extern template
+    bool
+    has_facet<numpunct<char> >(const locale&);
+  extern template
+    bool
+    has_facet<num_put<char> >(const locale&);
+  extern template
+    bool
+    has_facet<num_get<char> >(const locale&);
+  extern template class numpunct<wchar_t>;
+  extern template class numpunct_byname<wchar_t>;
+  extern template class num_get<wchar_t>;
+  extern template class num_put<wchar_t>;
+  extern template class ctype_byname<wchar_t>;
+  extern template
+    const ctype<wchar_t>&
+    use_facet<ctype<wchar_t> >(const locale&);
+  extern template
+    const numpunct<wchar_t>&
+    use_facet<numpunct<wchar_t> >(const locale&);
+  extern template
+    const num_put<wchar_t>&
+    use_facet<num_put<wchar_t> >(const locale&);
+  extern template
+    const num_get<wchar_t>&
+    use_facet<num_get<wchar_t> >(const locale&);
+ extern template
+    bool
+    has_facet<ctype<wchar_t> >(const locale&);
+  extern template
+    bool
+    has_facet<numpunct<wchar_t> >(const locale&);
+  extern template
+    bool
+    has_facet<num_put<wchar_t> >(const locale&);
+  extern template
+    bool
+    has_facet<num_get<wchar_t> >(const locale&);
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Facet>
+    inline const _Facet&
+    __check_facet(const _Facet* __f)
+    {
+      if (!__f)
+ __throw_bad_cast();
+      return *__f;
+    }
+  template<typename _CharT, typename _Traits>
+    class basic_ios : public ios_base
+    {
+    public:
+      typedef _CharT char_type;
+      typedef typename _Traits::int_type int_type;
+      typedef typename _Traits::pos_type pos_type;
+      typedef typename _Traits::off_type off_type;
+      typedef _Traits traits_type;
+      typedef ctype<_CharT> __ctype_type;
+      typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> >
+           __num_put_type;
+      typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
+           __num_get_type;
+    protected:
+      basic_ostream<_CharT, _Traits>* _M_tie;
+      mutable char_type _M_fill;
+      mutable bool _M_fill_init;
+      basic_streambuf<_CharT, _Traits>* _M_streambuf;
+      const __ctype_type* _M_ctype;
+      const __num_put_type* _M_num_put;
+      const __num_get_type* _M_num_get;
+    public:
+      operator void*() const
+      { return this->fail() ? 0 : const_cast<basic_ios*>(this); }
+      bool
+      operator!() const
+      { return this->fail(); }
+      iostate
+      rdstate() const
+      { return _M_streambuf_state; }
+      void
+      clear(iostate __state = goodbit);
+      void
+      setstate(iostate __state)
+      { this->clear(this->rdstate() | __state); }
+      void
+      _M_setstate(iostate __state)
+      {
+ _M_streambuf_state |= __state;
+ if (this->exceptions() & __state)
+   throw;
+      }
+      bool
+      good() const
+      { return this->rdstate() == 0; }
+      bool
+      eof() const
+      { return (this->rdstate() & eofbit) != 0; }
+      bool
+      fail() const
+      { return (this->rdstate() & (badbit | failbit)) != 0; }
+      bool
+      bad() const
+      { return (this->rdstate() & badbit) != 0; }
+      iostate
+      exceptions() const
+      { return _M_exception; }
+      void
+      exceptions(iostate __except)
+      {
+        _M_exception = __except;
+        this->clear(_M_streambuf_state);
+      }
+      explicit
+      basic_ios(basic_streambuf<_CharT, _Traits>* __sb)
+      : ios_base(), _M_tie(0), _M_fill(), _M_fill_init(false), _M_streambuf(0),
+ _M_ctype(0), _M_num_put(0), _M_num_get(0)
+      { this->init(__sb); }
+      virtual
+      ~basic_ios() { }
+      basic_ostream<_CharT, _Traits>*
+      tie() const
+      { return _M_tie; }
+      basic_ostream<_CharT, _Traits>*
+      tie(basic_ostream<_CharT, _Traits>* __tiestr)
+      {
+        basic_ostream<_CharT, _Traits>* __old = _M_tie;
+        _M_tie = __tiestr;
+        return __old;
+      }
+      basic_streambuf<_CharT, _Traits>*
+      rdbuf() const
+      { return _M_streambuf; }
+      basic_streambuf<_CharT, _Traits>*
+      rdbuf(basic_streambuf<_CharT, _Traits>* __sb);
+      basic_ios&
+      copyfmt(const basic_ios& __rhs);
+      char_type
+      fill() const
+      {
+ if (!_M_fill_init)
+   {
+     _M_fill = this->widen(' ');
+     _M_fill_init = true;
+   }
+ return _M_fill;
+      }
+      char_type
+      fill(char_type __ch)
+      {
+ char_type __old = this->fill();
+ _M_fill = __ch;
+ return __old;
+      }
+      locale
+      imbue(const locale& __loc);
+      char
+      narrow(char_type __c, char __dfault) const
+      { return __check_facet(_M_ctype).narrow(__c, __dfault); }
+      char_type
+      widen(char __c) const
+      { return __check_facet(_M_ctype).widen(__c); }
+    protected:
+      basic_ios()
+      : ios_base(), _M_tie(0), _M_fill(char_type()), _M_fill_init(false),
+ _M_streambuf(0), _M_ctype(0), _M_num_put(0), _M_num_get(0)
+      { }
+      void
+      init(basic_streambuf<_CharT, _Traits>* __sb);
+      void
+      _M_cache_locale(const locale& __loc);
+    };
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits>
+    void
+    basic_ios<_CharT, _Traits>::clear(iostate __state)
+    {
+      if (this->rdbuf())
+ _M_streambuf_state = __state;
+      else
+   _M_streambuf_state = __state | badbit;
+      if (this->exceptions() & this->rdstate())
+ __throw_ios_failure(("basic_ios::clear"));
+    }
+  template<typename _CharT, typename _Traits>
+    basic_streambuf<_CharT, _Traits>*
+    basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
+    {
+      basic_streambuf<_CharT, _Traits>* __old = _M_streambuf;
+      _M_streambuf = __sb;
+      this->clear();
+      return __old;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_ios<_CharT, _Traits>&
+    basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs)
+    {
+      if (this != &__rhs)
+ {
+   _Words* __words = (__rhs._M_word_size <= _S_local_word_size) ?
+                      _M_local_word : new _Words[__rhs._M_word_size];
+   _Callback_list* __cb = __rhs._M_callbacks;
+   if (__cb)
+     __cb->_M_add_reference();
+   _M_call_callbacks(erase_event);
+   if (_M_word != _M_local_word)
+     {
+       delete [] _M_word;
+       _M_word = 0;
+     }
+   _M_dispose_callbacks();
+   _M_callbacks = __cb;
+   for (int __i = 0; __i < __rhs._M_word_size; ++__i)
+     __words[__i] = __rhs._M_word[__i];
+   _M_word = __words;
+   _M_word_size = __rhs._M_word_size;
+   this->flags(__rhs.flags());
+   this->width(__rhs.width());
+   this->precision(__rhs.precision());
+   this->tie(__rhs.tie());
+   this->fill(__rhs.fill());
+   _M_ios_locale = __rhs.getloc();
+   _M_cache_locale(_M_ios_locale);
+   _M_call_callbacks(copyfmt_event);
+   this->exceptions(__rhs.exceptions());
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    locale
+    basic_ios<_CharT, _Traits>::imbue(const locale& __loc)
+    {
+      locale __old(this->getloc());
+      ios_base::imbue(__loc);
+      _M_cache_locale(__loc);
+      if (this->rdbuf() != 0)
+ this->rdbuf()->pubimbue(__loc);
+      return __old;
+    }
+  template<typename _CharT, typename _Traits>
+    void
+    basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb)
+    {
+      ios_base::_M_init();
+      _M_cache_locale(_M_ios_locale);
+      _M_fill = _CharT();
+      _M_fill_init = false;
+      _M_tie = 0;
+      _M_exception = goodbit;
+      _M_streambuf = __sb;
+      _M_streambuf_state = __sb ? goodbit : badbit;
+    }
+  template<typename _CharT, typename _Traits>
+    void
+    basic_ios<_CharT, _Traits>::_M_cache_locale(const locale& __loc)
+    {
+      if (__builtin_expect(has_facet<__ctype_type>(__loc), true))
+ _M_ctype = &use_facet<__ctype_type>(__loc);
+      else
+ _M_ctype = 0;
+      if (__builtin_expect(has_facet<__num_put_type>(__loc), true))
+ _M_num_put = &use_facet<__num_put_type>(__loc);
+      else
+ _M_num_put = 0;
+      if (__builtin_expect(has_facet<__num_get_type>(__loc), true))
+ _M_num_get = &use_facet<__num_get_type>(__loc);
+      else
+ _M_num_get = 0;
+    }
+  extern template class basic_ios<char>;
+  extern template class basic_ios<wchar_t>;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits>
+    class basic_ostream : virtual public basic_ios<_CharT, _Traits>
+    {
+    public:
+      typedef _CharT char_type;
+      typedef typename _Traits::int_type int_type;
+      typedef typename _Traits::pos_type pos_type;
+      typedef typename _Traits::off_type off_type;
+      typedef _Traits traits_type;
+      typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
+      typedef basic_ios<_CharT, _Traits> __ios_type;
+      typedef basic_ostream<_CharT, _Traits> __ostream_type;
+      typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> >
+             __num_put_type;
+      typedef ctype<_CharT> __ctype_type;
+      explicit
+      basic_ostream(__streambuf_type* __sb)
+      { this->init(__sb); }
+      virtual
+      ~basic_ostream() { }
+      class sentry;
+      friend class sentry;
+      __ostream_type&
+      operator<<(__ostream_type& (*__pf)(__ostream_type&))
+      {
+ return __pf(*this);
+      }
+      __ostream_type&
+      operator<<(__ios_type& (*__pf)(__ios_type&))
+      {
+ __pf(*this);
+ return *this;
+      }
+      __ostream_type&
+      operator<<(ios_base& (*__pf) (ios_base&))
+      {
+ __pf(*this);
+ return *this;
+      }
+      __ostream_type&
+      operator<<(long __n)
+      { return _M_insert(__n); }
+      __ostream_type&
+      operator<<(unsigned long __n)
+      { return _M_insert(__n); }
+      __ostream_type&
+      operator<<(bool __n)
+      { return _M_insert(__n); }
+      __ostream_type&
+      operator<<(short __n);
+      __ostream_type&
+      operator<<(unsigned short __n)
+      {
+ return _M_insert(static_cast<unsigned long>(__n));
+      }
+      __ostream_type&
+      operator<<(int __n);
+      __ostream_type&
+      operator<<(unsigned int __n)
+      {
+ return _M_insert(static_cast<unsigned long>(__n));
+      }
+      __ostream_type&
+      operator<<(long long __n)
+      { return _M_insert(__n); }
+      __ostream_type&
+      operator<<(unsigned long long __n)
+      { return _M_insert(__n); }
+      __ostream_type&
+      operator<<(double __f)
+      { return _M_insert(__f); }
+      __ostream_type&
+      operator<<(float __f)
+      {
+ return _M_insert(static_cast<double>(__f));
+      }
+      __ostream_type&
+      operator<<(long double __f)
+      { return _M_insert(__f); }
+      __ostream_type&
+      operator<<(const void* __p)
+      { return _M_insert(__p); }
+      __ostream_type&
+      operator<<(__streambuf_type* __sb);
+      __ostream_type&
+      put(char_type __c);
+      void
+      _M_write(const char_type* __s, streamsize __n)
+      {
+ const streamsize __put = this->rdbuf()->sputn(__s, __n);
+ if (__put != __n)
+   this->setstate(ios_base::badbit);
+      }
+      __ostream_type&
+      write(const char_type* __s, streamsize __n);
+      __ostream_type&
+      flush();
+      pos_type
+      tellp();
+      __ostream_type&
+      seekp(pos_type);
+       __ostream_type&
+      seekp(off_type, ios_base::seekdir);
+    protected:
+      basic_ostream()
+      { this->init(0); }
+      template<typename _ValueT>
+        __ostream_type&
+        _M_insert(_ValueT __v);
+    };
+  template <typename _CharT, typename _Traits>
+    class basic_ostream<_CharT, _Traits>::sentry
+    {
+      bool _M_ok;
+      basic_ostream<_CharT, _Traits>& _M_os;
+    public:
+      explicit
+      sentry(basic_ostream<_CharT, _Traits>& __os);
+      ~sentry()
+      {
+ if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception())
+   {
+     if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1)
+       _M_os.setstate(ios_base::badbit);
+   }
+      }
+      operator bool() const
+      { return _M_ok; }
+    };
+  template<typename _CharT, typename _Traits>
+    inline basic_ostream<_CharT, _Traits>&
+    operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c)
+    { return __ostream_insert(__out, &__c, 1); }
+  template<typename _CharT, typename _Traits>
+    inline basic_ostream<_CharT, _Traits>&
+    operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
+    { return (__out << __out.widen(__c)); }
+  template <class _Traits>
+    inline basic_ostream<char, _Traits>&
+    operator<<(basic_ostream<char, _Traits>& __out, char __c)
+    { return __ostream_insert(__out, &__c, 1); }
+  template<class _Traits>
+    inline basic_ostream<char, _Traits>&
+    operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
+    { return (__out << static_cast<char>(__c)); }
+  template<class _Traits>
+    inline basic_ostream<char, _Traits>&
+    operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
+    { return (__out << static_cast<char>(__c)); }
+  template<typename _CharT, typename _Traits>
+    inline basic_ostream<_CharT, _Traits>&
+    operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
+    {
+      if (!__s)
+ __out.setstate(ios_base::badbit);
+      else
+ __ostream_insert(__out, __s,
+    static_cast<streamsize>(_Traits::length(__s)));
+      return __out;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits> &
+    operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s);
+  template<class _Traits>
+    inline basic_ostream<char, _Traits>&
+    operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
+    {
+      if (!__s)
+ __out.setstate(ios_base::badbit);
+      else
+ __ostream_insert(__out, __s,
+    static_cast<streamsize>(_Traits::length(__s)));
+      return __out;
+    }
+  template<class _Traits>
+    inline basic_ostream<char, _Traits>&
+    operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s)
+    { return (__out << reinterpret_cast<const char*>(__s)); }
+  template<class _Traits>
+    inline basic_ostream<char, _Traits> &
+    operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
+    { return (__out << reinterpret_cast<const char*>(__s)); }
+  template<typename _CharT, typename _Traits>
+    inline basic_ostream<_CharT, _Traits>&
+    endl(basic_ostream<_CharT, _Traits>& __os)
+    { return flush(__os.put(__os.widen('\n'))); }
+  template<typename _CharT, typename _Traits>
+    inline basic_ostream<_CharT, _Traits>&
+    ends(basic_ostream<_CharT, _Traits>& __os)
+    { return __os.put(_CharT()); }
+  template<typename _CharT, typename _Traits>
+    inline basic_ostream<_CharT, _Traits>&
+    flush(basic_ostream<_CharT, _Traits>& __os)
+    { return __os.flush(); }
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits>::sentry::
+    sentry(basic_ostream<_CharT, _Traits>& __os)
+    : _M_ok(false), _M_os(__os)
+    {
+      if (__os.tie() && __os.good())
+ __os.tie()->flush();
+      if (__os.good())
+ _M_ok = true;
+      else
+ __os.setstate(ios_base::failbit);
+    }
+  template<typename _CharT, typename _Traits>
+    template<typename _ValueT>
+      basic_ostream<_CharT, _Traits>&
+      basic_ostream<_CharT, _Traits>::
+      _M_insert(_ValueT __v)
+      {
+ sentry __cerb(*this);
+ if (__cerb)
+   {
+     ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+     try
+       {
+  const __num_put_type& __np = __check_facet(this->_M_num_put);
+  if (__np.put(*this, *this, this->fill(), __v).failed())
+    __err |= ios_base::badbit;
+       }
+     catch(__cxxabiv1::__forced_unwind&)
+       {
+  this->_M_setstate(ios_base::badbit);
+  throw;
+       }
+     catch(...)
+       { this->_M_setstate(ios_base::badbit); }
+     if (__err)
+       this->setstate(__err);
+   }
+ return *this;
+      }
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits>&
+    basic_ostream<_CharT, _Traits>::
+    operator<<(short __n)
+    {
+      const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
+      if (__fmt == ios_base::oct || __fmt == ios_base::hex)
+ return _M_insert(static_cast<long>(static_cast<unsigned short>(__n)));
+      else
+ return _M_insert(static_cast<long>(__n));
+    }
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits>&
+    basic_ostream<_CharT, _Traits>::
+    operator<<(int __n)
+    {
+      const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
+      if (__fmt == ios_base::oct || __fmt == ios_base::hex)
+ return _M_insert(static_cast<long>(static_cast<unsigned int>(__n)));
+      else
+ return _M_insert(static_cast<long>(__n));
+    }
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits>&
+    basic_ostream<_CharT, _Traits>::
+    operator<<(__streambuf_type* __sbin)
+    {
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      sentry __cerb(*this);
+      if (__cerb && __sbin)
+ {
+   try
+     {
+       if (!__copy_streambufs(__sbin, this->rdbuf()))
+  __err |= ios_base::failbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::failbit); }
+ }
+      else if (!__sbin)
+ __err |= ios_base::badbit;
+      if (__err)
+ this->setstate(__err);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits>&
+    basic_ostream<_CharT, _Traits>::
+    put(char_type __c)
+    {
+      sentry __cerb(*this);
+      if (__cerb)
+ {
+   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+   try
+     {
+       const int_type __put = this->rdbuf()->sputc(__c);
+       if (traits_type::eq_int_type(__put, traits_type::eof()))
+  __err |= ios_base::badbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+   if (__err)
+     this->setstate(__err);
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits>&
+    basic_ostream<_CharT, _Traits>::
+    write(const _CharT* __s, streamsize __n)
+    {
+      sentry __cerb(*this);
+      if (__cerb)
+ {
+   try
+     { _M_write(__s, __n); }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits>&
+    basic_ostream<_CharT, _Traits>::
+    flush()
+    {
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      try
+ {
+   if (this->rdbuf() && this->rdbuf()->pubsync() == -1)
+     __err |= ios_base::badbit;
+ }
+      catch(__cxxabiv1::__forced_unwind&)
+ {
+   this->_M_setstate(ios_base::badbit);
+   throw;
+ }
+      catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+      if (__err)
+ this->setstate(__err);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    typename basic_ostream<_CharT, _Traits>::pos_type
+    basic_ostream<_CharT, _Traits>::
+    tellp()
+    {
+      pos_type __ret = pos_type(-1);
+      try
+ {
+   if (!this->fail())
+     __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out);
+ }
+      catch(__cxxabiv1::__forced_unwind&)
+ {
+   this->_M_setstate(ios_base::badbit);
+   throw;
+ }
+      catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+      return __ret;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits>&
+    basic_ostream<_CharT, _Traits>::
+    seekp(pos_type __pos)
+    {
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      try
+ {
+   if (!this->fail())
+     {
+       const pos_type __p = this->rdbuf()->pubseekpos(__pos,
+            ios_base::out);
+       if (__p == pos_type(off_type(-1)))
+  __err |= ios_base::failbit;
+     }
+ }
+      catch(__cxxabiv1::__forced_unwind&)
+ {
+   this->_M_setstate(ios_base::badbit);
+   throw;
+ }
+      catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+      if (__err)
+ this->setstate(__err);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits>&
+    basic_ostream<_CharT, _Traits>::
+    seekp(off_type __off, ios_base::seekdir __dir)
+    {
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      try
+ {
+   if (!this->fail())
+     {
+       const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir,
+            ios_base::out);
+       if (__p == pos_type(off_type(-1)))
+  __err |= ios_base::failbit;
+     }
+ }
+      catch(__cxxabiv1::__forced_unwind&)
+ {
+   this->_M_setstate(ios_base::badbit);
+   throw;
+ }
+      catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+      if (__err)
+ this->setstate(__err);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_ostream<_CharT, _Traits>&
+    operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s)
+    {
+      if (!__s)
+ __out.setstate(ios_base::badbit);
+      else
+ {
+   const size_t __clen = char_traits<char>::length(__s);
+   try
+     {
+       struct __ptr_guard
+       {
+  _CharT *__p;
+  __ptr_guard (_CharT *__ip): __p(__ip) { }
+  ~__ptr_guard() { delete[] __p; }
+  _CharT* __get() { return __p; }
+       } __pg (new _CharT[__clen]);
+       _CharT *__ws = __pg.__get();
+       for (size_t __i = 0; __i < __clen; ++__i)
+  __ws[__i] = __out.widen(__s[__i]);
+       __ostream_insert(__out, __ws, __clen);
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       __out._M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { __out._M_setstate(ios_base::badbit); }
+ }
+      return __out;
+    }
+  extern template class basic_ostream<char>;
+  extern template ostream& endl(ostream&);
+  extern template ostream& ends(ostream&);
+  extern template ostream& flush(ostream&);
+  extern template ostream& operator<<(ostream&, char);
+  extern template ostream& operator<<(ostream&, unsigned char);
+  extern template ostream& operator<<(ostream&, signed char);
+  extern template ostream& operator<<(ostream&, const char*);
+  extern template ostream& operator<<(ostream&, const unsigned char*);
+  extern template ostream& operator<<(ostream&, const signed char*);
+  extern template ostream& ostream::_M_insert(long);
+  extern template ostream& ostream::_M_insert(unsigned long);
+  extern template ostream& ostream::_M_insert(bool);
+  extern template ostream& ostream::_M_insert(long long);
+  extern template ostream& ostream::_M_insert(unsigned long long);
+  extern template ostream& ostream::_M_insert(double);
+  extern template ostream& ostream::_M_insert(long double);
+  extern template ostream& ostream::_M_insert(const void*);
+  extern template class basic_ostream<wchar_t>;
+  extern template wostream& endl(wostream&);
+  extern template wostream& ends(wostream&);
+  extern template wostream& flush(wostream&);
+  extern template wostream& operator<<(wostream&, wchar_t);
+  extern template wostream& operator<<(wostream&, char);
+  extern template wostream& operator<<(wostream&, const wchar_t*);
+  extern template wostream& operator<<(wostream&, const char*);
+  extern template wostream& wostream::_M_insert(long);
+  extern template wostream& wostream::_M_insert(unsigned long);
+  extern template wostream& wostream::_M_insert(bool);
+  extern template wostream& wostream::_M_insert(long long);
+  extern template wostream& wostream::_M_insert(unsigned long long);
+  extern template wostream& wostream::_M_insert(double);
+  extern template wostream& wostream::_M_insert(long double);
+  extern template wostream& wostream::_M_insert(const void*);
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits>
+    class basic_istream : virtual public basic_ios<_CharT, _Traits>
+    {
+    public:
+      typedef _CharT char_type;
+      typedef typename _Traits::int_type int_type;
+      typedef typename _Traits::pos_type pos_type;
+      typedef typename _Traits::off_type off_type;
+      typedef _Traits traits_type;
+      typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
+      typedef basic_ios<_CharT, _Traits> __ios_type;
+      typedef basic_istream<_CharT, _Traits> __istream_type;
+      typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
+        __num_get_type;
+      typedef ctype<_CharT> __ctype_type;
+    protected:
+      streamsize _M_gcount;
+    public:
+      explicit
+      basic_istream(__streambuf_type* __sb)
+      : _M_gcount(streamsize(0))
+      { this->init(__sb); }
+      virtual
+      ~basic_istream()
+      { _M_gcount = streamsize(0); }
+      class sentry;
+      friend class sentry;
+      __istream_type&
+      operator>>(__istream_type& (*__pf)(__istream_type&))
+      { return __pf(*this); }
+      __istream_type&
+      operator>>(__ios_type& (*__pf)(__ios_type&))
+      {
+ __pf(*this);
+ return *this;
+      }
+      __istream_type&
+      operator>>(ios_base& (*__pf)(ios_base&))
+      {
+ __pf(*this);
+ return *this;
+      }
+      __istream_type&
+      operator>>(bool& __n)
+      { return _M_extract(__n); }
+      __istream_type&
+      operator>>(short& __n);
+      __istream_type&
+      operator>>(unsigned short& __n)
+      { return _M_extract(__n); }
+      __istream_type&
+      operator>>(int& __n);
+      __istream_type&
+      operator>>(unsigned int& __n)
+      { return _M_extract(__n); }
+      __istream_type&
+      operator>>(long& __n)
+      { return _M_extract(__n); }
+      __istream_type&
+      operator>>(unsigned long& __n)
+      { return _M_extract(__n); }
+      __istream_type&
+      operator>>(long long& __n)
+      { return _M_extract(__n); }
+      __istream_type&
+      operator>>(unsigned long long& __n)
+      { return _M_extract(__n); }
+      __istream_type&
+      operator>>(float& __f)
+      { return _M_extract(__f); }
+      __istream_type&
+      operator>>(double& __f)
+      { return _M_extract(__f); }
+      __istream_type&
+      operator>>(long double& __f)
+      { return _M_extract(__f); }
+      __istream_type&
+      operator>>(void*& __p)
+      { return _M_extract(__p); }
+      __istream_type&
+      operator>>(__streambuf_type* __sb);
+      streamsize
+      gcount() const
+      { return _M_gcount; }
+      int_type
+      get();
+      __istream_type&
+      get(char_type& __c);
+      __istream_type&
+      get(char_type* __s, streamsize __n, char_type __delim);
+      __istream_type&
+      get(char_type* __s, streamsize __n)
+      { return this->get(__s, __n, this->widen('\n')); }
+      __istream_type&
+      get(__streambuf_type& __sb, char_type __delim);
+      __istream_type&
+      get(__streambuf_type& __sb)
+      { return this->get(__sb, this->widen('\n')); }
+      __istream_type&
+      getline(char_type* __s, streamsize __n, char_type __delim);
+      __istream_type&
+      getline(char_type* __s, streamsize __n)
+      { return this->getline(__s, __n, this->widen('\n')); }
+      __istream_type&
+      ignore();
+      __istream_type&
+      ignore(streamsize __n);
+      __istream_type&
+      ignore(streamsize __n, int_type __delim);
+      int_type
+      peek();
+      __istream_type&
+      read(char_type* __s, streamsize __n);
+      streamsize
+      readsome(char_type* __s, streamsize __n);
+      __istream_type&
+      putback(char_type __c);
+      __istream_type&
+      unget();
+      int
+      sync();
+      pos_type
+      tellg();
+      __istream_type&
+      seekg(pos_type);
+      __istream_type&
+      seekg(off_type, ios_base::seekdir);
+    protected:
+      basic_istream()
+      : _M_gcount(streamsize(0))
+      { this->init(0); }
+      template<typename _ValueT>
+        __istream_type&
+        _M_extract(_ValueT& __v);
+    };
+  template<>
+    basic_istream<char>&
+    basic_istream<char>::
+    getline(char_type* __s, streamsize __n, char_type __delim);
+  template<>
+    basic_istream<char>&
+    basic_istream<char>::
+    ignore(streamsize __n);
+  template<>
+    basic_istream<char>&
+    basic_istream<char>::
+    ignore(streamsize __n, int_type __delim);
+  template<>
+    basic_istream<wchar_t>&
+    basic_istream<wchar_t>::
+    getline(char_type* __s, streamsize __n, char_type __delim);
+  template<>
+    basic_istream<wchar_t>&
+    basic_istream<wchar_t>::
+    ignore(streamsize __n);
+  template<>
+    basic_istream<wchar_t>&
+    basic_istream<wchar_t>::
+    ignore(streamsize __n, int_type __delim);
+  template<typename _CharT, typename _Traits>
+    class basic_istream<_CharT, _Traits>::sentry
+    {
+    public:
+      typedef _Traits traits_type;
+      typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
+      typedef basic_istream<_CharT, _Traits> __istream_type;
+      typedef typename __istream_type::__ctype_type __ctype_type;
+      typedef typename _Traits::int_type __int_type;
+      explicit
+      sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
+      operator bool() const
+      { return _M_ok; }
+    private:
+      bool _M_ok;
+    };
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c);
+  template<class _Traits>
+    inline basic_istream<char, _Traits>&
+    operator>>(basic_istream<char, _Traits>& __in, unsigned char& __c)
+    { return (__in >> reinterpret_cast<char&>(__c)); }
+  template<class _Traits>
+    inline basic_istream<char, _Traits>&
+    operator>>(basic_istream<char, _Traits>& __in, signed char& __c)
+    { return (__in >> reinterpret_cast<char&>(__c)); }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s);
+  template<>
+    basic_istream<char>&
+    operator>>(basic_istream<char>& __in, char* __s);
+  template<class _Traits>
+    inline basic_istream<char, _Traits>&
+    operator>>(basic_istream<char, _Traits>& __in, unsigned char* __s)
+    { return (__in >> reinterpret_cast<char*>(__s)); }
+  template<class _Traits>
+    inline basic_istream<char, _Traits>&
+    operator>>(basic_istream<char, _Traits>& __in, signed char* __s)
+    { return (__in >> reinterpret_cast<char*>(__s)); }
+  template<typename _CharT, typename _Traits>
+    class basic_iostream
+    : public basic_istream<_CharT, _Traits>,
+      public basic_ostream<_CharT, _Traits>
+    {
+    public:
+      typedef _CharT char_type;
+      typedef typename _Traits::int_type int_type;
+      typedef typename _Traits::pos_type pos_type;
+      typedef typename _Traits::off_type off_type;
+      typedef _Traits traits_type;
+      typedef basic_istream<_CharT, _Traits> __istream_type;
+      typedef basic_ostream<_CharT, _Traits> __ostream_type;
+      explicit
+      basic_iostream(basic_streambuf<_CharT, _Traits>* __sb)
+      : __istream_type(__sb), __ostream_type(__sb) { }
+      virtual
+      ~basic_iostream() { }
+    protected:
+      basic_iostream()
+      : __istream_type(), __ostream_type() { }
+    };
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    ws(basic_istream<_CharT, _Traits>& __is);
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>::sentry::
+    sentry(basic_istream<_CharT, _Traits>& __in, bool __noskip) : _M_ok(false)
+    {
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      if (__in.good())
+ {
+   if (__in.tie())
+     __in.tie()->flush();
+   if (!__noskip && bool(__in.flags() & ios_base::skipws))
+     {
+       const __int_type __eof = traits_type::eof();
+       __streambuf_type* __sb = __in.rdbuf();
+       __int_type __c = __sb->sgetc();
+       const __ctype_type& __ct = __check_facet(__in._M_ctype);
+       while (!traits_type::eq_int_type(__c, __eof)
+       && __ct.is(ctype_base::space,
+    traits_type::to_char_type(__c)))
+  __c = __sb->snextc();
+       if (traits_type::eq_int_type(__c, __eof))
+  __err |= ios_base::eofbit;
+     }
+ }
+      if (__in.good() && __err == ios_base::goodbit)
+ _M_ok = true;
+      else
+ {
+   __err |= ios_base::failbit;
+   __in.setstate(__err);
+ }
+    }
+  template<typename _CharT, typename _Traits>
+    template<typename _ValueT>
+      basic_istream<_CharT, _Traits>&
+      basic_istream<_CharT, _Traits>::
+      _M_extract(_ValueT& __v)
+      {
+ sentry __cerb(*this, false);
+ if (__cerb)
+   {
+     ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+     try
+       {
+  const __num_get_type& __ng = __check_facet(this->_M_num_get);
+  __ng.get(*this, 0, *this, __err, __v);
+       }
+     catch(__cxxabiv1::__forced_unwind&)
+       {
+  this->_M_setstate(ios_base::badbit);
+  throw;
+       }
+     catch(...)
+       { this->_M_setstate(ios_base::badbit); }
+     if (__err)
+       this->setstate(__err);
+   }
+ return *this;
+      }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    operator>>(short& __n)
+    {
+      long __l;
+      _M_extract(__l);
+      if (!this->fail())
+ {
+   if (__gnu_cxx::__numeric_traits<short>::__min <= __l
+       && __l <= __gnu_cxx::__numeric_traits<short>::__max)
+     __n = short(__l);
+   else
+     this->setstate(ios_base::failbit);
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    operator>>(int& __n)
+    {
+      long __l;
+      _M_extract(__l);
+      if (!this->fail())
+ {
+   if (__gnu_cxx::__numeric_traits<int>::__min <= __l
+       && __l <= __gnu_cxx::__numeric_traits<int>::__max)
+     __n = int(__l);
+   else
+     this->setstate(ios_base::failbit);
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    operator>>(__streambuf_type* __sbout)
+    {
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      sentry __cerb(*this, false);
+      if (__cerb && __sbout)
+ {
+   try
+     {
+       bool __ineof;
+       if (!__copy_streambufs_eof(this->rdbuf(), __sbout, __ineof))
+  __err |= ios_base::failbit;
+       if (__ineof)
+  __err |= ios_base::eofbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::failbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::failbit); }
+ }
+      else if (!__sbout)
+ __err |= ios_base::failbit;
+      if (__err)
+ this->setstate(__err);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    typename basic_istream<_CharT, _Traits>::int_type
+    basic_istream<_CharT, _Traits>::
+    get(void)
+    {
+      const int_type __eof = traits_type::eof();
+      int_type __c = __eof;
+      _M_gcount = 0;
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      sentry __cerb(*this, true);
+      if (__cerb)
+ {
+   try
+     {
+       __c = this->rdbuf()->sbumpc();
+       if (!traits_type::eq_int_type(__c, __eof))
+  _M_gcount = 1;
+       else
+  __err |= ios_base::eofbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+ }
+      if (!_M_gcount)
+ __err |= ios_base::failbit;
+      if (__err)
+ this->setstate(__err);
+      return __c;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    get(char_type& __c)
+    {
+      _M_gcount = 0;
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      sentry __cerb(*this, true);
+      if (__cerb)
+ {
+   try
+     {
+       const int_type __cb = this->rdbuf()->sbumpc();
+       if (!traits_type::eq_int_type(__cb, traits_type::eof()))
+  {
+    _M_gcount = 1;
+    __c = traits_type::to_char_type(__cb);
+  }
+       else
+  __err |= ios_base::eofbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+ }
+      if (!_M_gcount)
+ __err |= ios_base::failbit;
+      if (__err)
+ this->setstate(__err);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    get(char_type* __s, streamsize __n, char_type __delim)
+    {
+      _M_gcount = 0;
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      sentry __cerb(*this, true);
+      if (__cerb)
+ {
+   try
+     {
+       const int_type __idelim = traits_type::to_int_type(__delim);
+       const int_type __eof = traits_type::eof();
+       __streambuf_type* __sb = this->rdbuf();
+       int_type __c = __sb->sgetc();
+       while (_M_gcount + 1 < __n
+       && !traits_type::eq_int_type(__c, __eof)
+       && !traits_type::eq_int_type(__c, __idelim))
+  {
+    *__s++ = traits_type::to_char_type(__c);
+    ++_M_gcount;
+    __c = __sb->snextc();
+  }
+       if (traits_type::eq_int_type(__c, __eof))
+  __err |= ios_base::eofbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+ }
+      if (__n > 0)
+ *__s = char_type();
+      if (!_M_gcount)
+ __err |= ios_base::failbit;
+      if (__err)
+ this->setstate(__err);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    get(__streambuf_type& __sb, char_type __delim)
+    {
+      _M_gcount = 0;
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      sentry __cerb(*this, true);
+      if (__cerb)
+ {
+   try
+     {
+       const int_type __idelim = traits_type::to_int_type(__delim);
+       const int_type __eof = traits_type::eof();
+       __streambuf_type* __this_sb = this->rdbuf();
+       int_type __c = __this_sb->sgetc();
+       char_type __c2 = traits_type::to_char_type(__c);
+       while (!traits_type::eq_int_type(__c, __eof)
+       && !traits_type::eq_int_type(__c, __idelim)
+       && !traits_type::eq_int_type(__sb.sputc(__c2), __eof))
+  {
+    ++_M_gcount;
+    __c = __this_sb->snextc();
+    __c2 = traits_type::to_char_type(__c);
+  }
+       if (traits_type::eq_int_type(__c, __eof))
+  __err |= ios_base::eofbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+ }
+      if (!_M_gcount)
+ __err |= ios_base::failbit;
+      if (__err)
+ this->setstate(__err);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    getline(char_type* __s, streamsize __n, char_type __delim)
+    {
+      _M_gcount = 0;
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      sentry __cerb(*this, true);
+      if (__cerb)
+        {
+          try
+            {
+              const int_type __idelim = traits_type::to_int_type(__delim);
+              const int_type __eof = traits_type::eof();
+              __streambuf_type* __sb = this->rdbuf();
+              int_type __c = __sb->sgetc();
+              while (_M_gcount + 1 < __n
+                     && !traits_type::eq_int_type(__c, __eof)
+                     && !traits_type::eq_int_type(__c, __idelim))
+                {
+                  *__s++ = traits_type::to_char_type(__c);
+                  __c = __sb->snextc();
+                  ++_M_gcount;
+                }
+              if (traits_type::eq_int_type(__c, __eof))
+                __err |= ios_base::eofbit;
+              else
+                {
+                  if (traits_type::eq_int_type(__c, __idelim))
+                    {
+                      __sb->sbumpc();
+                      ++_M_gcount;
+                    }
+                  else
+                    __err |= ios_base::failbit;
+                }
+            }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+          catch(...)
+            { this->_M_setstate(ios_base::badbit); }
+        }
+      if (__n > 0)
+ *__s = char_type();
+      if (!_M_gcount)
+        __err |= ios_base::failbit;
+      if (__err)
+        this->setstate(__err);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    ignore(void)
+    {
+      _M_gcount = 0;
+      sentry __cerb(*this, true);
+      if (__cerb)
+ {
+   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+   try
+     {
+       const int_type __eof = traits_type::eof();
+       __streambuf_type* __sb = this->rdbuf();
+       if (traits_type::eq_int_type(__sb->sbumpc(), __eof))
+  __err |= ios_base::eofbit;
+       else
+  _M_gcount = 1;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+   if (__err)
+     this->setstate(__err);
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    ignore(streamsize __n)
+    {
+      _M_gcount = 0;
+      sentry __cerb(*this, true);
+      if (__cerb && __n > 0)
+        {
+          ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+          try
+            {
+              const int_type __eof = traits_type::eof();
+              __streambuf_type* __sb = this->rdbuf();
+              int_type __c = __sb->sgetc();
+       bool __large_ignore = false;
+       while (true)
+  {
+    while (_M_gcount < __n
+    && !traits_type::eq_int_type(__c, __eof))
+      {
+        ++_M_gcount;
+        __c = __sb->snextc();
+      }
+    if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
+        && !traits_type::eq_int_type(__c, __eof))
+      {
+        _M_gcount =
+   __gnu_cxx::__numeric_traits<streamsize>::__min;
+        __large_ignore = true;
+      }
+    else
+      break;
+  }
+       if (__large_ignore)
+  _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
+       if (traits_type::eq_int_type(__c, __eof))
+                __err |= ios_base::eofbit;
+            }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+          catch(...)
+            { this->_M_setstate(ios_base::badbit); }
+          if (__err)
+            this->setstate(__err);
+        }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    ignore(streamsize __n, int_type __delim)
+    {
+      _M_gcount = 0;
+      sentry __cerb(*this, true);
+      if (__cerb && __n > 0)
+        {
+          ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+          try
+            {
+              const int_type __eof = traits_type::eof();
+              __streambuf_type* __sb = this->rdbuf();
+              int_type __c = __sb->sgetc();
+       bool __large_ignore = false;
+       while (true)
+  {
+    while (_M_gcount < __n
+    && !traits_type::eq_int_type(__c, __eof)
+    && !traits_type::eq_int_type(__c, __delim))
+      {
+        ++_M_gcount;
+        __c = __sb->snextc();
+      }
+    if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
+        && !traits_type::eq_int_type(__c, __eof)
+        && !traits_type::eq_int_type(__c, __delim))
+      {
+        _M_gcount =
+   __gnu_cxx::__numeric_traits<streamsize>::__min;
+        __large_ignore = true;
+      }
+    else
+      break;
+  }
+       if (__large_ignore)
+  _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
+              if (traits_type::eq_int_type(__c, __eof))
+                __err |= ios_base::eofbit;
+       else if (traits_type::eq_int_type(__c, __delim))
+  {
+    if (_M_gcount
+        < __gnu_cxx::__numeric_traits<streamsize>::__max)
+      ++_M_gcount;
+    __sb->sbumpc();
+  }
+            }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+          catch(...)
+            { this->_M_setstate(ios_base::badbit); }
+          if (__err)
+            this->setstate(__err);
+        }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    typename basic_istream<_CharT, _Traits>::int_type
+    basic_istream<_CharT, _Traits>::
+    peek(void)
+    {
+      int_type __c = traits_type::eof();
+      _M_gcount = 0;
+      sentry __cerb(*this, true);
+      if (__cerb)
+ {
+   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+   try
+     {
+       __c = this->rdbuf()->sgetc();
+       if (traits_type::eq_int_type(__c, traits_type::eof()))
+  __err |= ios_base::eofbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+   if (__err)
+     this->setstate(__err);
+ }
+      return __c;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    read(char_type* __s, streamsize __n)
+    {
+      _M_gcount = 0;
+      sentry __cerb(*this, true);
+      if (__cerb)
+ {
+   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+   try
+     {
+       _M_gcount = this->rdbuf()->sgetn(__s, __n);
+       if (_M_gcount != __n)
+  __err |= (ios_base::eofbit | ios_base::failbit);
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+   if (__err)
+     this->setstate(__err);
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    streamsize
+    basic_istream<_CharT, _Traits>::
+    readsome(char_type* __s, streamsize __n)
+    {
+      _M_gcount = 0;
+      sentry __cerb(*this, true);
+      if (__cerb)
+ {
+   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+   try
+     {
+       const streamsize __num = this->rdbuf()->in_avail();
+       if (__num > 0)
+  _M_gcount = this->rdbuf()->sgetn(__s, std::min(__num, __n));
+       else if (__num == -1)
+  __err |= ios_base::eofbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+   if (__err)
+     this->setstate(__err);
+ }
+      return _M_gcount;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    putback(char_type __c)
+    {
+      _M_gcount = 0;
+      sentry __cerb(*this, true);
+      if (__cerb)
+ {
+   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+   try
+     {
+       const int_type __eof = traits_type::eof();
+       __streambuf_type* __sb = this->rdbuf();
+       if (!__sb
+    || traits_type::eq_int_type(__sb->sputbackc(__c), __eof))
+  __err |= ios_base::badbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+   if (__err)
+     this->setstate(__err);
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    unget(void)
+    {
+      _M_gcount = 0;
+      sentry __cerb(*this, true);
+      if (__cerb)
+ {
+   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+   try
+     {
+       const int_type __eof = traits_type::eof();
+       __streambuf_type* __sb = this->rdbuf();
+       if (!__sb
+    || traits_type::eq_int_type(__sb->sungetc(), __eof))
+  __err |= ios_base::badbit;
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+   if (__err)
+     this->setstate(__err);
+ }
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    int
+    basic_istream<_CharT, _Traits>::
+    sync(void)
+    {
+      int __ret = -1;
+      sentry __cerb(*this, true);
+      if (__cerb)
+ {
+   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+   try
+     {
+       __streambuf_type* __sb = this->rdbuf();
+       if (__sb)
+  {
+    if (__sb->pubsync() == -1)
+      __err |= ios_base::badbit;
+    else
+      __ret = 0;
+  }
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       this->_M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { this->_M_setstate(ios_base::badbit); }
+   if (__err)
+     this->setstate(__err);
+ }
+      return __ret;
+    }
+  template<typename _CharT, typename _Traits>
+    typename basic_istream<_CharT, _Traits>::pos_type
+    basic_istream<_CharT, _Traits>::
+    tellg(void)
+    {
+      pos_type __ret = pos_type(-1);
+      try
+ {
+   if (!this->fail())
+     __ret = this->rdbuf()->pubseekoff(0, ios_base::cur,
+           ios_base::in);
+ }
+      catch(__cxxabiv1::__forced_unwind&)
+ {
+   this->_M_setstate(ios_base::badbit);
+   throw;
+ }
+      catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+      return __ret;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    seekg(pos_type __pos)
+    {
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      try
+ {
+   if (!this->fail())
+     {
+       const pos_type __p = this->rdbuf()->pubseekpos(__pos,
+            ios_base::in);
+       if (__p == pos_type(off_type(-1)))
+  __err |= ios_base::failbit;
+     }
+ }
+      catch(__cxxabiv1::__forced_unwind&)
+ {
+   this->_M_setstate(ios_base::badbit);
+   throw;
+ }
+      catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+      if (__err)
+ this->setstate(__err);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    basic_istream<_CharT, _Traits>::
+    seekg(off_type __off, ios_base::seekdir __dir)
+    {
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      try
+ {
+   if (!this->fail())
+     {
+       const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir,
+            ios_base::in);
+       if (__p == pos_type(off_type(-1)))
+  __err |= ios_base::failbit;
+     }
+ }
+      catch(__cxxabiv1::__forced_unwind&)
+ {
+   this->_M_setstate(ios_base::badbit);
+   throw;
+ }
+      catch(...)
+ { this->_M_setstate(ios_base::badbit); }
+      if (__err)
+ this->setstate(__err);
+      return *this;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c)
+    {
+      typedef basic_istream<_CharT, _Traits> __istream_type;
+      typedef typename __istream_type::int_type __int_type;
+      typename __istream_type::sentry __cerb(__in, false);
+      if (__cerb)
+ {
+   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+   try
+     {
+       const __int_type __cb = __in.rdbuf()->sbumpc();
+       if (!_Traits::eq_int_type(__cb, _Traits::eof()))
+  __c = _Traits::to_char_type(__cb);
+       else
+  __err |= (ios_base::eofbit | ios_base::failbit);
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       __in._M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { __in._M_setstate(ios_base::badbit); }
+   if (__err)
+     __in.setstate(__err);
+ }
+      return __in;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
+    {
+      typedef basic_istream<_CharT, _Traits> __istream_type;
+      typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
+      typedef typename _Traits::int_type int_type;
+      typedef _CharT char_type;
+      typedef ctype<_CharT> __ctype_type;
+      streamsize __extracted = 0;
+      ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+      typename __istream_type::sentry __cerb(__in, false);
+      if (__cerb)
+ {
+   try
+     {
+       streamsize __num = __in.width();
+       if (__num <= 0)
+  __num = __gnu_cxx::__numeric_traits<streamsize>::__max;
+       const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
+       const int_type __eof = _Traits::eof();
+       __streambuf_type* __sb = __in.rdbuf();
+       int_type __c = __sb->sgetc();
+       while (__extracted < __num - 1
+       && !_Traits::eq_int_type(__c, __eof)
+       && !__ct.is(ctype_base::space,
+     _Traits::to_char_type(__c)))
+  {
+    *__s++ = _Traits::to_char_type(__c);
+    ++__extracted;
+    __c = __sb->snextc();
+  }
+       if (_Traits::eq_int_type(__c, __eof))
+  __err |= ios_base::eofbit;
+       *__s = char_type();
+       __in.width(0);
+     }
+   catch(__cxxabiv1::__forced_unwind&)
+     {
+       __in._M_setstate(ios_base::badbit);
+       throw;
+     }
+   catch(...)
+     { __in._M_setstate(ios_base::badbit); }
+ }
+      if (!__extracted)
+ __err |= ios_base::failbit;
+      if (__err)
+ __in.setstate(__err);
+      return __in;
+    }
+  template<typename _CharT, typename _Traits>
+    basic_istream<_CharT, _Traits>&
+    ws(basic_istream<_CharT, _Traits>& __in)
+    {
+      typedef basic_istream<_CharT, _Traits> __istream_type;
+      typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
+      typedef typename __istream_type::int_type __int_type;
+      typedef ctype<_CharT> __ctype_type;
+      const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
+      const __int_type __eof = _Traits::eof();
+      __streambuf_type* __sb = __in.rdbuf();
+      __int_type __c = __sb->sgetc();
+      while (!_Traits::eq_int_type(__c, __eof)
+      && __ct.is(ctype_base::space, _Traits::to_char_type(__c)))
+ __c = __sb->snextc();
+       if (_Traits::eq_int_type(__c, __eof))
+  __in.setstate(ios_base::eofbit);
+      return __in;
+    }
+  extern template class basic_istream<char>;
+  extern template istream& ws(istream&);
+  extern template istream& operator>>(istream&, char&);
+  extern template istream& operator>>(istream&, char*);
+  extern template istream& operator>>(istream&, unsigned char&);
+  extern template istream& operator>>(istream&, signed char&);
+  extern template istream& operator>>(istream&, unsigned char*);
+  extern template istream& operator>>(istream&, signed char*);
+  extern template istream& istream::_M_extract(unsigned short&);
+  extern template istream& istream::_M_extract(unsigned int&);
+  extern template istream& istream::_M_extract(long&);
+  extern template istream& istream::_M_extract(unsigned long&);
+  extern template istream& istream::_M_extract(bool&);
+  extern template istream& istream::_M_extract(long long&);
+  extern template istream& istream::_M_extract(unsigned long long&);
+  extern template istream& istream::_M_extract(float&);
+  extern template istream& istream::_M_extract(double&);
+  extern template istream& istream::_M_extract(long double&);
+  extern template istream& istream::_M_extract(void*&);
+  extern template class basic_iostream<char>;
+  extern template class basic_istream<wchar_t>;
+  extern template wistream& ws(wistream&);
+  extern template wistream& operator>>(wistream&, wchar_t&);
+  extern template wistream& operator>>(wistream&, wchar_t*);
+  extern template wistream& wistream::_M_extract(unsigned short&);
+  extern template wistream& wistream::_M_extract(unsigned int&);
+  extern template wistream& wistream::_M_extract(long&);
+  extern template wistream& wistream::_M_extract(unsigned long&);
+  extern template wistream& wistream::_M_extract(bool&);
+  extern template wistream& wistream::_M_extract(long long&);
+  extern template wistream& wistream::_M_extract(unsigned long long&);
+  extern template wistream& wistream::_M_extract(float&);
+  extern template wistream& wistream::_M_extract(double&);
+  extern template wistream& wistream::_M_extract(long double&);
+  extern template wistream& wistream::_M_extract(void*&);
+  extern template class basic_iostream<wchar_t>;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  extern istream cin;
+  extern ostream cout;
+  extern ostream cerr;
+  extern ostream clog;
+  extern wistream wcin;
+  extern wostream wcout;
+  extern wostream wcerr;
+  extern wostream wclog;
+  static ios_base::Init __ioinit;
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _T1, typename _T2>
+    inline void
+    _Construct(_T1* __p, const _T2& __value)
+    {
+      ::new(static_cast<void*>(__p)) _T1(__value);
+    }
+  template<typename _Tp>
+    inline void
+    _Destroy(_Tp* __pointer)
+    { __pointer->~_Tp(); }
+  template<bool>
+    struct _Destroy_aux
+    {
+      template<typename _ForwardIterator>
+        static void
+        __destroy(_ForwardIterator __first, _ForwardIterator __last)
+ {
+   for (; __first != __last; ++__first)
+     std::_Destroy(&*__first);
+ }
+    };
+  template<>
+    struct _Destroy_aux<true>
+    {
+      template<typename _ForwardIterator>
+        static void
+        __destroy(_ForwardIterator, _ForwardIterator) { }
+    };
+  template<typename _ForwardIterator>
+    inline void
+    _Destroy(_ForwardIterator __first, _ForwardIterator __last)
+    {
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+                       _Value_type;
+      std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
+ __destroy(__first, __last);
+    }
+  template <typename _Tp> class allocator;
+  template<typename _ForwardIterator, typename _Allocator>
+    void
+    _Destroy(_ForwardIterator __first, _ForwardIterator __last,
+      _Allocator& __alloc)
+    {
+      for (; __first != __last; ++__first)
+ __alloc.destroy(&*__first);
+    }
+  template<typename _ForwardIterator, typename _Tp>
+    inline void
+    _Destroy(_ForwardIterator __first, _ForwardIterator __last,
+      allocator<_Tp>&)
+    {
+      _Destroy(__first, __last);
+    }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<bool>
+    struct __uninitialized_copy
+    {
+      template<typename _InputIterator, typename _ForwardIterator>
+        static _ForwardIterator
+        uninitialized_copy(_InputIterator __first, _InputIterator __last,
+      _ForwardIterator __result)
+        {
+   _ForwardIterator __cur = __result;
+   try
+     {
+       for (; __first != __last; ++__first, ++__cur)
+  ::new(static_cast<void*>(&*__cur)) typename
+      iterator_traits<_ForwardIterator>::value_type(*__first);
+       return __cur;
+     }
+   catch(...)
+     {
+       std::_Destroy(__result, __cur);
+       throw;
+     }
+ }
+    };
+  template<>
+    struct __uninitialized_copy<true>
+    {
+      template<typename _InputIterator, typename _ForwardIterator>
+        static _ForwardIterator
+        uninitialized_copy(_InputIterator __first, _InputIterator __last,
+      _ForwardIterator __result)
+        { return std::copy(__first, __last, __result); }
+    };
+  template<typename _InputIterator, typename _ForwardIterator>
+    inline _ForwardIterator
+    uninitialized_copy(_InputIterator __first, _InputIterator __last,
+         _ForwardIterator __result)
+    {
+      typedef typename iterator_traits<_InputIterator>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType2;
+      return std::__uninitialized_copy<(__is_pod(_ValueType1)
+     && __is_pod(_ValueType2))>::
+ uninitialized_copy(__first, __last, __result);
+    }
+  template<bool>
+    struct __uninitialized_fill
+    {
+      template<typename _ForwardIterator, typename _Tp>
+        static void
+        uninitialized_fill(_ForwardIterator __first,
+      _ForwardIterator __last, const _Tp& __x)
+        {
+   _ForwardIterator __cur = __first;
+   try
+     {
+       for (; __cur != __last; ++__cur)
+  std::_Construct(&*__cur, __x);
+     }
+   catch(...)
+     {
+       std::_Destroy(__first, __cur);
+       throw;
+     }
+ }
+    };
+  template<>
+    struct __uninitialized_fill<true>
+    {
+      template<typename _ForwardIterator, typename _Tp>
+        static void
+        uninitialized_fill(_ForwardIterator __first,
+      _ForwardIterator __last, const _Tp& __x)
+        { std::fill(__first, __last, __x); }
+    };
+  template<typename _ForwardIterator, typename _Tp>
+    inline void
+    uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last,
+         const _Tp& __x)
+    {
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+      std::__uninitialized_fill<__is_pod(_ValueType)>::
+ uninitialized_fill(__first, __last, __x);
+    }
+  template<bool>
+    struct __uninitialized_fill_n
+    {
+      template<typename _ForwardIterator, typename _Size, typename _Tp>
+        static void
+        uninitialized_fill_n(_ForwardIterator __first, _Size __n,
+        const _Tp& __x)
+        {
+   _ForwardIterator __cur = __first;
+   try
+     {
+       for (; __n > 0; --__n, ++__cur)
+  std::_Construct(&*__cur, __x);
+     }
+   catch(...)
+     {
+       std::_Destroy(__first, __cur);
+       throw;
+     }
+ }
+    };
+  template<>
+    struct __uninitialized_fill_n<true>
+    {
+      template<typename _ForwardIterator, typename _Size, typename _Tp>
+        static void
+        uninitialized_fill_n(_ForwardIterator __first, _Size __n,
+        const _Tp& __x)
+        { std::fill_n(__first, __n, __x); }
+    };
+  template<typename _ForwardIterator, typename _Size, typename _Tp>
+    inline void
+    uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x)
+    {
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+      std::__uninitialized_fill_n<__is_pod(_ValueType)>::
+ uninitialized_fill_n(__first, __n, __x);
+    }
+  template<typename _InputIterator, typename _ForwardIterator,
+    typename _Allocator>
+    _ForwardIterator
+    __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
+      _ForwardIterator __result, _Allocator& __alloc)
+    {
+      _ForwardIterator __cur = __result;
+      try
+ {
+   for (; __first != __last; ++__first, ++__cur)
+     __alloc.construct(&*__cur, *__first);
+   return __cur;
+ }
+      catch(...)
+ {
+   std::_Destroy(__result, __cur, __alloc);
+   throw;
+ }
+    }
+  template<typename _InputIterator, typename _ForwardIterator, typename _Tp>
+    inline _ForwardIterator
+    __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
+      _ForwardIterator __result, allocator<_Tp>&)
+    { return std::uninitialized_copy(__first, __last, __result); }
+  template<typename _InputIterator, typename _ForwardIterator,
+    typename _Allocator>
+    inline _ForwardIterator
+    __uninitialized_move_a(_InputIterator __first, _InputIterator __last,
+      _ForwardIterator __result, _Allocator& __alloc)
+    {
+      return std::__uninitialized_copy_a((__first),
+      (__last),
+      __result, __alloc);
+    }
+  template<typename _ForwardIterator, typename _Tp, typename _Allocator>
+    void
+    __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
+      const _Tp& __x, _Allocator& __alloc)
+    {
+      _ForwardIterator __cur = __first;
+      try
+ {
+   for (; __cur != __last; ++__cur)
+     __alloc.construct(&*__cur, __x);
+ }
+      catch(...)
+ {
+   std::_Destroy(__first, __cur, __alloc);
+   throw;
+ }
+    }
+  template<typename _ForwardIterator, typename _Tp, typename _Tp2>
+    inline void
+    __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
+      const _Tp& __x, allocator<_Tp2>&)
+    { std::uninitialized_fill(__first, __last, __x); }
+  template<typename _ForwardIterator, typename _Size, typename _Tp,
+    typename _Allocator>
+    void
+    __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
+        const _Tp& __x, _Allocator& __alloc)
+    {
+      _ForwardIterator __cur = __first;
+      try
+ {
+   for (; __n > 0; --__n, ++__cur)
+     __alloc.construct(&*__cur, __x);
+ }
+      catch(...)
+ {
+   std::_Destroy(__first, __cur, __alloc);
+   throw;
+ }
+    }
+  template<typename _ForwardIterator, typename _Size, typename _Tp,
+    typename _Tp2>
+    inline void
+    __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
+        const _Tp& __x, allocator<_Tp2>&)
+    { std::uninitialized_fill_n(__first, __n, __x); }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _ForwardIterator, typename _Allocator>
+    inline _ForwardIterator
+    __uninitialized_copy_move(_InputIterator1 __first1,
+         _InputIterator1 __last1,
+         _InputIterator2 __first2,
+         _InputIterator2 __last2,
+         _ForwardIterator __result,
+         _Allocator& __alloc)
+    {
+      _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1,
+          __result,
+          __alloc);
+      try
+ {
+   return std::__uninitialized_move_a(__first2, __last2, __mid, __alloc);
+ }
+      catch(...)
+ {
+   std::_Destroy(__result, __mid, __alloc);
+   throw;
+ }
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _ForwardIterator, typename _Allocator>
+    inline _ForwardIterator
+    __uninitialized_move_copy(_InputIterator1 __first1,
+         _InputIterator1 __last1,
+         _InputIterator2 __first2,
+         _InputIterator2 __last2,
+         _ForwardIterator __result,
+         _Allocator& __alloc)
+    {
+      _ForwardIterator __mid = std::__uninitialized_move_a(__first1, __last1,
+          __result,
+          __alloc);
+      try
+ {
+   return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc);
+ }
+      catch(...)
+ {
+   std::_Destroy(__result, __mid, __alloc);
+   throw;
+ }
+    }
+  template<typename _ForwardIterator, typename _Tp, typename _InputIterator,
+    typename _Allocator>
+    inline _ForwardIterator
+    __uninitialized_fill_move(_ForwardIterator __result, _ForwardIterator __mid,
+         const _Tp& __x, _InputIterator __first,
+         _InputIterator __last, _Allocator& __alloc)
+    {
+      std::__uninitialized_fill_a(__result, __mid, __x, __alloc);
+      try
+ {
+   return std::__uninitialized_move_a(__first, __last, __mid, __alloc);
+ }
+      catch(...)
+ {
+   std::_Destroy(__result, __mid, __alloc);
+   throw;
+ }
+    }
+  template<typename _InputIterator, typename _ForwardIterator, typename _Tp,
+    typename _Allocator>
+    inline void
+    __uninitialized_move_fill(_InputIterator __first1, _InputIterator __last1,
+         _ForwardIterator __first2,
+         _ForwardIterator __last2, const _Tp& __x,
+         _Allocator& __alloc)
+    {
+      _ForwardIterator __mid2 = std::__uninitialized_move_a(__first1, __last1,
+           __first2,
+           __alloc);
+      try
+ {
+   std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc);
+ }
+      catch(...)
+ {
+   std::_Destroy(__first2, __mid2, __alloc);
+   throw;
+ }
+    }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Tp, typename _Alloc>
+    struct _Vector_base
+    {
+      typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
+      struct _Vector_impl
+      : public _Tp_alloc_type
+      {
+ typename _Tp_alloc_type::pointer _M_start;
+ typename _Tp_alloc_type::pointer _M_finish;
+ typename _Tp_alloc_type::pointer _M_end_of_storage;
+ _Vector_impl()
+ : _Tp_alloc_type(), _M_start(0), _M_finish(0), _M_end_of_storage(0)
+ { }
+ _Vector_impl(_Tp_alloc_type const& __a)
+ : _Tp_alloc_type(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0)
+ { }
+      };
+    public:
+      typedef _Alloc allocator_type;
+      _Tp_alloc_type&
+      _M_get_Tp_allocator()
+      { return *static_cast<_Tp_alloc_type*>(&this->_M_impl); }
+      const _Tp_alloc_type&
+      _M_get_Tp_allocator() const
+      { return *static_cast<const _Tp_alloc_type*>(&this->_M_impl); }
+      allocator_type
+      get_allocator() const
+      { return allocator_type(_M_get_Tp_allocator()); }
+      _Vector_base()
+      : _M_impl() { }
+      _Vector_base(const allocator_type& __a)
+      : _M_impl(__a) { }
+      _Vector_base(size_t __n, const allocator_type& __a)
+      : _M_impl(__a)
+      {
+ this->_M_impl._M_start = this->_M_allocate(__n);
+ this->_M_impl._M_finish = this->_M_impl._M_start;
+ this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+      }
+      ~_Vector_base()
+      { _M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage
+        - this->_M_impl._M_start); }
+    public:
+      _Vector_impl _M_impl;
+      typename _Tp_alloc_type::pointer
+      _M_allocate(size_t __n)
+      { return __n != 0 ? _M_impl.allocate(__n) : 0; }
+      void
+      _M_deallocate(typename _Tp_alloc_type::pointer __p, size_t __n)
+      {
+ if (__p)
+   _M_impl.deallocate(__p, __n);
+      }
+    };
+  template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
+    class vector : protected _Vector_base<_Tp, _Alloc>
+    {
+      typedef typename _Alloc::value_type _Alloc_value_type;
+     
+     
+      typedef _Vector_base<_Tp, _Alloc> _Base;
+      typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
+    public:
+      typedef _Tp value_type;
+      typedef typename _Tp_alloc_type::pointer pointer;
+      typedef typename _Tp_alloc_type::const_pointer const_pointer;
+      typedef typename _Tp_alloc_type::reference reference;
+      typedef typename _Tp_alloc_type::const_reference const_reference;
+      typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
+      typedef __gnu_cxx::__normal_iterator<const_pointer, vector>
+      const_iterator;
+      typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+      typedef std::reverse_iterator<iterator> reverse_iterator;
+      typedef size_t size_type;
+      typedef ptrdiff_t difference_type;
+      typedef _Alloc allocator_type;
+    protected:
+      using _Base::_M_allocate;
+      using _Base::_M_deallocate;
+      using _Base::_M_impl;
+      using _Base::_M_get_Tp_allocator;
+    public:
+      vector()
+      : _Base() { }
+      explicit
+      vector(const allocator_type& __a)
+      : _Base(__a) { }
+      explicit
+      vector(size_type __n, const value_type& __value = value_type(),
+      const allocator_type& __a = allocator_type())
+      : _Base(__n, __a)
+      { _M_fill_initialize(__n, __value); }
+      vector(const vector& __x)
+      : _Base(__x.size(), __x._M_get_Tp_allocator())
+      { this->_M_impl._M_finish =
+   std::__uninitialized_copy_a(__x.begin(), __x.end(),
+          this->_M_impl._M_start,
+          _M_get_Tp_allocator());
+      }
+      template<typename _InputIterator>
+        vector(_InputIterator __first, _InputIterator __last,
+        const allocator_type& __a = allocator_type())
+ : _Base(__a)
+        {
+   typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+   _M_initialize_dispatch(__first, __last, _Integral());
+ }
+      ~vector()
+      { std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+        _M_get_Tp_allocator()); }
+      vector&
+      operator=(const vector& __x);
+      void
+      assign(size_type __n, const value_type& __val)
+      { _M_fill_assign(__n, __val); }
+      template<typename _InputIterator>
+        void
+        assign(_InputIterator __first, _InputIterator __last)
+        {
+   typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+   _M_assign_dispatch(__first, __last, _Integral());
+ }
+      using _Base::get_allocator;
+      iterator
+      begin()
+      { return iterator(this->_M_impl._M_start); }
+      const_iterator
+      begin() const
+      { return const_iterator(this->_M_impl._M_start); }
+      iterator
+      end()
+      { return iterator(this->_M_impl._M_finish); }
+      const_iterator
+      end() const
+      { return const_iterator(this->_M_impl._M_finish); }
+      reverse_iterator
+      rbegin()
+      { return reverse_iterator(end()); }
+      const_reverse_iterator
+      rbegin() const
+      { return const_reverse_iterator(end()); }
+      reverse_iterator
+      rend()
+      { return reverse_iterator(begin()); }
+      const_reverse_iterator
+      rend() const
+      { return const_reverse_iterator(begin()); }
+      size_type
+      size() const
+      { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
+      size_type
+      max_size() const
+      { return _M_get_Tp_allocator().max_size(); }
+      void
+      resize(size_type __new_size, value_type __x = value_type())
+      {
+ if (__new_size < size())
+   _M_erase_at_end(this->_M_impl._M_start + __new_size);
+ else
+   insert(end(), __new_size - size(), __x);
+      }
+      size_type
+      capacity() const
+      { return size_type(this->_M_impl._M_end_of_storage
+    - this->_M_impl._M_start); }
+      bool
+      empty() const
+      { return begin() == end(); }
+      void
+      reserve(size_type __n);
+      reference
+      operator[](size_type __n)
+      { return *(this->_M_impl._M_start + __n); }
+      const_reference
+      operator[](size_type __n) const
+      { return *(this->_M_impl._M_start + __n); }
+    protected:
+      void
+      _M_range_check(size_type __n) const
+      {
+ if (__n >= this->size())
+   __throw_out_of_range(("vector::_M_range_check"));
+      }
+    public:
+      reference
+      at(size_type __n)
+      {
+ _M_range_check(__n);
+ return (*this)[__n];
+      }
+      const_reference
+      at(size_type __n) const
+      {
+ _M_range_check(__n);
+ return (*this)[__n];
+      }
+      reference
+      front()
+      { return *begin(); }
+      const_reference
+      front() const
+      { return *begin(); }
+      reference
+      back()
+      { return *(end() - 1); }
+      const_reference
+      back() const
+      { return *(end() - 1); }
+      pointer
+      data()
+      { return pointer(this->_M_impl._M_start); }
+      const_pointer
+      data() const
+      { return const_pointer(this->_M_impl._M_start); }
+      void
+      push_back(const value_type& __x)
+      {
+ if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+   {
+     this->_M_impl.construct(this->_M_impl._M_finish, __x);
+     ++this->_M_impl._M_finish;
+   }
+ else
+   _M_insert_aux(end(), __x);
+      }
+      void
+      pop_back()
+      {
+ --this->_M_impl._M_finish;
+ this->_M_impl.destroy(this->_M_impl._M_finish);
+      }
+      iterator
+      insert(iterator __position, const value_type& __x);
+      void
+      insert(iterator __position, size_type __n, const value_type& __x)
+      { _M_fill_insert(__position, __n, __x); }
+      template<typename _InputIterator>
+        void
+        insert(iterator __position, _InputIterator __first,
+        _InputIterator __last)
+        {
+   typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+   _M_insert_dispatch(__position, __first, __last, _Integral());
+ }
+      iterator
+      erase(iterator __position);
+      iterator
+      erase(iterator __first, iterator __last);
+      void
+      swap(vector& __x)
+      {
+ std::swap(this->_M_impl._M_start, __x._M_impl._M_start);
+ std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish);
+ std::swap(this->_M_impl._M_end_of_storage,
+    __x._M_impl._M_end_of_storage);
+ std::__alloc_swap<_Tp_alloc_type>::_S_do_it(_M_get_Tp_allocator(),
+          __x._M_get_Tp_allocator());
+      }
+      void
+      clear()
+      { _M_erase_at_end(this->_M_impl._M_start); }
+    protected:
+      template<typename _ForwardIterator>
+        pointer
+        _M_allocate_and_copy(size_type __n,
+        _ForwardIterator __first, _ForwardIterator __last)
+        {
+   pointer __result = this->_M_allocate(__n);
+   try
+     {
+       std::__uninitialized_copy_a(__first, __last, __result,
+       _M_get_Tp_allocator());
+       return __result;
+     }
+   catch(...)
+     {
+       _M_deallocate(__result, __n);
+       throw;
+     }
+ }
+      template<typename _Integer>
+        void
+        _M_initialize_dispatch(_Integer __n, _Integer __value, __true_type)
+        {
+   this->_M_impl._M_start = _M_allocate(static_cast<size_type>(__n));
+   this->_M_impl._M_end_of_storage =
+     this->_M_impl._M_start + static_cast<size_type>(__n);
+   _M_fill_initialize(static_cast<size_type>(__n), __value);
+ }
+      template<typename _InputIterator>
+        void
+        _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
+          __false_type)
+        {
+   typedef typename std::iterator_traits<_InputIterator>::
+     iterator_category _IterCategory;
+   _M_range_initialize(__first, __last, _IterCategory());
+ }
+      template<typename _InputIterator>
+        void
+        _M_range_initialize(_InputIterator __first,
+       _InputIterator __last, std::input_iterator_tag)
+        {
+   for (; __first != __last; ++__first)
+     push_back(*__first);
+ }
+      template<typename _ForwardIterator>
+        void
+        _M_range_initialize(_ForwardIterator __first,
+       _ForwardIterator __last, std::forward_iterator_tag)
+        {
+   const size_type __n = std::distance(__first, __last);
+   this->_M_impl._M_start = this->_M_allocate(__n);
+   this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+   this->_M_impl._M_finish =
+     std::__uninitialized_copy_a(__first, __last,
+     this->_M_impl._M_start,
+     _M_get_Tp_allocator());
+ }
+      void
+      _M_fill_initialize(size_type __n, const value_type& __value)
+      {
+ std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
+          _M_get_Tp_allocator());
+ this->_M_impl._M_finish = this->_M_impl._M_end_of_storage;
+      }
+      template<typename _Integer>
+        void
+        _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
+        { _M_fill_assign(__n, __val); }
+      template<typename _InputIterator>
+        void
+        _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
+      __false_type)
+        {
+   typedef typename std::iterator_traits<_InputIterator>::
+     iterator_category _IterCategory;
+   _M_assign_aux(__first, __last, _IterCategory());
+ }
+      template<typename _InputIterator>
+        void
+        _M_assign_aux(_InputIterator __first, _InputIterator __last,
+        std::input_iterator_tag);
+      template<typename _ForwardIterator>
+        void
+        _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
+        std::forward_iterator_tag);
+      void
+      _M_fill_assign(size_type __n, const value_type& __val);
+      template<typename _Integer>
+        void
+        _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val,
+      __true_type)
+        { _M_fill_insert(__pos, __n, __val); }
+      template<typename _InputIterator>
+        void
+        _M_insert_dispatch(iterator __pos, _InputIterator __first,
+      _InputIterator __last, __false_type)
+        {
+   typedef typename std::iterator_traits<_InputIterator>::
+     iterator_category _IterCategory;
+   _M_range_insert(__pos, __first, __last, _IterCategory());
+ }
+      template<typename _InputIterator>
+        void
+        _M_range_insert(iterator __pos, _InputIterator __first,
+   _InputIterator __last, std::input_iterator_tag);
+      template<typename _ForwardIterator>
+        void
+        _M_range_insert(iterator __pos, _ForwardIterator __first,
+   _ForwardIterator __last, std::forward_iterator_tag);
+      void
+      _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);
+      void
+      _M_insert_aux(iterator __position, const value_type& __x);
+      size_type
+      _M_check_len(size_type __n, const char* __s) const
+      {
+ if (max_size() - size() < __n)
+   __throw_length_error((__s));
+ const size_type __len = size() + std::max(size(), __n);
+ return (__len < size() || __len > max_size()) ? max_size() : __len;
+      }
+      void
+      _M_erase_at_end(pointer __pos)
+      {
+ std::_Destroy(__pos, this->_M_impl._M_finish, _M_get_Tp_allocator());
+ this->_M_impl._M_finish = __pos;
+      }
+    };
+  template<typename _Tp, typename _Alloc>
+    inline bool
+    operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    { return (__x.size() == __y.size()
+       && std::equal(__x.begin(), __x.end(), __y.begin())); }
+  template<typename _Tp, typename _Alloc>
+    inline bool
+    operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    { return std::lexicographical_compare(__x.begin(), __x.end(),
+       __y.begin(), __y.end()); }
+  template<typename _Tp, typename _Alloc>
+    inline bool
+    operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    { return !(__x == __y); }
+  template<typename _Tp, typename _Alloc>
+    inline bool
+    operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    { return __y < __x; }
+  template<typename _Tp, typename _Alloc>
+    inline bool
+    operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    { return !(__y < __x); }
+  template<typename _Tp, typename _Alloc>
+    inline bool
+    operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    { return !(__x < __y); }
+  template<typename _Tp, typename _Alloc>
+    inline void
+    swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y)
+    { __x.swap(__y); }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  typedef unsigned long _Bit_type;
+  enum { _S_word_bit = int(8 * sizeof(_Bit_type)) };
+  struct _Bit_reference
+  {
+    _Bit_type * _M_p;
+    _Bit_type _M_mask;
+    _Bit_reference(_Bit_type * __x, _Bit_type __y)
+    : _M_p(__x), _M_mask(__y) { }
+    _Bit_reference() : _M_p(0), _M_mask(0) { }
+    operator bool() const
+    { return !!(*_M_p & _M_mask); }
+    _Bit_reference&
+    operator=(bool __x)
+    {
+      if (__x)
+ *_M_p |= _M_mask;
+      else
+ *_M_p &= ~_M_mask;
+      return *this;
+    }
+    _Bit_reference&
+    operator=(const _Bit_reference& __x)
+    { return *this = bool(__x); }
+    bool
+    operator==(const _Bit_reference& __x) const
+    { return bool(*this) == bool(__x); }
+    bool
+    operator<(const _Bit_reference& __x) const
+    { return !bool(*this) && bool(__x); }
+    void
+    flip()
+    { *_M_p ^= _M_mask; }
+  };
+  struct _Bit_iterator_base
+  : public std::iterator<std::random_access_iterator_tag, bool>
+  {
+    _Bit_type * _M_p;
+    unsigned int _M_offset;
+    _Bit_iterator_base(_Bit_type * __x, unsigned int __y)
+    : _M_p(__x), _M_offset(__y) { }
+    void
+    _M_bump_up()
+    {
+      if (_M_offset++ == int(_S_word_bit) - 1)
+ {
+   _M_offset = 0;
+   ++_M_p;
+ }
+    }
+    void
+    _M_bump_down()
+    {
+      if (_M_offset-- == 0)
+ {
+   _M_offset = int(_S_word_bit) - 1;
+   --_M_p;
+ }
+    }
+    void
+    _M_incr(ptrdiff_t __i)
+    {
+      difference_type __n = __i + _M_offset;
+      _M_p += __n / int(_S_word_bit);
+      __n = __n % int(_S_word_bit);
+      if (__n < 0)
+ {
+   __n += int(_S_word_bit);
+   --_M_p;
+ }
+      _M_offset = static_cast<unsigned int>(__n);
+    }
+    bool
+    operator==(const _Bit_iterator_base& __i) const
+    { return _M_p == __i._M_p && _M_offset == __i._M_offset; }
+    bool
+    operator<(const _Bit_iterator_base& __i) const
+    {
+      return _M_p < __i._M_p
+      || (_M_p == __i._M_p && _M_offset < __i._M_offset);
+    }
+    bool
+    operator!=(const _Bit_iterator_base& __i) const
+    { return !(*this == __i); }
+    bool
+    operator>(const _Bit_iterator_base& __i) const
+    { return __i < *this; }
+    bool
+    operator<=(const _Bit_iterator_base& __i) const
+    { return !(__i < *this); }
+    bool
+    operator>=(const _Bit_iterator_base& __i) const
+    { return !(*this < __i); }
+  };
+  inline ptrdiff_t
+  operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
+  {
+    return (int(_S_word_bit) * (__x._M_p - __y._M_p)
+     + __x._M_offset - __y._M_offset);
+  }
+  struct _Bit_iterator : public _Bit_iterator_base
+  {
+    typedef _Bit_reference reference;
+    typedef _Bit_reference* pointer;
+    typedef _Bit_iterator iterator;
+    _Bit_iterator() : _Bit_iterator_base(0, 0) { }
+    _Bit_iterator(_Bit_type * __x, unsigned int __y)
+    : _Bit_iterator_base(__x, __y) { }
+    reference
+    operator*() const
+    { return reference(_M_p, 1UL << _M_offset); }
+    iterator&
+    operator++()
+    {
+      _M_bump_up();
+      return *this;
+    }
+    iterator
+    operator++(int)
+    {
+      iterator __tmp = *this;
+      _M_bump_up();
+      return __tmp;
+    }
+    iterator&
+    operator--()
+    {
+      _M_bump_down();
+      return *this;
+    }
+    iterator
+    operator--(int)
+    {
+      iterator __tmp = *this;
+      _M_bump_down();
+      return __tmp;
+    }
+    iterator&
+    operator+=(difference_type __i)
+    {
+      _M_incr(__i);
+      return *this;
+    }
+    iterator&
+    operator-=(difference_type __i)
+    {
+      *this += -__i;
+      return *this;
+    }
+    iterator
+    operator+(difference_type __i) const
+    {
+      iterator __tmp = *this;
+      return __tmp += __i;
+    }
+    iterator
+    operator-(difference_type __i) const
+    {
+      iterator __tmp = *this;
+      return __tmp -= __i;
+    }
+    reference
+    operator[](difference_type __i) const
+    { return *(*this + __i); }
+  };
+  inline _Bit_iterator
+  operator+(ptrdiff_t __n, const _Bit_iterator& __x)
+  { return __x + __n; }
+  struct _Bit_const_iterator : public _Bit_iterator_base
+  {
+    typedef bool reference;
+    typedef bool const_reference;
+    typedef const bool* pointer;
+    typedef _Bit_const_iterator const_iterator;
+    _Bit_const_iterator() : _Bit_iterator_base(0, 0) { }
+    _Bit_const_iterator(_Bit_type * __x, unsigned int __y)
+    : _Bit_iterator_base(__x, __y) { }
+    _Bit_const_iterator(const _Bit_iterator& __x)
+    : _Bit_iterator_base(__x._M_p, __x._M_offset) { }
+    const_reference
+    operator*() const
+    { return _Bit_reference(_M_p, 1UL << _M_offset); }
+    const_iterator&
+    operator++()
+    {
+      _M_bump_up();
+      return *this;
+    }
+    const_iterator
+    operator++(int)
+    {
+      const_iterator __tmp = *this;
+      _M_bump_up();
+      return __tmp;
+    }
+    const_iterator&
+    operator--()
+    {
+      _M_bump_down();
+      return *this;
+    }
+    const_iterator
+    operator--(int)
+    {
+      const_iterator __tmp = *this;
+      _M_bump_down();
+      return __tmp;
+    }
+    const_iterator&
+    operator+=(difference_type __i)
+    {
+      _M_incr(__i);
+      return *this;
+    }
+    const_iterator&
+    operator-=(difference_type __i)
+    {
+      *this += -__i;
+      return *this;
+    }
+    const_iterator
+    operator+(difference_type __i) const
+    {
+      const_iterator __tmp = *this;
+      return __tmp += __i;
+    }
+    const_iterator
+    operator-(difference_type __i) const
+    {
+      const_iterator __tmp = *this;
+      return __tmp -= __i;
+    }
+    const_reference
+    operator[](difference_type __i) const
+    { return *(*this + __i); }
+  };
+  inline _Bit_const_iterator
+  operator+(ptrdiff_t __n, const _Bit_const_iterator& __x)
+  { return __x + __n; }
+  inline void
+  __fill_bvector(_Bit_iterator __first, _Bit_iterator __last, bool __x)
+  {
+    for (; __first != __last; ++__first)
+      *__first = __x;
+  }
+  inline void
+  fill(_Bit_iterator __first, _Bit_iterator __last, const bool& __x)
+  {
+    if (__first._M_p != __last._M_p)
+      {
+ std::fill(__first._M_p + 1, __last._M_p, __x ? ~0 : 0);
+ __fill_bvector(__first, _Bit_iterator(__first._M_p + 1, 0), __x);
+ __fill_bvector(_Bit_iterator(__last._M_p, 0), __last, __x);
+      }
+    else
+      __fill_bvector(__first, __last, __x);
+  }
+  template<typename _Alloc>
+    struct _Bvector_base
+    {
+      typedef typename _Alloc::template rebind<_Bit_type>::other
+        _Bit_alloc_type;
+      struct _Bvector_impl
+      : public _Bit_alloc_type
+      {
+ _Bit_iterator _M_start;
+ _Bit_iterator _M_finish;
+ _Bit_type* _M_end_of_storage;
+ _Bvector_impl()
+ : _Bit_alloc_type(), _M_start(), _M_finish(), _M_end_of_storage(0)
+ { }
+ _Bvector_impl(const _Bit_alloc_type& __a)
+ : _Bit_alloc_type(__a), _M_start(), _M_finish(), _M_end_of_storage(0)
+ { }
+      };
+    public:
+      typedef _Alloc allocator_type;
+      _Bit_alloc_type&
+      _M_get_Bit_allocator()
+      { return *static_cast<_Bit_alloc_type*>(&this->_M_impl); }
+      const _Bit_alloc_type&
+      _M_get_Bit_allocator() const
+      { return *static_cast<const _Bit_alloc_type*>(&this->_M_impl); }
+      allocator_type
+      get_allocator() const
+      { return allocator_type(_M_get_Bit_allocator()); }
+      _Bvector_base()
+      : _M_impl() { }
+      _Bvector_base(const allocator_type& __a)
+      : _M_impl(__a) { }
+      ~_Bvector_base()
+      { this->_M_deallocate(); }
+    protected:
+      _Bvector_impl _M_impl;
+      _Bit_type*
+      _M_allocate(size_t __n)
+      { return _M_impl.allocate((__n + int(_S_word_bit) - 1)
+    / int(_S_word_bit)); }
+      void
+      _M_deallocate()
+      {
+ if (_M_impl._M_start._M_p)
+   _M_impl.deallocate(_M_impl._M_start._M_p,
+        _M_impl._M_end_of_storage - _M_impl._M_start._M_p);
+      }
+    };
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+template<typename _Alloc>
+  class vector<bool, _Alloc> : protected _Bvector_base<_Alloc>
+  {
+    typedef _Bvector_base<_Alloc> _Base;
+  public:
+    typedef bool value_type;
+    typedef size_t size_type;
+    typedef ptrdiff_t difference_type;
+    typedef _Bit_reference reference;
+    typedef bool const_reference;
+    typedef _Bit_reference* pointer;
+    typedef const bool* const_pointer;
+    typedef _Bit_iterator iterator;
+    typedef _Bit_const_iterator const_iterator;
+    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+    typedef std::reverse_iterator<iterator> reverse_iterator;
+    typedef _Alloc allocator_type;
+    allocator_type get_allocator() const
+    { return _Base::get_allocator(); }
+  protected:
+    using _Base::_M_allocate;
+    using _Base::_M_deallocate;
+    using _Base::_M_get_Bit_allocator;
+  public:
+    vector()
+    : _Base() { }
+    explicit
+    vector(const allocator_type& __a)
+    : _Base(__a) { }
+    explicit
+    vector(size_type __n, const bool& __value = bool(),
+    const allocator_type& __a = allocator_type())
+    : _Base(__a)
+    {
+      _M_initialize(__n);
+      std::fill(this->_M_impl._M_start._M_p, this->_M_impl._M_end_of_storage,
+  __value ? ~0 : 0);
+    }
+    vector(const vector& __x)
+    : _Base(__x._M_get_Bit_allocator())
+    {
+      _M_initialize(__x.size());
+      _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start);
+    }
+    template<typename _InputIterator>
+      vector(_InputIterator __first, _InputIterator __last,
+      const allocator_type& __a = allocator_type())
+      : _Base(__a)
+      {
+ typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+ _M_initialize_dispatch(__first, __last, _Integral());
+      }
+    ~vector() { }
+    vector&
+    operator=(const vector& __x)
+    {
+      if (&__x == this)
+ return *this;
+      if (__x.size() > capacity())
+ {
+   this->_M_deallocate();
+   _M_initialize(__x.size());
+ }
+      this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(),
+      begin());
+      return *this;
+    }
+    void
+    assign(size_type __n, const bool& __x)
+    { _M_fill_assign(__n, __x); }
+    template<typename _InputIterator>
+      void
+      assign(_InputIterator __first, _InputIterator __last)
+      {
+ typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+ _M_assign_dispatch(__first, __last, _Integral());
+      }
+    iterator
+    begin()
+    { return this->_M_impl._M_start; }
+    const_iterator
+    begin() const
+    { return this->_M_impl._M_start; }
+    iterator
+    end()
+    { return this->_M_impl._M_finish; }
+    const_iterator
+    end() const
+    { return this->_M_impl._M_finish; }
+    reverse_iterator
+    rbegin()
+    { return reverse_iterator(end()); }
+    const_reverse_iterator
+    rbegin() const
+    { return const_reverse_iterator(end()); }
+    reverse_iterator
+    rend()
+    { return reverse_iterator(begin()); }
+    const_reverse_iterator
+    rend() const
+    { return const_reverse_iterator(begin()); }
+    size_type
+    size() const
+    { return size_type(end() - begin()); }
+    size_type
+    max_size() const
+    {
+      const size_type __isize =
+ __gnu_cxx::__numeric_traits<difference_type>::__max
+ - int(_S_word_bit) + 1;
+      const size_type __asize = _M_get_Bit_allocator().max_size();
+      return (__asize <= __isize / int(_S_word_bit)
+       ? __asize * int(_S_word_bit) : __isize);
+    }
+    size_type
+    capacity() const
+    { return size_type(const_iterator(this->_M_impl._M_end_of_storage, 0)
+         - begin()); }
+    bool
+    empty() const
+    { return begin() == end(); }
+    reference
+    operator[](size_type __n)
+    {
+      return *iterator(this->_M_impl._M_start._M_p
+         + __n / int(_S_word_bit), __n % int(_S_word_bit));
+    }
+    const_reference
+    operator[](size_type __n) const
+    {
+      return *const_iterator(this->_M_impl._M_start._M_p
+        + __n / int(_S_word_bit), __n % int(_S_word_bit));
+    }
+  protected:
+    void
+    _M_range_check(size_type __n) const
+    {
+      if (__n >= this->size())
+        __throw_out_of_range(("vector<bool>::_M_range_check"));
+    }
+  public:
+    reference
+    at(size_type __n)
+    { _M_range_check(__n); return (*this)[__n]; }
+    const_reference
+    at(size_type __n) const
+    { _M_range_check(__n); return (*this)[__n]; }
+    void
+    reserve(size_type __n);
+    reference
+    front()
+    { return *begin(); }
+    const_reference
+    front() const
+    { return *begin(); }
+    reference
+    back()
+    { return *(end() - 1); }
+    const_reference
+    back() const
+    { return *(end() - 1); }
+    void
+    data() { }
+    void
+    push_back(bool __x)
+    {
+      if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_of_storage)
+        *this->_M_impl._M_finish++ = __x;
+      else
+        _M_insert_aux(end(), __x);
+    }
+    void
+    swap(vector& __x)
+    {
+      std::swap(this->_M_impl._M_start, __x._M_impl._M_start);
+      std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish);
+      std::swap(this->_M_impl._M_end_of_storage,
+  __x._M_impl._M_end_of_storage);
+      std::__alloc_swap<typename _Base::_Bit_alloc_type>::
+ _S_do_it(_M_get_Bit_allocator(), __x._M_get_Bit_allocator());
+    }
+    static void
+    swap(reference __x, reference __y)
+    {
+      bool __tmp = __x;
+      __x = __y;
+      __y = __tmp;
+    }
+    iterator
+    insert(iterator __position, const bool& __x = bool())
+    {
+      const difference_type __n = __position - begin();
+      if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_of_storage
+   && __position == end())
+        *this->_M_impl._M_finish++ = __x;
+      else
+        _M_insert_aux(__position, __x);
+      return begin() + __n;
+    }
+    template<typename _InputIterator>
+      void
+      insert(iterator __position,
+      _InputIterator __first, _InputIterator __last)
+      {
+ typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+ _M_insert_dispatch(__position, __first, __last, _Integral());
+      }
+    void
+    insert(iterator __position, size_type __n, const bool& __x)
+    { _M_fill_insert(__position, __n, __x); }
+    void
+    pop_back()
+    { --this->_M_impl._M_finish; }
+    iterator
+    erase(iterator __position)
+    {
+      if (__position + 1 != end())
+        std::copy(__position + 1, end(), __position);
+      --this->_M_impl._M_finish;
+      return __position;
+    }
+    iterator
+    erase(iterator __first, iterator __last)
+    {
+      _M_erase_at_end(std::copy(__last, end(), __first));
+      return __first;
+    }
+    void
+    resize(size_type __new_size, bool __x = bool())
+    {
+      if (__new_size < size())
+        _M_erase_at_end(begin() + difference_type(__new_size));
+      else
+        insert(end(), __new_size - size(), __x);
+    }
+    void
+    flip()
+    {
+      for (_Bit_type * __p = this->_M_impl._M_start._M_p;
+    __p != this->_M_impl._M_end_of_storage; ++__p)
+        *__p = ~*__p;
+    }
+    void
+    clear()
+    { _M_erase_at_end(begin()); }
+  protected:
+    iterator
+    _M_copy_aligned(const_iterator __first, const_iterator __last,
+      iterator __result)
+    {
+      _Bit_type* __q = std::copy(__first._M_p, __last._M_p, __result._M_p);
+      return std::copy(const_iterator(__last._M_p, 0), __last,
+         iterator(__q, 0));
+    }
+    void
+    _M_initialize(size_type __n)
+    {
+      _Bit_type* __q = this->_M_allocate(__n);
+      this->_M_impl._M_end_of_storage = (__q
+      + ((__n + int(_S_word_bit) - 1)
+         / int(_S_word_bit)));
+      this->_M_impl._M_start = iterator(__q, 0);
+      this->_M_impl._M_finish = this->_M_impl._M_start + difference_type(__n);
+    }
+    template<typename _Integer>
+      void
+      _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type)
+      {
+ _M_initialize(static_cast<size_type>(__n));
+ std::fill(this->_M_impl._M_start._M_p,
+    this->_M_impl._M_end_of_storage, __x ? ~0 : 0);
+      }
+    template<typename _InputIterator>
+      void
+      _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
+        __false_type)
+      { _M_initialize_range(__first, __last,
+       std::__iterator_category(__first)); }
+    template<typename _InputIterator>
+      void
+      _M_initialize_range(_InputIterator __first, _InputIterator __last,
+     std::input_iterator_tag)
+      {
+ for (; __first != __last; ++__first)
+   push_back(*__first);
+      }
+    template<typename _ForwardIterator>
+      void
+      _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last,
+     std::forward_iterator_tag)
+      {
+ const size_type __n = std::distance(__first, __last);
+ _M_initialize(__n);
+ std::copy(__first, __last, this->_M_impl._M_start);
+      }
+    template<typename _Integer>
+      void
+      _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
+      { _M_fill_assign(__n, __val); }
+    template<class _InputIterator>
+      void
+      _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
+    __false_type)
+      { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
+    void
+    _M_fill_assign(size_t __n, bool __x)
+    {
+      if (__n > size())
+ {
+   std::fill(this->_M_impl._M_start._M_p,
+      this->_M_impl._M_end_of_storage, __x ? ~0 : 0);
+   insert(end(), __n - size(), __x);
+ }
+      else
+ {
+   _M_erase_at_end(begin() + __n);
+   std::fill(this->_M_impl._M_start._M_p,
+      this->_M_impl._M_end_of_storage, __x ? ~0 : 0);
+ }
+    }
+    template<typename _InputIterator>
+      void
+      _M_assign_aux(_InputIterator __first, _InputIterator __last,
+      std::input_iterator_tag)
+      {
+ iterator __cur = begin();
+ for (; __first != __last && __cur != end(); ++__cur, ++__first)
+   *__cur = *__first;
+ if (__first == __last)
+   _M_erase_at_end(__cur);
+ else
+   insert(end(), __first, __last);
+      }
+    template<typename _ForwardIterator>
+      void
+      _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
+      std::forward_iterator_tag)
+      {
+ const size_type __len = std::distance(__first, __last);
+ if (__len < size())
+   _M_erase_at_end(std::copy(__first, __last, begin()));
+ else
+   {
+     _ForwardIterator __mid = __first;
+     std::advance(__mid, size());
+     std::copy(__first, __mid, begin());
+     insert(end(), __mid, __last);
+   }
+      }
+    template<typename _Integer>
+      void
+      _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,
+    __true_type)
+      { _M_fill_insert(__pos, __n, __x); }
+    template<typename _InputIterator>
+      void
+      _M_insert_dispatch(iterator __pos,
+    _InputIterator __first, _InputIterator __last,
+    __false_type)
+      { _M_insert_range(__pos, __first, __last,
+   std::__iterator_category(__first)); }
+    void
+    _M_fill_insert(iterator __position, size_type __n, bool __x);
+    template<typename _InputIterator>
+      void
+      _M_insert_range(iterator __pos, _InputIterator __first,
+        _InputIterator __last, std::input_iterator_tag)
+      {
+ for (; __first != __last; ++__first)
+   {
+     __pos = insert(__pos, *__first);
+     ++__pos;
+   }
+      }
+    template<typename _ForwardIterator>
+      void
+      _M_insert_range(iterator __position, _ForwardIterator __first,
+        _ForwardIterator __last, std::forward_iterator_tag);
+    void
+    _M_insert_aux(iterator __position, bool __x);
+    size_type
+    _M_check_len(size_type __n, const char* __s) const
+    {
+      if (max_size() - size() < __n)
+ __throw_length_error((__s));
+      const size_type __len = size() + std::max(size(), __n);
+      return (__len < size() || __len > max_size()) ? max_size() : __len;
+    }
+    void
+    _M_erase_at_end(iterator __pos)
+    { this->_M_impl._M_finish = __pos; }
+  };
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Tp, typename _Alloc>
+    void
+    vector<_Tp, _Alloc>::
+    reserve(size_type __n)
+    {
+      if (__n > this->max_size())
+ __throw_length_error(("vector::reserve"));
+      if (this->capacity() < __n)
+ {
+   const size_type __old_size = size();
+   pointer __tmp = _M_allocate_and_copy(__n,
+   (this->_M_impl._M_start),
+   (this->_M_impl._M_finish));
+   std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+   _M_get_Tp_allocator());
+   _M_deallocate(this->_M_impl._M_start,
+   this->_M_impl._M_end_of_storage
+   - this->_M_impl._M_start);
+   this->_M_impl._M_start = __tmp;
+   this->_M_impl._M_finish = __tmp + __old_size;
+   this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+ }
+    }
+  template<typename _Tp, typename _Alloc>
+    typename vector<_Tp, _Alloc>::iterator
+    vector<_Tp, _Alloc>::
+    insert(iterator __position, const value_type& __x)
+    {
+      const size_type __n = __position - begin();
+      if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage
+   && __position == end())
+ {
+   this->_M_impl.construct(this->_M_impl._M_finish, __x);
+   ++this->_M_impl._M_finish;
+ }
+      else
+ {
+     _M_insert_aux(__position, __x);
+ }
+      return iterator(this->_M_impl._M_start + __n);
+    }
+  template<typename _Tp, typename _Alloc>
+    typename vector<_Tp, _Alloc>::iterator
+    vector<_Tp, _Alloc>::
+    erase(iterator __position)
+    {
+      if (__position + 1 != end())
+ std::copy(__position + 1, end(), __position);
+      --this->_M_impl._M_finish;
+      this->_M_impl.destroy(this->_M_impl._M_finish);
+      return __position;
+    }
+  template<typename _Tp, typename _Alloc>
+    typename vector<_Tp, _Alloc>::iterator
+    vector<_Tp, _Alloc>::
+    erase(iterator __first, iterator __last)
+    {
+      if (__last != end())
+ std::copy(__last, end(), __first);
+      _M_erase_at_end(__first.base() + (end() - __last));
+      return __first;
+    }
+  template<typename _Tp, typename _Alloc>
+    vector<_Tp, _Alloc>&
+    vector<_Tp, _Alloc>::
+    operator=(const vector<_Tp, _Alloc>& __x)
+    {
+      if (&__x != this)
+ {
+   const size_type __xlen = __x.size();
+   if (__xlen > capacity())
+     {
+       pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(),
+         __x.end());
+       std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+       _M_get_Tp_allocator());
+       _M_deallocate(this->_M_impl._M_start,
+       this->_M_impl._M_end_of_storage
+       - this->_M_impl._M_start);
+       this->_M_impl._M_start = __tmp;
+       this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen;
+     }
+   else if (size() >= __xlen)
+     {
+       std::_Destroy(std::copy(__x.begin(), __x.end(), begin()),
+       end(), _M_get_Tp_allocator());
+     }
+   else
+     {
+       std::copy(__x._M_impl._M_start, __x._M_impl._M_start + size(),
+   this->_M_impl._M_start);
+       std::__uninitialized_copy_a(__x._M_impl._M_start + size(),
+       __x._M_impl._M_finish,
+       this->_M_impl._M_finish,
+       _M_get_Tp_allocator());
+     }
+   this->_M_impl._M_finish = this->_M_impl._M_start + __xlen;
+ }
+      return *this;
+    }
+  template<typename _Tp, typename _Alloc>
+    void
+    vector<_Tp, _Alloc>::
+    _M_fill_assign(size_t __n, const value_type& __val)
+    {
+      if (__n > capacity())
+ {
+   vector __tmp(__n, __val, _M_get_Tp_allocator());
+   __tmp.swap(*this);
+ }
+      else if (__n > size())
+ {
+   std::fill(begin(), end(), __val);
+   std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
+     __n - size(), __val,
+     _M_get_Tp_allocator());
+   this->_M_impl._M_finish += __n - size();
+ }
+      else
+        _M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val));
+    }
+  template<typename _Tp, typename _Alloc>
+    template<typename _InputIterator>
+      void
+      vector<_Tp, _Alloc>::
+      _M_assign_aux(_InputIterator __first, _InputIterator __last,
+      std::input_iterator_tag)
+      {
+ pointer __cur(this->_M_impl._M_start);
+ for (; __first != __last && __cur != this->_M_impl._M_finish;
+      ++__cur, ++__first)
+   *__cur = *__first;
+ if (__first == __last)
+   _M_erase_at_end(__cur);
+ else
+   insert(end(), __first, __last);
+      }
+  template<typename _Tp, typename _Alloc>
+    template<typename _ForwardIterator>
+      void
+      vector<_Tp, _Alloc>::
+      _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
+      std::forward_iterator_tag)
+      {
+ const size_type __len = std::distance(__first, __last);
+ if (__len > capacity())
+   {
+     pointer __tmp(_M_allocate_and_copy(__len, __first, __last));
+     std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+     _M_get_Tp_allocator());
+     _M_deallocate(this->_M_impl._M_start,
+     this->_M_impl._M_end_of_storage
+     - this->_M_impl._M_start);
+     this->_M_impl._M_start = __tmp;
+     this->_M_impl._M_finish = this->_M_impl._M_start + __len;
+     this->_M_impl._M_end_of_storage = this->_M_impl._M_finish;
+   }
+ else if (size() >= __len)
+   _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start));
+ else
+   {
+     _ForwardIterator __mid = __first;
+     std::advance(__mid, size());
+     std::copy(__first, __mid, this->_M_impl._M_start);
+     this->_M_impl._M_finish =
+       std::__uninitialized_copy_a(__mid, __last,
+       this->_M_impl._M_finish,
+       _M_get_Tp_allocator());
+   }
+      }
+  template<typename _Tp, typename _Alloc>
+    void
+    vector<_Tp, _Alloc>::
+    _M_insert_aux(iterator __position, const _Tp& __x)
+    {
+      if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+ {
+   this->_M_impl.construct(this->_M_impl._M_finish,
+      (*(this->_M_impl._M_finish - 1)));
+   ++this->_M_impl._M_finish;
+   _Tp __x_copy = __x;
+   std::copy_backward(__position.base(), this->_M_impl._M_finish - 2, this->_M_impl._M_finish - 1);
+   *__position = __x_copy;
+ }
+      else
+ {
+   const size_type __len =
+     _M_check_len(size_type(1), "vector::_M_insert_aux");
+   const size_type __elems_before = __position - begin();
+   pointer __new_start(this->_M_allocate(__len));
+   pointer __new_finish(__new_start);
+   try
+     {
+       this->_M_impl.construct(__new_start + __elems_before,
+                               __x);
+       __new_finish = 0;
+       __new_finish =
+  std::__uninitialized_move_a(this->_M_impl._M_start,
+         __position.base(), __new_start,
+         _M_get_Tp_allocator());
+       ++__new_finish;
+       __new_finish =
+  std::__uninitialized_move_a(__position.base(),
+         this->_M_impl._M_finish,
+         __new_finish,
+         _M_get_Tp_allocator());
+     }
+          catch(...)
+     {
+       if (!__new_finish)
+  this->_M_impl.destroy(__new_start + __elems_before);
+       else
+  std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator());
+       _M_deallocate(__new_start, __len);
+       throw;
+     }
+   std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+   _M_get_Tp_allocator());
+   _M_deallocate(this->_M_impl._M_start,
+   this->_M_impl._M_end_of_storage
+   - this->_M_impl._M_start);
+   this->_M_impl._M_start = __new_start;
+   this->_M_impl._M_finish = __new_finish;
+   this->_M_impl._M_end_of_storage = __new_start + __len;
+ }
+    }
+  template<typename _Tp, typename _Alloc>
+    void
+    vector<_Tp, _Alloc>::
+    _M_fill_insert(iterator __position, size_type __n, const value_type& __x)
+    {
+      if (__n != 0)
+ {
+   if (size_type(this->_M_impl._M_end_of_storage
+   - this->_M_impl._M_finish) >= __n)
+     {
+       value_type __x_copy = __x;
+       const size_type __elems_after = end() - __position;
+       pointer __old_finish(this->_M_impl._M_finish);
+       if (__elems_after > __n)
+  {
+    std::__uninitialized_move_a(this->_M_impl._M_finish - __n,
+           this->_M_impl._M_finish,
+           this->_M_impl._M_finish,
+           _M_get_Tp_allocator());
+    this->_M_impl._M_finish += __n;
+    std::copy_backward(__position.base(), __old_finish - __n, __old_finish);
+    std::fill(__position.base(), __position.base() + __n,
+       __x_copy);
+  }
+       else
+  {
+    std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
+      __n - __elems_after,
+      __x_copy,
+      _M_get_Tp_allocator());
+    this->_M_impl._M_finish += __n - __elems_after;
+    std::__uninitialized_move_a(__position.base(), __old_finish,
+           this->_M_impl._M_finish,
+           _M_get_Tp_allocator());
+    this->_M_impl._M_finish += __elems_after;
+    std::fill(__position.base(), __old_finish, __x_copy);
+  }
+     }
+   else
+     {
+       const size_type __len =
+  _M_check_len(__n, "vector::_M_fill_insert");
+       const size_type __elems_before = __position - begin();
+       pointer __new_start(this->_M_allocate(__len));
+       pointer __new_finish(__new_start);
+       try
+  {
+    std::__uninitialized_fill_n_a(__new_start + __elems_before,
+      __n, __x,
+      _M_get_Tp_allocator());
+    __new_finish = 0;
+    __new_finish =
+      std::__uninitialized_move_a(this->_M_impl._M_start,
+      __position.base(),
+      __new_start,
+      _M_get_Tp_allocator());
+    __new_finish += __n;
+    __new_finish =
+      std::__uninitialized_move_a(__position.base(),
+      this->_M_impl._M_finish,
+      __new_finish,
+      _M_get_Tp_allocator());
+  }
+       catch(...)
+  {
+    if (!__new_finish)
+      std::_Destroy(__new_start + __elems_before,
+      __new_start + __elems_before + __n,
+      _M_get_Tp_allocator());
+    else
+      std::_Destroy(__new_start, __new_finish,
+      _M_get_Tp_allocator());
+    _M_deallocate(__new_start, __len);
+    throw;
+  }
+       std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+       _M_get_Tp_allocator());
+       _M_deallocate(this->_M_impl._M_start,
+       this->_M_impl._M_end_of_storage
+       - this->_M_impl._M_start);
+       this->_M_impl._M_start = __new_start;
+       this->_M_impl._M_finish = __new_finish;
+       this->_M_impl._M_end_of_storage = __new_start + __len;
+     }
+ }
+    }
+  template<typename _Tp, typename _Alloc>
+    template<typename _InputIterator>
+      void
+      vector<_Tp, _Alloc>::
+      _M_range_insert(iterator __pos, _InputIterator __first,
+        _InputIterator __last, std::input_iterator_tag)
+      {
+ for (; __first != __last; ++__first)
+   {
+     __pos = insert(__pos, *__first);
+     ++__pos;
+   }
+      }
+  template<typename _Tp, typename _Alloc>
+    template<typename _ForwardIterator>
+      void
+      vector<_Tp, _Alloc>::
+      _M_range_insert(iterator __position, _ForwardIterator __first,
+        _ForwardIterator __last, std::forward_iterator_tag)
+      {
+ if (__first != __last)
+   {
+     const size_type __n = std::distance(__first, __last);
+     if (size_type(this->_M_impl._M_end_of_storage
+     - this->_M_impl._M_finish) >= __n)
+       {
+  const size_type __elems_after = end() - __position;
+  pointer __old_finish(this->_M_impl._M_finish);
+  if (__elems_after > __n)
+    {
+      std::__uninitialized_move_a(this->_M_impl._M_finish - __n,
+      this->_M_impl._M_finish,
+      this->_M_impl._M_finish,
+      _M_get_Tp_allocator());
+      this->_M_impl._M_finish += __n;
+      std::copy_backward(__position.base(), __old_finish - __n, __old_finish);
+      std::copy(__first, __last, __position);
+    }
+  else
+    {
+      _ForwardIterator __mid = __first;
+      std::advance(__mid, __elems_after);
+      std::__uninitialized_copy_a(__mid, __last,
+      this->_M_impl._M_finish,
+      _M_get_Tp_allocator());
+      this->_M_impl._M_finish += __n - __elems_after;
+      std::__uninitialized_move_a(__position.base(),
+      __old_finish,
+      this->_M_impl._M_finish,
+      _M_get_Tp_allocator());
+      this->_M_impl._M_finish += __elems_after;
+      std::copy(__first, __mid, __position);
+    }
+       }
+     else
+       {
+  const size_type __len =
+    _M_check_len(__n, "vector::_M_range_insert");
+  pointer __new_start(this->_M_allocate(__len));
+  pointer __new_finish(__new_start);
+  try
+    {
+      __new_finish =
+        std::__uninitialized_move_a(this->_M_impl._M_start,
+        __position.base(),
+        __new_start,
+        _M_get_Tp_allocator());
+      __new_finish =
+        std::__uninitialized_copy_a(__first, __last,
+        __new_finish,
+        _M_get_Tp_allocator());
+      __new_finish =
+        std::__uninitialized_move_a(__position.base(),
+        this->_M_impl._M_finish,
+        __new_finish,
+        _M_get_Tp_allocator());
+    }
+  catch(...)
+    {
+      std::_Destroy(__new_start, __new_finish,
+      _M_get_Tp_allocator());
+      _M_deallocate(__new_start, __len);
+      throw;
+    }
+  std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+         _M_get_Tp_allocator());
+  _M_deallocate(this->_M_impl._M_start,
+         this->_M_impl._M_end_of_storage
+         - this->_M_impl._M_start);
+  this->_M_impl._M_start = __new_start;
+  this->_M_impl._M_finish = __new_finish;
+  this->_M_impl._M_end_of_storage = __new_start + __len;
+       }
+   }
+      }
+  template<typename _Alloc>
+    void
+    vector<bool, _Alloc>::
+    reserve(size_type __n)
+    {
+      if (__n > this->max_size())
+ __throw_length_error(("vector::reserve"));
+      if (this->capacity() < __n)
+ {
+   _Bit_type* __q = this->_M_allocate(__n);
+   this->_M_impl._M_finish = _M_copy_aligned(begin(), end(),
+          iterator(__q, 0));
+   this->_M_deallocate();
+   this->_M_impl._M_start = iterator(__q, 0);
+   this->_M_impl._M_end_of_storage = (__q + (__n + int(_S_word_bit) - 1)
+          / int(_S_word_bit));
+ }
+    }
+  template<typename _Alloc>
+    void
+    vector<bool, _Alloc>::
+    _M_fill_insert(iterator __position, size_type __n, bool __x)
+    {
+      if (__n == 0)
+ return;
+      if (capacity() - size() >= __n)
+ {
+   std::copy_backward(__position, end(),
+        this->_M_impl._M_finish + difference_type(__n));
+   std::fill(__position, __position + difference_type(__n), __x);
+   this->_M_impl._M_finish += difference_type(__n);
+ }
+      else
+ {
+   const size_type __len =
+     _M_check_len(__n, "vector<bool>::_M_fill_insert");
+   _Bit_type * __q = this->_M_allocate(__len);
+   iterator __i = _M_copy_aligned(begin(), __position,
+      iterator(__q, 0));
+   std::fill(__i, __i + difference_type(__n), __x);
+   this->_M_impl._M_finish = std::copy(__position, end(),
+           __i + difference_type(__n));
+   this->_M_deallocate();
+   this->_M_impl._M_end_of_storage = (__q + ((__len
+           + int(_S_word_bit) - 1)
+          / int(_S_word_bit)));
+   this->_M_impl._M_start = iterator(__q, 0);
+ }
+    }
+  template<typename _Alloc>
+    template<typename _ForwardIterator>
+      void
+      vector<bool, _Alloc>::
+      _M_insert_range(iterator __position, _ForwardIterator __first,
+        _ForwardIterator __last, std::forward_iterator_tag)
+      {
+ if (__first != __last)
+   {
+     size_type __n = std::distance(__first, __last);
+     if (capacity() - size() >= __n)
+       {
+  std::copy_backward(__position, end(),
+       this->_M_impl._M_finish
+       + difference_type(__n));
+  std::copy(__first, __last, __position);
+  this->_M_impl._M_finish += difference_type(__n);
+       }
+     else
+       {
+  const size_type __len =
+    _M_check_len(__n, "vector<bool>::_M_insert_range");
+  _Bit_type * __q = this->_M_allocate(__len);
+  iterator __i = _M_copy_aligned(begin(), __position,
+            iterator(__q, 0));
+  __i = std::copy(__first, __last, __i);
+  this->_M_impl._M_finish = std::copy(__position, end(), __i);
+  this->_M_deallocate();
+  this->_M_impl._M_end_of_storage = (__q
+         + ((__len
+             + int(_S_word_bit) - 1)
+            / int(_S_word_bit)));
+  this->_M_impl._M_start = iterator(__q, 0);
+       }
+   }
+      }
+  template<typename _Alloc>
+    void
+    vector<bool, _Alloc>::
+    _M_insert_aux(iterator __position, bool __x)
+    {
+      if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_of_storage)
+ {
+   std::copy_backward(__position, this->_M_impl._M_finish,
+        this->_M_impl._M_finish + 1);
+   *__position = __x;
+   ++this->_M_impl._M_finish;
+ }
+      else
+ {
+   const size_type __len =
+     _M_check_len(size_type(1), "vector<bool>::_M_insert_aux");
+   _Bit_type * __q = this->_M_allocate(__len);
+   iterator __i = _M_copy_aligned(begin(), __position,
+      iterator(__q, 0));
+   *__i++ = __x;
+   this->_M_impl._M_finish = std::copy(__position, end(), __i);
+   this->_M_deallocate();
+   this->_M_impl._M_end_of_storage = (__q + ((__len
+           + int(_S_word_bit) - 1)
+          / int(_S_word_bit)));
+   this->_M_impl._M_start = iterator(__q, 0);
+ }
+    }
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  enum _Rb_tree_color { _S_red = false, _S_black = true };
+  struct _Rb_tree_node_base
+  {
+    typedef _Rb_tree_node_base* _Base_ptr;
+    typedef const _Rb_tree_node_base* _Const_Base_ptr;
+    _Rb_tree_color _M_color;
+    _Base_ptr _M_parent;
+    _Base_ptr _M_left;
+    _Base_ptr _M_right;
+    static _Base_ptr
+    _S_minimum(_Base_ptr __x)
+    {
+      while (__x->_M_left != 0) __x = __x->_M_left;
+      return __x;
+    }
+    static _Const_Base_ptr
+    _S_minimum(_Const_Base_ptr __x)
+    {
+      while (__x->_M_left != 0) __x = __x->_M_left;
+      return __x;
+    }
+    static _Base_ptr
+    _S_maximum(_Base_ptr __x)
+    {
+      while (__x->_M_right != 0) __x = __x->_M_right;
+      return __x;
+    }
+    static _Const_Base_ptr
+    _S_maximum(_Const_Base_ptr __x)
+    {
+      while (__x->_M_right != 0) __x = __x->_M_right;
+      return __x;
+    }
+  };
+  template<typename _Val>
+    struct _Rb_tree_node : public _Rb_tree_node_base
+    {
+      typedef _Rb_tree_node<_Val>* _Link_type;
+      _Val _M_value_field;
+    };
+  _Rb_tree_node_base*
+  _Rb_tree_increment(_Rb_tree_node_base* __x);
+  const _Rb_tree_node_base*
+  _Rb_tree_increment(const _Rb_tree_node_base* __x);
+  _Rb_tree_node_base*
+  _Rb_tree_decrement(_Rb_tree_node_base* __x);
+  const _Rb_tree_node_base*
+  _Rb_tree_decrement(const _Rb_tree_node_base* __x);
+  template<typename _Tp>
+    struct _Rb_tree_iterator
+    {
+      typedef _Tp value_type;
+      typedef _Tp& reference;
+      typedef _Tp* pointer;
+      typedef bidirectional_iterator_tag iterator_category;
+      typedef ptrdiff_t difference_type;
+      typedef _Rb_tree_iterator<_Tp> _Self;
+      typedef _Rb_tree_node_base::_Base_ptr _Base_ptr;
+      typedef _Rb_tree_node<_Tp>* _Link_type;
+      _Rb_tree_iterator()
+      : _M_node() { }
+      explicit
+      _Rb_tree_iterator(_Link_type __x)
+      : _M_node(__x) { }
+      reference
+      operator*() const
+      { return static_cast<_Link_type>(_M_node)->_M_value_field; }
+      pointer
+      operator->() const
+      { return &static_cast<_Link_type>(_M_node)->_M_value_field; }
+      _Self&
+      operator++()
+      {
+ _M_node = _Rb_tree_increment(_M_node);
+ return *this;
+      }
+      _Self
+      operator++(int)
+      {
+ _Self __tmp = *this;
+ _M_node = _Rb_tree_increment(_M_node);
+ return __tmp;
+      }
+      _Self&
+      operator--()
+      {
+ _M_node = _Rb_tree_decrement(_M_node);
+ return *this;
+      }
+      _Self
+      operator--(int)
+      {
+ _Self __tmp = *this;
+ _M_node = _Rb_tree_decrement(_M_node);
+ return __tmp;
+      }
+      bool
+      operator==(const _Self& __x) const
+      { return _M_node == __x._M_node; }
+      bool
+      operator!=(const _Self& __x) const
+      { return _M_node != __x._M_node; }
+      _Base_ptr _M_node;
+  };
+  template<typename _Tp>
+    struct _Rb_tree_const_iterator
+    {
+      typedef _Tp value_type;
+      typedef const _Tp& reference;
+      typedef const _Tp* pointer;
+      typedef _Rb_tree_iterator<_Tp> iterator;
+      typedef bidirectional_iterator_tag iterator_category;
+      typedef ptrdiff_t difference_type;
+      typedef _Rb_tree_const_iterator<_Tp> _Self;
+      typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr;
+      typedef const _Rb_tree_node<_Tp>* _Link_type;
+      _Rb_tree_const_iterator()
+      : _M_node() { }
+      explicit
+      _Rb_tree_const_iterator(_Link_type __x)
+      : _M_node(__x) { }
+      _Rb_tree_const_iterator(const iterator& __it)
+      : _M_node(__it._M_node) { }
+      reference
+      operator*() const
+      { return static_cast<_Link_type>(_M_node)->_M_value_field; }
+      pointer
+      operator->() const
+      { return &static_cast<_Link_type>(_M_node)->_M_value_field; }
+      _Self&
+      operator++()
+      {
+ _M_node = _Rb_tree_increment(_M_node);
+ return *this;
+      }
+      _Self
+      operator++(int)
+      {
+ _Self __tmp = *this;
+ _M_node = _Rb_tree_increment(_M_node);
+ return __tmp;
+      }
+      _Self&
+      operator--()
+      {
+ _M_node = _Rb_tree_decrement(_M_node);
+ return *this;
+      }
+      _Self
+      operator--(int)
+      {
+ _Self __tmp = *this;
+ _M_node = _Rb_tree_decrement(_M_node);
+ return __tmp;
+      }
+      bool
+      operator==(const _Self& __x) const
+      { return _M_node == __x._M_node; }
+      bool
+      operator!=(const _Self& __x) const
+      { return _M_node != __x._M_node; }
+      _Base_ptr _M_node;
+    };
+  template<typename _Val>
+    inline bool
+    operator==(const _Rb_tree_iterator<_Val>& __x,
+               const _Rb_tree_const_iterator<_Val>& __y)
+    { return __x._M_node == __y._M_node; }
+  template<typename _Val>
+    inline bool
+    operator!=(const _Rb_tree_iterator<_Val>& __x,
+               const _Rb_tree_const_iterator<_Val>& __y)
+    { return __x._M_node != __y._M_node; }
+  void
+  _Rb_tree_insert_and_rebalance(const bool __insert_left,
+                                _Rb_tree_node_base* __x,
+                                _Rb_tree_node_base* __p,
+                                _Rb_tree_node_base& __header);
+  _Rb_tree_node_base*
+  _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z,
+          _Rb_tree_node_base& __header);
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc = allocator<_Val> >
+    class _Rb_tree
+    {
+      typedef typename _Alloc::template rebind<_Rb_tree_node<_Val> >::other
+              _Node_allocator;
+    protected:
+      typedef _Rb_tree_node_base* _Base_ptr;
+      typedef const _Rb_tree_node_base* _Const_Base_ptr;
+    public:
+      typedef _Key key_type;
+      typedef _Val value_type;
+      typedef value_type* pointer;
+      typedef const value_type* const_pointer;
+      typedef value_type& reference;
+      typedef const value_type& const_reference;
+      typedef _Rb_tree_node<_Val>* _Link_type;
+      typedef const _Rb_tree_node<_Val>* _Const_Link_type;
+      typedef size_t size_type;
+      typedef ptrdiff_t difference_type;
+      typedef _Alloc allocator_type;
+      _Node_allocator&
+      _M_get_Node_allocator()
+      { return *static_cast<_Node_allocator*>(&this->_M_impl); }
+      const _Node_allocator&
+      _M_get_Node_allocator() const
+      { return *static_cast<const _Node_allocator*>(&this->_M_impl); }
+      allocator_type
+      get_allocator() const
+      { return allocator_type(_M_get_Node_allocator()); }
+    protected:
+      _Link_type
+      _M_get_node()
+      { return _M_impl._Node_allocator::allocate(1); }
+      void
+      _M_put_node(_Link_type __p)
+      { _M_impl._Node_allocator::deallocate(__p, 1); }
+      _Link_type
+      _M_create_node(const value_type& __x)
+      {
+ _Link_type __tmp = _M_get_node();
+ try
+   { get_allocator().construct(&__tmp->_M_value_field, __x); }
+ catch(...)
+   {
+     _M_put_node(__tmp);
+     throw;
+   }
+ return __tmp;
+      }
+      void
+      _M_destroy_node(_Link_type __p)
+      {
+ get_allocator().destroy(&__p->_M_value_field);
+ _M_put_node(__p);
+      }
+      _Link_type
+      _M_clone_node(_Const_Link_type __x)
+      {
+ _Link_type __tmp = _M_create_node(__x->_M_value_field);
+ __tmp->_M_color = __x->_M_color;
+ __tmp->_M_left = 0;
+ __tmp->_M_right = 0;
+ return __tmp;
+      }
+    protected:
+      template<typename _Key_compare,
+        bool _Is_pod_comparator = __is_pod(_Key_compare)>
+        struct _Rb_tree_impl : public _Node_allocator
+        {
+   _Key_compare _M_key_compare;
+   _Rb_tree_node_base _M_header;
+   size_type _M_node_count;
+   _Rb_tree_impl()
+   : _Node_allocator(), _M_key_compare(), _M_header(),
+     _M_node_count(0)
+   { _M_initialize(); }
+   _Rb_tree_impl(const _Key_compare& __comp, const _Node_allocator& __a)
+   : _Node_allocator(__a), _M_key_compare(__comp), _M_header(),
+     _M_node_count(0)
+   { _M_initialize(); }
+ private:
+   void
+   _M_initialize()
+   {
+     this->_M_header._M_color = _S_red;
+     this->_M_header._M_parent = 0;
+     this->_M_header._M_left = &this->_M_header;
+     this->_M_header._M_right = &this->_M_header;
+   }
+ };
+      _Rb_tree_impl<_Compare> _M_impl;
+    protected:
+      _Base_ptr&
+      _M_root()
+      { return this->_M_impl._M_header._M_parent; }
+      _Const_Base_ptr
+      _M_root() const
+      { return this->_M_impl._M_header._M_parent; }
+      _Base_ptr&
+      _M_leftmost()
+      { return this->_M_impl._M_header._M_left; }
+      _Const_Base_ptr
+      _M_leftmost() const
+      { return this->_M_impl._M_header._M_left; }
+      _Base_ptr&
+      _M_rightmost()
+      { return this->_M_impl._M_header._M_right; }
+      _Const_Base_ptr
+      _M_rightmost() const
+      { return this->_M_impl._M_header._M_right; }
+      _Link_type
+      _M_begin()
+      { return static_cast<_Link_type>(this->_M_impl._M_header._M_parent); }
+      _Const_Link_type
+      _M_begin() const
+      {
+ return static_cast<_Const_Link_type>
+   (this->_M_impl._M_header._M_parent);
+      }
+      _Link_type
+      _M_end()
+      { return static_cast<_Link_type>(&this->_M_impl._M_header); }
+      _Const_Link_type
+      _M_end() const
+      { return static_cast<_Const_Link_type>(&this->_M_impl._M_header); }
+      static const_reference
+      _S_value(_Const_Link_type __x)
+      { return __x->_M_value_field; }
+      static const _Key&
+      _S_key(_Const_Link_type __x)
+      { return _KeyOfValue()(_S_value(__x)); }
+      static _Link_type
+      _S_left(_Base_ptr __x)
+      { return static_cast<_Link_type>(__x->_M_left); }
+      static _Const_Link_type
+      _S_left(_Const_Base_ptr __x)
+      { return static_cast<_Const_Link_type>(__x->_M_left); }
+      static _Link_type
+      _S_right(_Base_ptr __x)
+      { return static_cast<_Link_type>(__x->_M_right); }
+      static _Const_Link_type
+      _S_right(_Const_Base_ptr __x)
+      { return static_cast<_Const_Link_type>(__x->_M_right); }
+      static const_reference
+      _S_value(_Const_Base_ptr __x)
+      { return static_cast<_Const_Link_type>(__x)->_M_value_field; }
+      static const _Key&
+      _S_key(_Const_Base_ptr __x)
+      { return _KeyOfValue()(_S_value(__x)); }
+      static _Base_ptr
+      _S_minimum(_Base_ptr __x)
+      { return _Rb_tree_node_base::_S_minimum(__x); }
+      static _Const_Base_ptr
+      _S_minimum(_Const_Base_ptr __x)
+      { return _Rb_tree_node_base::_S_minimum(__x); }
+      static _Base_ptr
+      _S_maximum(_Base_ptr __x)
+      { return _Rb_tree_node_base::_S_maximum(__x); }
+      static _Const_Base_ptr
+      _S_maximum(_Const_Base_ptr __x)
+      { return _Rb_tree_node_base::_S_maximum(__x); }
+    public:
+      typedef _Rb_tree_iterator<value_type> iterator;
+      typedef _Rb_tree_const_iterator<value_type> const_iterator;
+      typedef std::reverse_iterator<iterator> reverse_iterator;
+      typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+    private:
+      iterator
+      _M_insert_(_Const_Base_ptr __x, _Const_Base_ptr __y,
+   const value_type& __v);
+      iterator
+      _M_insert_lower(_Base_ptr __x, _Base_ptr __y, const value_type& __v);
+      iterator
+      _M_insert_equal_lower(const value_type& __x);
+      _Link_type
+      _M_copy(_Const_Link_type __x, _Link_type __p);
+      void
+      _M_erase(_Link_type __x);
+      iterator
+      _M_lower_bound(_Link_type __x, _Link_type __y,
+       const _Key& __k);
+      const_iterator
+      _M_lower_bound(_Const_Link_type __x, _Const_Link_type __y,
+       const _Key& __k) const;
+      iterator
+      _M_upper_bound(_Link_type __x, _Link_type __y,
+       const _Key& __k);
+      const_iterator
+      _M_upper_bound(_Const_Link_type __x, _Const_Link_type __y,
+       const _Key& __k) const;
+    public:
+      _Rb_tree() { }
+      _Rb_tree(const _Compare& __comp,
+        const allocator_type& __a = allocator_type())
+      : _M_impl(__comp, __a) { }
+      _Rb_tree(const _Rb_tree& __x)
+      : _M_impl(__x._M_impl._M_key_compare, __x._M_get_Node_allocator())
+      {
+ if (__x._M_root() != 0)
+   {
+     _M_root() = _M_copy(__x._M_begin(), _M_end());
+     _M_leftmost() = _S_minimum(_M_root());
+     _M_rightmost() = _S_maximum(_M_root());
+     _M_impl._M_node_count = __x._M_impl._M_node_count;
+   }
+      }
+      ~_Rb_tree()
+      { _M_erase(_M_begin()); }
+      _Rb_tree&
+      operator=(const _Rb_tree& __x);
+      _Compare
+      key_comp() const
+      { return _M_impl._M_key_compare; }
+      iterator
+      begin()
+      {
+ return iterator(static_cast<_Link_type>
+   (this->_M_impl._M_header._M_left));
+      }
+      const_iterator
+      begin() const
+      {
+ return const_iterator(static_cast<_Const_Link_type>
+         (this->_M_impl._M_header._M_left));
+      }
+      iterator
+      end()
+      { return iterator(static_cast<_Link_type>(&this->_M_impl._M_header)); }
+      const_iterator
+      end() const
+      {
+ return const_iterator(static_cast<_Const_Link_type>
+         (&this->_M_impl._M_header));
+      }
+      reverse_iterator
+      rbegin()
+      { return reverse_iterator(end()); }
+      const_reverse_iterator
+      rbegin() const
+      { return const_reverse_iterator(end()); }
+      reverse_iterator
+      rend()
+      { return reverse_iterator(begin()); }
+      const_reverse_iterator
+      rend() const
+      { return const_reverse_iterator(begin()); }
+      bool
+      empty() const
+      { return _M_impl._M_node_count == 0; }
+      size_type
+      size() const
+      { return _M_impl._M_node_count; }
+      size_type
+      max_size() const
+      { return _M_get_Node_allocator().max_size(); }
+      void
+      swap(_Rb_tree& __t);
+      pair<iterator, bool>
+      _M_insert_unique(const value_type& __x);
+      iterator
+      _M_insert_equal(const value_type& __x);
+      iterator
+      _M_insert_unique_(const_iterator __position, const value_type& __x);
+      iterator
+      _M_insert_equal_(const_iterator __position, const value_type& __x);
+      template<typename _InputIterator>
+        void
+        _M_insert_unique(_InputIterator __first, _InputIterator __last);
+      template<typename _InputIterator>
+        void
+        _M_insert_equal(_InputIterator __first, _InputIterator __last);
+      void
+      erase(iterator __position);
+      void
+      erase(const_iterator __position);
+      size_type
+      erase(const key_type& __x);
+      void
+      erase(iterator __first, iterator __last);
+      void
+      erase(const_iterator __first, const_iterator __last);
+      void
+      erase(const key_type* __first, const key_type* __last);
+      void
+      clear()
+      {
+        _M_erase(_M_begin());
+        _M_leftmost() = _M_end();
+        _M_root() = 0;
+        _M_rightmost() = _M_end();
+        _M_impl._M_node_count = 0;
+      }
+      iterator
+      find(const key_type& __k);
+      const_iterator
+      find(const key_type& __k) const;
+      size_type
+      count(const key_type& __k) const;
+      iterator
+      lower_bound(const key_type& __k)
+      { return _M_lower_bound(_M_begin(), _M_end(), __k); }
+      const_iterator
+      lower_bound(const key_type& __k) const
+      { return _M_lower_bound(_M_begin(), _M_end(), __k); }
+      iterator
+      upper_bound(const key_type& __k)
+      { return _M_upper_bound(_M_begin(), _M_end(), __k); }
+      const_iterator
+      upper_bound(const key_type& __k) const
+      { return _M_upper_bound(_M_begin(), _M_end(), __k); }
+      pair<iterator, iterator>
+      equal_range(const key_type& __k);
+      pair<const_iterator, const_iterator>
+      equal_range(const key_type& __k) const;
+      bool
+      __rb_verify() const;
+    };
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    inline bool
+    operator==(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+        const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+    {
+      return __x.size() == __y.size()
+      && std::equal(__x.begin(), __x.end(), __y.begin());
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    inline bool
+    operator<(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+       const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+    {
+      return std::lexicographical_compare(__x.begin(), __x.end(),
+       __y.begin(), __y.end());
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    inline bool
+    operator!=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+        const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+    { return !(__x == __y); }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    inline bool
+    operator>(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+       const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+    { return __y < __x; }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    inline bool
+    operator<=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+        const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+    { return !(__y < __x); }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    inline bool
+    operator>=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+        const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+    { return !(__x < __y); }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    inline void
+    swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+  _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+    { __x.swap(__y); }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    operator=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x)
+    {
+      if (this != &__x)
+ {
+   clear();
+   _M_impl._M_key_compare = __x._M_impl._M_key_compare;
+   if (__x._M_root() != 0)
+     {
+       _M_root() = _M_copy(__x._M_begin(), _M_end());
+       _M_leftmost() = _S_minimum(_M_root());
+       _M_rightmost() = _S_maximum(_M_root());
+       _M_impl._M_node_count = __x._M_impl._M_node_count;
+     }
+ }
+      return *this;
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_insert_(_Const_Base_ptr __x, _Const_Base_ptr __p, const _Val& __v)
+    {
+      bool __insert_left = (__x != 0 || __p == _M_end()
+       || _M_impl._M_key_compare(_KeyOfValue()(__v),
+            _S_key(__p)));
+      _Link_type __z = _M_create_node(__v);
+      _Rb_tree_insert_and_rebalance(__insert_left, __z,
+        const_cast<_Base_ptr>(__p),
+        this->_M_impl._M_header);
+      ++_M_impl._M_node_count;
+      return iterator(__z);
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_insert_lower(_Base_ptr __x, _Base_ptr __p, const _Val& __v)
+    {
+      bool __insert_left = (__x != 0 || __p == _M_end()
+       || !_M_impl._M_key_compare(_S_key(__p),
+             _KeyOfValue()(__v)));
+      _Link_type __z = _M_create_node(__v);
+      _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
+        this->_M_impl._M_header);
+      ++_M_impl._M_node_count;
+      return iterator(__z);
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_insert_equal_lower(const _Val& __v)
+    {
+      _Link_type __x = _M_begin();
+      _Link_type __y = _M_end();
+      while (__x != 0)
+ {
+   __y = __x;
+   __x = !_M_impl._M_key_compare(_S_key(__x), _KeyOfValue()(__v)) ?
+         _S_left(__x) : _S_right(__x);
+ }
+      return _M_insert_lower(__x, __y, __v);
+    }
+  template<typename _Key, typename _Val, typename _KoV,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::_Link_type
+    _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::
+    _M_copy(_Const_Link_type __x, _Link_type __p)
+    {
+      _Link_type __top = _M_clone_node(__x);
+      __top->_M_parent = __p;
+      try
+ {
+   if (__x->_M_right)
+     __top->_M_right = _M_copy(_S_right(__x), __top);
+   __p = __top;
+   __x = _S_left(__x);
+   while (__x != 0)
+     {
+       _Link_type __y = _M_clone_node(__x);
+       __p->_M_left = __y;
+       __y->_M_parent = __p;
+       if (__x->_M_right)
+  __y->_M_right = _M_copy(_S_right(__x), __y);
+       __p = __y;
+       __x = _S_left(__x);
+     }
+ }
+      catch(...)
+ {
+   _M_erase(__top);
+   throw;
+ }
+      return __top;
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    void
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_erase(_Link_type __x)
+    {
+      while (__x != 0)
+ {
+   _M_erase(_S_right(__x));
+   _Link_type __y = _S_left(__x);
+   _M_destroy_node(__x);
+   __x = __y;
+ }
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue,
+        _Compare, _Alloc>::iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_lower_bound(_Link_type __x, _Link_type __y,
+     const _Key& __k)
+    {
+      while (__x != 0)
+ if (!_M_impl._M_key_compare(_S_key(__x), __k))
+   __y = __x, __x = _S_left(__x);
+ else
+   __x = _S_right(__x);
+      return iterator(__y);
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue,
+        _Compare, _Alloc>::const_iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_lower_bound(_Const_Link_type __x, _Const_Link_type __y,
+     const _Key& __k) const
+    {
+      while (__x != 0)
+ if (!_M_impl._M_key_compare(_S_key(__x), __k))
+   __y = __x, __x = _S_left(__x);
+ else
+   __x = _S_right(__x);
+      return const_iterator(__y);
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue,
+        _Compare, _Alloc>::iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_upper_bound(_Link_type __x, _Link_type __y,
+     const _Key& __k)
+    {
+      while (__x != 0)
+ if (_M_impl._M_key_compare(__k, _S_key(__x)))
+   __y = __x, __x = _S_left(__x);
+ else
+   __x = _S_right(__x);
+      return iterator(__y);
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue,
+        _Compare, _Alloc>::const_iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_upper_bound(_Const_Link_type __x, _Const_Link_type __y,
+     const _Key& __k) const
+    {
+      while (__x != 0)
+ if (_M_impl._M_key_compare(__k, _S_key(__x)))
+   __y = __x, __x = _S_left(__x);
+ else
+   __x = _S_right(__x);
+      return const_iterator(__y);
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+      _Compare, _Alloc>::iterator,
+  typename _Rb_tree<_Key, _Val, _KeyOfValue,
+      _Compare, _Alloc>::iterator>
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    equal_range(const _Key& __k)
+    {
+      _Link_type __x = _M_begin();
+      _Link_type __y = _M_end();
+      while (__x != 0)
+ {
+   if (_M_impl._M_key_compare(_S_key(__x), __k))
+     __x = _S_right(__x);
+   else if (_M_impl._M_key_compare(__k, _S_key(__x)))
+     __y = __x, __x = _S_left(__x);
+   else
+     {
+       _Link_type __xu(__x), __yu(__y);
+       __y = __x, __x = _S_left(__x);
+       __xu = _S_right(__xu);
+       return pair<iterator,
+            iterator>(_M_lower_bound(__x, __y, __k),
+        _M_upper_bound(__xu, __yu, __k));
+     }
+ }
+      return pair<iterator, iterator>(iterator(__y),
+          iterator(__y));
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+      _Compare, _Alloc>::const_iterator,
+  typename _Rb_tree<_Key, _Val, _KeyOfValue,
+      _Compare, _Alloc>::const_iterator>
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    equal_range(const _Key& __k) const
+    {
+      _Const_Link_type __x = _M_begin();
+      _Const_Link_type __y = _M_end();
+      while (__x != 0)
+ {
+   if (_M_impl._M_key_compare(_S_key(__x), __k))
+     __x = _S_right(__x);
+   else if (_M_impl._M_key_compare(__k, _S_key(__x)))
+     __y = __x, __x = _S_left(__x);
+   else
+     {
+       _Const_Link_type __xu(__x), __yu(__y);
+       __y = __x, __x = _S_left(__x);
+       __xu = _S_right(__xu);
+       return pair<const_iterator,
+            const_iterator>(_M_lower_bound(__x, __y, __k),
+       _M_upper_bound(__xu, __yu, __k));
+     }
+ }
+      return pair<const_iterator, const_iterator>(const_iterator(__y),
+        const_iterator(__y));
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    void
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __t)
+    {
+      if (_M_root() == 0)
+ {
+   if (__t._M_root() != 0)
+     {
+       _M_root() = __t._M_root();
+       _M_leftmost() = __t._M_leftmost();
+       _M_rightmost() = __t._M_rightmost();
+       _M_root()->_M_parent = _M_end();
+       __t._M_root() = 0;
+       __t._M_leftmost() = __t._M_end();
+       __t._M_rightmost() = __t._M_end();
+     }
+ }
+      else if (__t._M_root() == 0)
+ {
+   __t._M_root() = _M_root();
+   __t._M_leftmost() = _M_leftmost();
+   __t._M_rightmost() = _M_rightmost();
+   __t._M_root()->_M_parent = __t._M_end();
+   _M_root() = 0;
+   _M_leftmost() = _M_end();
+   _M_rightmost() = _M_end();
+ }
+      else
+ {
+   std::swap(_M_root(),__t._M_root());
+   std::swap(_M_leftmost(),__t._M_leftmost());
+   std::swap(_M_rightmost(),__t._M_rightmost());
+   _M_root()->_M_parent = _M_end();
+   __t._M_root()->_M_parent = __t._M_end();
+ }
+      std::swap(this->_M_impl._M_node_count, __t._M_impl._M_node_count);
+      std::swap(this->_M_impl._M_key_compare, __t._M_impl._M_key_compare);
+      std::__alloc_swap<_Node_allocator>::
+ _S_do_it(_M_get_Node_allocator(), __t._M_get_Node_allocator());
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+      _Compare, _Alloc>::iterator, bool>
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_insert_unique(const _Val& __v)
+    {
+      _Link_type __x = _M_begin();
+      _Link_type __y = _M_end();
+      bool __comp = true;
+      while (__x != 0)
+ {
+   __y = __x;
+   __comp = _M_impl._M_key_compare(_KeyOfValue()(__v), _S_key(__x));
+   __x = __comp ? _S_left(__x) : _S_right(__x);
+ }
+      iterator __j = iterator(__y);
+      if (__comp)
+ {
+   if (__j == begin())
+     return pair<iterator, bool>(_M_insert_(__x, __y, __v), true);
+   else
+     --__j;
+ }
+      if (_M_impl._M_key_compare(_S_key(__j._M_node), _KeyOfValue()(__v)))
+ return pair<iterator, bool>(_M_insert_(__x, __y, __v), true);
+      return pair<iterator, bool>(__j, false);
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_insert_equal(const _Val& __v)
+    {
+      _Link_type __x = _M_begin();
+      _Link_type __y = _M_end();
+      while (__x != 0)
+ {
+   __y = __x;
+   __x = _M_impl._M_key_compare(_KeyOfValue()(__v), _S_key(__x)) ?
+         _S_left(__x) : _S_right(__x);
+ }
+      return _M_insert_(__x, __y, __v);
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_insert_unique_(const_iterator __position, const _Val& __v)
+    {
+      if (__position._M_node == _M_end())
+ {
+   if (size() > 0
+       && _M_impl._M_key_compare(_S_key(_M_rightmost()),
+     _KeyOfValue()(__v)))
+     return _M_insert_(0, _M_rightmost(), __v);
+   else
+     return _M_insert_unique(__v).first;
+ }
+      else if (_M_impl._M_key_compare(_KeyOfValue()(__v),
+          _S_key(__position._M_node)))
+ {
+   const_iterator __before = __position;
+   if (__position._M_node == _M_leftmost())
+     return _M_insert_(_M_leftmost(), _M_leftmost(), __v);
+   else if (_M_impl._M_key_compare(_S_key((--__before)._M_node),
+       _KeyOfValue()(__v)))
+     {
+       if (_S_right(__before._M_node) == 0)
+  return _M_insert_(0, __before._M_node, __v);
+       else
+  return _M_insert_(__position._M_node,
+      __position._M_node, __v);
+     }
+   else
+     return _M_insert_unique(__v).first;
+ }
+      else if (_M_impl._M_key_compare(_S_key(__position._M_node),
+          _KeyOfValue()(__v)))
+ {
+   const_iterator __after = __position;
+   if (__position._M_node == _M_rightmost())
+     return _M_insert_(0, _M_rightmost(), __v);
+   else if (_M_impl._M_key_compare(_KeyOfValue()(__v),
+       _S_key((++__after)._M_node)))
+     {
+       if (_S_right(__position._M_node) == 0)
+  return _M_insert_(0, __position._M_node, __v);
+       else
+  return _M_insert_(__after._M_node, __after._M_node, __v);
+     }
+   else
+     return _M_insert_unique(__v).first;
+ }
+      else
+ return iterator(static_cast<_Link_type>
+   (const_cast<_Base_ptr>(__position._M_node)));
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    _M_insert_equal_(const_iterator __position, const _Val& __v)
+    {
+      if (__position._M_node == _M_end())
+ {
+   if (size() > 0
+       && !_M_impl._M_key_compare(_KeyOfValue()(__v),
+      _S_key(_M_rightmost())))
+     return _M_insert_(0, _M_rightmost(), __v);
+   else
+     return _M_insert_equal(__v);
+ }
+      else if (!_M_impl._M_key_compare(_S_key(__position._M_node),
+           _KeyOfValue()(__v)))
+ {
+   const_iterator __before = __position;
+   if (__position._M_node == _M_leftmost())
+     return _M_insert_(_M_leftmost(), _M_leftmost(), __v);
+   else if (!_M_impl._M_key_compare(_KeyOfValue()(__v),
+        _S_key((--__before)._M_node)))
+     {
+       if (_S_right(__before._M_node) == 0)
+  return _M_insert_(0, __before._M_node, __v);
+       else
+  return _M_insert_(__position._M_node,
+      __position._M_node, __v);
+     }
+   else
+     return _M_insert_equal(__v);
+ }
+      else
+ {
+   const_iterator __after = __position;
+   if (__position._M_node == _M_rightmost())
+     return _M_insert_(0, _M_rightmost(), __v);
+   else if (!_M_impl._M_key_compare(_S_key((++__after)._M_node),
+        _KeyOfValue()(__v)))
+     {
+       if (_S_right(__position._M_node) == 0)
+  return _M_insert_(0, __position._M_node, __v);
+       else
+  return _M_insert_(__after._M_node, __after._M_node, __v);
+     }
+   else
+     return _M_insert_equal_lower(__v);
+ }
+    }
+  template<typename _Key, typename _Val, typename _KoV,
+           typename _Cmp, typename _Alloc>
+    template<class _II>
+      void
+      _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>::
+      _M_insert_unique(_II __first, _II __last)
+      {
+ for (; __first != __last; ++__first)
+   _M_insert_unique_(end(), *__first);
+      }
+  template<typename _Key, typename _Val, typename _KoV,
+           typename _Cmp, typename _Alloc>
+    template<class _II>
+      void
+      _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>::
+      _M_insert_equal(_II __first, _II __last)
+      {
+ for (; __first != __last; ++__first)
+   _M_insert_equal_(end(), *__first);
+      }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    inline void
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    erase(iterator __position)
+    {
+      _Link_type __y =
+ static_cast<_Link_type>(_Rb_tree_rebalance_for_erase
+    (__position._M_node,
+     this->_M_impl._M_header));
+      _M_destroy_node(__y);
+      --_M_impl._M_node_count;
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    inline void
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    erase(const_iterator __position)
+    {
+      _Link_type __y =
+ static_cast<_Link_type>(_Rb_tree_rebalance_for_erase
+    (const_cast<_Base_ptr>(__position._M_node),
+     this->_M_impl._M_header));
+      _M_destroy_node(__y);
+      --_M_impl._M_node_count;
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    erase(const _Key& __x)
+    {
+      pair<iterator, iterator> __p = equal_range(__x);
+      const size_type __old_size = size();
+      erase(__p.first, __p.second);
+      return __old_size - size();
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    void
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    erase(iterator __first, iterator __last)
+    {
+      if (__first == begin() && __last == end())
+ clear();
+      else
+ while (__first != __last)
+   erase(__first++);
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    void
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    erase(const_iterator __first, const_iterator __last)
+    {
+      if (__first == begin() && __last == end())
+ clear();
+      else
+ while (__first != __last)
+   erase(__first++);
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    void
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    erase(const _Key* __first, const _Key* __last)
+    {
+      while (__first != __last)
+ erase(*__first++);
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue,
+        _Compare, _Alloc>::iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    find(const _Key& __k)
+    {
+      iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
+      return (__j == end()
+       || _M_impl._M_key_compare(__k,
+     _S_key(__j._M_node))) ? end() : __j;
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue,
+        _Compare, _Alloc>::const_iterator
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    find(const _Key& __k) const
+    {
+      const_iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
+      return (__j == end()
+       || _M_impl._M_key_compare(__k,
+     _S_key(__j._M_node))) ? end() : __j;
+    }
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
+    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    count(const _Key& __k) const
+    {
+      pair<const_iterator, const_iterator> __p = equal_range(__k);
+      const size_type __n = std::distance(__p.first, __p.second);
+      return __n;
+    }
+  unsigned int
+  _Rb_tree_black_count(const _Rb_tree_node_base* __node,
+                       const _Rb_tree_node_base* __root);
+  template<typename _Key, typename _Val, typename _KeyOfValue,
+           typename _Compare, typename _Alloc>
+    bool
+    _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const
+    {
+      if (_M_impl._M_node_count == 0 || begin() == end())
+ return _M_impl._M_node_count == 0 && begin() == end()
+        && this->_M_impl._M_header._M_left == _M_end()
+        && this->_M_impl._M_header._M_right == _M_end();
+      unsigned int __len = _Rb_tree_black_count(_M_leftmost(), _M_root());
+      for (const_iterator __it = begin(); __it != end(); ++__it)
+ {
+   _Const_Link_type __x = static_cast<_Const_Link_type>(__it._M_node);
+   _Const_Link_type __L = _S_left(__x);
+   _Const_Link_type __R = _S_right(__x);
+   if (__x->_M_color == _S_red)
+     if ((__L && __L->_M_color == _S_red)
+  || (__R && __R->_M_color == _S_red))
+       return false;
+   if (__L && _M_impl._M_key_compare(_S_key(__x), _S_key(__L)))
+     return false;
+   if (__R && _M_impl._M_key_compare(_S_key(__R), _S_key(__x)))
+     return false;
+   if (!__L && !__R && _Rb_tree_black_count(__x, _M_root()) != __len)
+     return false;
+ }
+      if (_M_leftmost() != _Rb_tree_node_base::_S_minimum(_M_root()))
+ return false;
+      if (_M_rightmost() != _Rb_tree_node_base::_S_maximum(_M_root()))
+ return false;
+      return true;
+    }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
+            typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
+    class map
+    {
+    public:
+      typedef _Key key_type;
+      typedef _Tp mapped_type;
+      typedef std::pair<const _Key, _Tp> value_type;
+      typedef _Compare key_compare;
+      typedef _Alloc allocator_type;
+    private:
+      typedef typename _Alloc::value_type _Alloc_value_type;
+     
+     
+     
+    public:
+      class value_compare
+      : public std::binary_function<value_type, value_type, bool>
+      {
+ friend class map<_Key, _Tp, _Compare, _Alloc>;
+      protected:
+ _Compare comp;
+ value_compare(_Compare __c)
+ : comp(__c) { }
+      public:
+ bool operator()(const value_type& __x, const value_type& __y) const
+ { return comp(__x.first, __y.first); }
+      };
+    private:
+      typedef typename _Alloc::template rebind<value_type>::other
+        _Pair_alloc_type;
+      typedef _Rb_tree<key_type, value_type, _Select1st<value_type>,
+         key_compare, _Pair_alloc_type> _Rep_type;
+      _Rep_type _M_t;
+    public:
+      typedef typename _Pair_alloc_type::pointer pointer;
+      typedef typename _Pair_alloc_type::const_pointer const_pointer;
+      typedef typename _Pair_alloc_type::reference reference;
+      typedef typename _Pair_alloc_type::const_reference const_reference;
+      typedef typename _Rep_type::iterator iterator;
+      typedef typename _Rep_type::const_iterator const_iterator;
+      typedef typename _Rep_type::size_type size_type;
+      typedef typename _Rep_type::difference_type difference_type;
+      typedef typename _Rep_type::reverse_iterator reverse_iterator;
+      typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
+      map()
+      : _M_t() { }
+      explicit
+      map(const _Compare& __comp,
+   const allocator_type& __a = allocator_type())
+      : _M_t(__comp, __a) { }
+      map(const map& __x)
+      : _M_t(__x._M_t) { }
+      template<typename _InputIterator>
+        map(_InputIterator __first, _InputIterator __last)
+ : _M_t()
+        { _M_t._M_insert_unique(__first, __last); }
+      template<typename _InputIterator>
+        map(_InputIterator __first, _InputIterator __last,
+     const _Compare& __comp,
+     const allocator_type& __a = allocator_type())
+ : _M_t(__comp, __a)
+        { _M_t._M_insert_unique(__first, __last); }
+      map&
+      operator=(const map& __x)
+      {
+ _M_t = __x._M_t;
+ return *this;
+      }
+      allocator_type
+      get_allocator() const
+      { return _M_t.get_allocator(); }
+      iterator
+      begin()
+      { return _M_t.begin(); }
+      const_iterator
+      begin() const
+      { return _M_t.begin(); }
+      iterator
+      end()
+      { return _M_t.end(); }
+      const_iterator
+      end() const
+      { return _M_t.end(); }
+      reverse_iterator
+      rbegin()
+      { return _M_t.rbegin(); }
+      const_reverse_iterator
+      rbegin() const
+      { return _M_t.rbegin(); }
+      reverse_iterator
+      rend()
+      { return _M_t.rend(); }
+      const_reverse_iterator
+      rend() const
+      { return _M_t.rend(); }
+      bool
+      empty() const
+      { return _M_t.empty(); }
+      size_type
+      size() const
+      { return _M_t.size(); }
+      size_type
+      max_size() const
+      { return _M_t.max_size(); }
+      mapped_type&
+      operator[](const key_type& __k)
+      {
+ iterator __i = lower_bound(__k);
+ if (__i == end() || key_comp()(__k, (*__i).first))
+          __i = insert(__i, value_type(__k, mapped_type()));
+ return (*__i).second;
+      }
+      mapped_type&
+      at(const key_type& __k)
+      {
+ iterator __i = lower_bound(__k);
+ if (__i == end() || key_comp()(__k, (*__i).first))
+   __throw_out_of_range(("map::at"));
+ return (*__i).second;
+      }
+      const mapped_type&
+      at(const key_type& __k) const
+      {
+ const_iterator __i = lower_bound(__k);
+ if (__i == end() || key_comp()(__k, (*__i).first))
+   __throw_out_of_range(("map::at"));
+ return (*__i).second;
+      }
+      std::pair<iterator, bool>
+      insert(const value_type& __x)
+      { return _M_t._M_insert_unique(__x); }
+      iterator
+      insert(iterator __position, const value_type& __x)
+      { return _M_t._M_insert_unique_(__position, __x); }
+      template<typename _InputIterator>
+        void
+        insert(_InputIterator __first, _InputIterator __last)
+        { _M_t._M_insert_unique(__first, __last); }
+      void
+      erase(iterator __position)
+      { _M_t.erase(__position); }
+      size_type
+      erase(const key_type& __x)
+      { return _M_t.erase(__x); }
+      void
+      erase(iterator __first, iterator __last)
+      { _M_t.erase(__first, __last); }
+      void
+      swap(map& __x)
+      { _M_t.swap(__x._M_t); }
+      void
+      clear()
+      { _M_t.clear(); }
+      key_compare
+      key_comp() const
+      { return _M_t.key_comp(); }
+      value_compare
+      value_comp() const
+      { return value_compare(_M_t.key_comp()); }
+      iterator
+      find(const key_type& __x)
+      { return _M_t.find(__x); }
+      const_iterator
+      find(const key_type& __x) const
+      { return _M_t.find(__x); }
+      size_type
+      count(const key_type& __x) const
+      { return _M_t.find(__x) == _M_t.end() ? 0 : 1; }
+      iterator
+      lower_bound(const key_type& __x)
+      { return _M_t.lower_bound(__x); }
+      const_iterator
+      lower_bound(const key_type& __x) const
+      { return _M_t.lower_bound(__x); }
+      iterator
+      upper_bound(const key_type& __x)
+      { return _M_t.upper_bound(__x); }
+      const_iterator
+      upper_bound(const key_type& __x) const
+      { return _M_t.upper_bound(__x); }
+      std::pair<iterator, iterator>
+      equal_range(const key_type& __x)
+      { return _M_t.equal_range(__x); }
+      std::pair<const_iterator, const_iterator>
+      equal_range(const key_type& __x) const
+      { return _M_t.equal_range(__x); }
+      template<typename _K1, typename _T1, typename _C1, typename _A1>
+        friend bool
+        operator==(const map<_K1, _T1, _C1, _A1>&,
+     const map<_K1, _T1, _C1, _A1>&);
+      template<typename _K1, typename _T1, typename _C1, typename _A1>
+        friend bool
+        operator<(const map<_K1, _T1, _C1, _A1>&,
+    const map<_K1, _T1, _C1, _A1>&);
+    };
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator==(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+               const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return __x._M_t == __y._M_t; }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator<(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+              const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return __x._M_t < __y._M_t; }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator!=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+               const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return !(__x == __y); }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator>(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+              const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return __y < __x; }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator<=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+               const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return !(__y < __x); }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator>=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+               const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return !(__x < __y); }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline void
+    swap(map<_Key, _Tp, _Compare, _Alloc>& __x,
+  map<_Key, _Tp, _Compare, _Alloc>& __y)
+    { __x.swap(__y); }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template <typename _Key, typename _Tp,
+     typename _Compare = std::less<_Key>,
+     typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
+    class multimap
+    {
+    public:
+      typedef _Key key_type;
+      typedef _Tp mapped_type;
+      typedef std::pair<const _Key, _Tp> value_type;
+      typedef _Compare key_compare;
+      typedef _Alloc allocator_type;
+    private:
+      typedef typename _Alloc::value_type _Alloc_value_type;
+     
+     
+     
+    public:
+      class value_compare
+      : public std::binary_function<value_type, value_type, bool>
+      {
+ friend class multimap<_Key, _Tp, _Compare, _Alloc>;
+      protected:
+ _Compare comp;
+ value_compare(_Compare __c)
+ : comp(__c) { }
+      public:
+ bool operator()(const value_type& __x, const value_type& __y) const
+ { return comp(__x.first, __y.first); }
+      };
+    private:
+      typedef typename _Alloc::template rebind<value_type>::other
+        _Pair_alloc_type;
+      typedef _Rb_tree<key_type, value_type, _Select1st<value_type>,
+         key_compare, _Pair_alloc_type> _Rep_type;
+      _Rep_type _M_t;
+    public:
+      typedef typename _Pair_alloc_type::pointer pointer;
+      typedef typename _Pair_alloc_type::const_pointer const_pointer;
+      typedef typename _Pair_alloc_type::reference reference;
+      typedef typename _Pair_alloc_type::const_reference const_reference;
+      typedef typename _Rep_type::iterator iterator;
+      typedef typename _Rep_type::const_iterator const_iterator;
+      typedef typename _Rep_type::size_type size_type;
+      typedef typename _Rep_type::difference_type difference_type;
+      typedef typename _Rep_type::reverse_iterator reverse_iterator;
+      typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
+      multimap()
+      : _M_t() { }
+      explicit
+      multimap(const _Compare& __comp,
+        const allocator_type& __a = allocator_type())
+      : _M_t(__comp, __a) { }
+      multimap(const multimap& __x)
+      : _M_t(__x._M_t) { }
+      template<typename _InputIterator>
+        multimap(_InputIterator __first, _InputIterator __last)
+ : _M_t()
+        { _M_t._M_insert_equal(__first, __last); }
+      template<typename _InputIterator>
+        multimap(_InputIterator __first, _InputIterator __last,
+   const _Compare& __comp,
+   const allocator_type& __a = allocator_type())
+        : _M_t(__comp, __a)
+        { _M_t._M_insert_equal(__first, __last); }
+      multimap&
+      operator=(const multimap& __x)
+      {
+ _M_t = __x._M_t;
+ return *this;
+      }
+      allocator_type
+      get_allocator() const
+      { return _M_t.get_allocator(); }
+      iterator
+      begin()
+      { return _M_t.begin(); }
+      const_iterator
+      begin() const
+      { return _M_t.begin(); }
+      iterator
+      end()
+      { return _M_t.end(); }
+      const_iterator
+      end() const
+      { return _M_t.end(); }
+      reverse_iterator
+      rbegin()
+      { return _M_t.rbegin(); }
+      const_reverse_iterator
+      rbegin() const
+      { return _M_t.rbegin(); }
+      reverse_iterator
+      rend()
+      { return _M_t.rend(); }
+      const_reverse_iterator
+      rend() const
+      { return _M_t.rend(); }
+      bool
+      empty() const
+      { return _M_t.empty(); }
+      size_type
+      size() const
+      { return _M_t.size(); }
+      size_type
+      max_size() const
+      { return _M_t.max_size(); }
+      iterator
+      insert(const value_type& __x)
+      { return _M_t._M_insert_equal(__x); }
+      iterator
+      insert(iterator __position, const value_type& __x)
+      { return _M_t._M_insert_equal_(__position, __x); }
+      template<typename _InputIterator>
+        void
+        insert(_InputIterator __first, _InputIterator __last)
+        { _M_t._M_insert_equal(__first, __last); }
+      void
+      erase(iterator __position)
+      { _M_t.erase(__position); }
+      size_type
+      erase(const key_type& __x)
+      { return _M_t.erase(__x); }
+      void
+      erase(iterator __first, iterator __last)
+      { _M_t.erase(__first, __last); }
+      void
+      swap(multimap& __x)
+      { _M_t.swap(__x._M_t); }
+      void
+      clear()
+      { _M_t.clear(); }
+      key_compare
+      key_comp() const
+      { return _M_t.key_comp(); }
+      value_compare
+      value_comp() const
+      { return value_compare(_M_t.key_comp()); }
+      iterator
+      find(const key_type& __x)
+      { return _M_t.find(__x); }
+      const_iterator
+      find(const key_type& __x) const
+      { return _M_t.find(__x); }
+      size_type
+      count(const key_type& __x) const
+      { return _M_t.count(__x); }
+      iterator
+      lower_bound(const key_type& __x)
+      { return _M_t.lower_bound(__x); }
+      const_iterator
+      lower_bound(const key_type& __x) const
+      { return _M_t.lower_bound(__x); }
+      iterator
+      upper_bound(const key_type& __x)
+      { return _M_t.upper_bound(__x); }
+      const_iterator
+      upper_bound(const key_type& __x) const
+      { return _M_t.upper_bound(__x); }
+      std::pair<iterator, iterator>
+      equal_range(const key_type& __x)
+      { return _M_t.equal_range(__x); }
+      std::pair<const_iterator, const_iterator>
+      equal_range(const key_type& __x) const
+      { return _M_t.equal_range(__x); }
+      template<typename _K1, typename _T1, typename _C1, typename _A1>
+        friend bool
+        operator==(const multimap<_K1, _T1, _C1, _A1>&,
+     const multimap<_K1, _T1, _C1, _A1>&);
+      template<typename _K1, typename _T1, typename _C1, typename _A1>
+        friend bool
+        operator<(const multimap<_K1, _T1, _C1, _A1>&,
+    const multimap<_K1, _T1, _C1, _A1>&);
+  };
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator==(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+               const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return __x._M_t == __y._M_t; }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator<(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+              const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return __x._M_t < __y._M_t; }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator!=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+               const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return !(__x == __y); }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator>(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+              const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return __y < __x; }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator<=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+               const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return !(__y < __x); }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline bool
+    operator>=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+               const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+    { return !(__x < __y); }
+  template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    inline void
+    swap(multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+         multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+    { __x.swap(__y); }
+}
+extern "C" {
+  struct swig_type_info;
+}
+namespace Swig {
+  struct GCItem
+  {
+    virtual ~GCItem() {}
+    virtual int get_own() const
+    {
+      return 0;
+    }
+  };
+  struct GCItem_var
+  {
+    GCItem_var(GCItem *item = 0) : _item(item)
+    {
+    }
+    GCItem_var& operator=(GCItem *item)
+    {
+      GCItem *tmp = _item;
+      _item = item;
+      delete tmp;
+      return *this;
+    }
+    ~GCItem_var()
+    {
+      delete _item;
+    }
+    GCItem * operator->() const
+    {
+      return _item;
+    }
+  private:
+    GCItem *_item;
+  };
+  struct GCItem_Object : GCItem
+  {
+    GCItem_Object(int own) : _own(own)
+    {
+    }
+    virtual ~GCItem_Object()
+    {
+    }
+    int get_own() const
+    {
+      return _own;
+    }
+  private:
+    int _own;
+  };
+  template <typename Type>
+  struct GCItem_T : GCItem
+  {
+    GCItem_T(Type *ptr) : _ptr(ptr)
+    {
+    }
+    virtual ~GCItem_T()
+    {
+      delete _ptr;
+    }
+  private:
+    Type *_ptr;
+  };
+  template <typename Type>
+  struct GCArray_T : GCItem
+  {
+    GCArray_T(Type *ptr) : _ptr(ptr)
+    {
+    }
+    virtual ~GCArray_T()
+    {
+      delete[] _ptr;
+    }
+  private:
+    Type *_ptr;
+  };
+  class DirectorException {
+  protected:
+    std::string swig_msg;
+  public:
+    DirectorException(PyObject *error, const char* hdr ="", const char* msg ="")
+      : swig_msg(hdr)
+    {
+      SWIG_Python_Thread_Block _swig_thread_block;
+      if (strlen(msg)) {
+        swig_msg += " ";
+        swig_msg += msg;
+      }
+      if (!PyErr_Occurred()) {
+        PyErr_SetString(error, getMessage());
+      }
+      _swig_thread_block.end();
+    }
+    const char *getMessage() const
+    {
+      return swig_msg.c_str();
+    }
+    static void raise(PyObject *error, const char *msg)
+    {
+      throw DirectorException(error, msg);
+    }
+    static void raise(const char *msg)
+    {
+      raise(PyExc_RuntimeError, msg);
+    }
+  };
+  class UnknownExceptionHandler
+  {
+    static void handler() {
+      try {
+        throw;
+      } catch (DirectorException& e) {
+        std::cerr << "Swig Director exception caught:" << std::endl
+                  << e.getMessage() << std::endl;
+      } catch (std::exception& e) {
+        std::cerr << "std::exception caught: "<< e.what() << std::endl;
+      } catch (...) {
+        std::cerr << "Unknown exception caught." << std::endl;
+      }
+      std::cerr << std::endl
+                << "Python interpreter traceback:" << std::endl;
+      PyErr_Print();
+      std::cerr << std::endl;
+      std::cerr << "This exception was caught by the SWIG unexpected exception handler." << std::endl
+                << "Try using %feature(\"director:except\") to avoid reaching this point." << std::endl
+                << std::endl
+                << "Exception is being re-thrown, program will like abort/terminate." << std::endl;
+      throw;
+    }
+  public:
+    std::unexpected_handler old;
+    UnknownExceptionHandler(std::unexpected_handler nh = handler)
+    {
+      old = std::set_unexpected(nh);
+    }
+    ~UnknownExceptionHandler()
+    {
+      std::set_unexpected(old);
+    }
+  };
+  class DirectorTypeMismatchException : public Swig::DirectorException {
+  public:
+    DirectorTypeMismatchException(PyObject *error, const char* msg="")
+      : Swig::DirectorException(error, "Swig director type mismatch", msg)
+    {
+    }
+    DirectorTypeMismatchException(const char* msg="")
+      : Swig::DirectorException(PyExc_TypeError, "Swig director type mismatch", msg)
+    {
+    }
+    static void raise(PyObject *error, const char *msg)
+    {
+      throw DirectorTypeMismatchException(error, msg);
+    }
+    static void raise(const char *msg)
+    {
+      throw DirectorTypeMismatchException(msg);
+    }
+  };
+  class DirectorMethodException : public Swig::DirectorException {
+  public:
+    DirectorMethodException(const char* msg = "")
+      : DirectorException(PyExc_RuntimeError, "Swig director method error.", msg)
+    {
+    }
+    static void raise(const char *msg)
+    {
+      throw DirectorMethodException(msg);
+    }
+  };
+  class DirectorPureVirtualException : public Swig::DirectorException
+  {
+  public:
+    DirectorPureVirtualException(const char* msg = "")
+      : DirectorException(PyExc_RuntimeError, "Swig director pure virtual method called", msg)
+    {
+    }
+    static void raise(const char *msg)
+    {
+      throw DirectorPureVirtualException(msg);
+    }
+  };
+typedef void *PyThread_type_lock;
+typedef void *PyThread_type_sema;
+extern "C" {
+void PyThread_init_thread(void);
+long PyThread_start_new_thread(void (*)(void *), void *);
+void PyThread_exit_thread(void);
+void PyThread__PyThread_exit_thread(void);
+long PyThread_get_thread_ident(void);
+PyThread_type_lock PyThread_allocate_lock(void);
+void PyThread_free_lock(PyThread_type_lock);
+int PyThread_acquire_lock(PyThread_type_lock, int);
+void PyThread_release_lock(PyThread_type_lock);
+size_t PyThread_get_stacksize(void);
+int PyThread_set_stacksize(size_t);
+int PyThread_create_key(void);
+void PyThread_delete_key(int);
+int PyThread_set_key_value(int, void *);
+void * PyThread_get_key_value(int);
+void PyThread_delete_key_value(int key);
+void PyThread_ReInitTLS(void);
+}
+  class Guard
+  {
+    PyThread_type_lock & mutex_;
+  public:
+    Guard(PyThread_type_lock & mutex) : mutex_(mutex)
+    {
+      PyThread_acquire_lock(mutex_, 1);
+    }
+    ~Guard()
+    {
+      PyThread_release_lock(mutex_);
+    }
+  };
+  class Director {
+  private:
+    PyObject* swig_self;
+    mutable bool swig_disown_flag;
+    void swig_decref() const {
+      if (swig_disown_flag) {
+        SWIG_Python_Thread_Block _swig_thread_block;
+        if ( --((PyObject*)(swig_self))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(swig_self)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(swig_self))));
+        _swig_thread_block.end();
+      }
+    }
+  public:
+    Director(PyObject* self) : swig_self(self), swig_disown_flag(false) {
+      swig_incref();
+    }
+    virtual ~Director() {
+      swig_decref();
+    }
+    PyObject *swig_get_self() const {
+      return swig_self;
+    }
+    void swig_disown() const {
+      if (!swig_disown_flag) {
+        swig_disown_flag=true;
+        swig_incref();
+      }
+    }
+    void swig_incref() const {
+      if (swig_disown_flag) {
+        ( ((PyObject*)(swig_self))->ob_refcnt++);
+      }
+    }
+    virtual bool swig_get_inner(const char* ) const {
+      return true;
+    }
+    virtual void swig_set_inner(const char* , bool ) const {
+    }
+  private:
+    typedef std::map<void*, GCItem_var> ownership_map;
+    mutable ownership_map owner;
+    static PyThread_type_lock swig_mutex_own;
+  public:
+    template <typename Type>
+    void swig_acquire_ownership_array(Type *vptr) const
+    {
+      if (vptr) {
+        Guard _guard(swig_mutex_own);
+        owner[vptr] = new GCArray_T<Type>(vptr);
+      }
+    }
+    template <typename Type>
+    void swig_acquire_ownership(Type *vptr) const
+    {
+      if (vptr) {
+        Guard _guard(swig_mutex_own);
+        owner[vptr] = new GCItem_T<Type>(vptr);
+      }
+    }
+    void swig_acquire_ownership_obj(void *vptr, int own) const
+    {
+      if (vptr && own) {
+        Guard _guard(swig_mutex_own);
+        owner[vptr] = new GCItem_Object(own);
+      }
+    }
+    int swig_release_ownership(void *vptr) const
+    {
+      int own = 0;
+      if (vptr) {
+        Guard _guard(swig_mutex_own);
+        ownership_map::iterator iter = owner.find(vptr);
+        if (iter != owner.end()) {
+          own = iter->second->get_own();
+          owner.erase(iter);
+        }
+      }
+      return own;
+    }
+  };
+  PyThread_type_lock Director::swig_mutex_own = PyThread_allocate_lock();
+}
+static swig_type_info *swig_types[82];
+static swig_module_info swig_module = {swig_types, 81, 0, 0, 0, 0};
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  class logic_error : public exception
+  {
+    string _M_msg;
+  public:
+    explicit
+    logic_error(const string& __arg);
+    virtual
+    ~logic_error() throw();
+    virtual const char*
+    what() const throw();
+  };
+  class domain_error : public logic_error
+  {
+  public:
+    explicit domain_error(const string& __arg);
+  };
+  class invalid_argument : public logic_error
+  {
+  public:
+    explicit invalid_argument(const string& __arg);
+  };
+  class length_error : public logic_error
+  {
+  public:
+    explicit length_error(const string& __arg);
+  };
+  class out_of_range : public logic_error
+  {
+  public:
+    explicit out_of_range(const string& __arg);
+  };
+  class runtime_error : public exception
+  {
+    string _M_msg;
+  public:
+    explicit
+    runtime_error(const string& __arg);
+    virtual
+    ~runtime_error() throw();
+    virtual const char*
+    what() const throw();
+  };
+  class range_error : public runtime_error
+  {
+  public:
+    explicit range_error(const string& __arg);
+  };
+  class overflow_error : public runtime_error
+  {
+  public:
+    explicit overflow_error(const string& __arg);
+  };
+  class underflow_error : public runtime_error
+  {
+  public:
+    explicit underflow_error(const string& __arg);
+  };
+}
+namespace swig {
+  class SwigPtr_PyObject {
+  protected:
+    PyObject *_obj;
+  public:
+    SwigPtr_PyObject() :_obj(0)
+    {
+    }
+    SwigPtr_PyObject(const SwigPtr_PyObject& item) : _obj(item._obj)
+    {
+      if ((_obj) == __null) ; else ( ((PyObject*)(_obj))->ob_refcnt++);
+    }
+    SwigPtr_PyObject(PyObject *obj, bool initial_ref = true) :_obj(obj)
+    {
+      if (initial_ref) {
+        if ((_obj) == __null) ; else ( ((PyObject*)(_obj))->ob_refcnt++);
+      }
+    }
+    SwigPtr_PyObject & operator=(const SwigPtr_PyObject& item)
+    {
+      if ((item._obj) == __null) ; else ( ((PyObject*)(item._obj))->ob_refcnt++);
+      if ((_obj) == __null) ; else if ( --((PyObject*)(_obj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(_obj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(_obj))));
+      _obj = item._obj;
+      return *this;
+    }
+    ~SwigPtr_PyObject()
+    {
+      if ((_obj) == __null) ; else if ( --((PyObject*)(_obj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(_obj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(_obj))));
+    }
+    operator PyObject *() const
+    {
+      return _obj;
+    }
+    PyObject *operator->() const
+    {
+      return _obj;
+    }
+  };
+}
+namespace swig {
+  struct SwigVar_PyObject : SwigPtr_PyObject {
+    SwigVar_PyObject(PyObject* obj = 0) : SwigPtr_PyObject(obj, false) { }
+    SwigVar_PyObject & operator = (PyObject* obj)
+    {
+      if ((_obj) == __null) ; else if ( --((PyObject*)(_obj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(_obj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(_obj))));
+      _obj = obj;
+      return *this;
+    }
+  };
+}
+namespace Xapian {
+typedef unsigned doccount;
+typedef int doccount_diff;
+typedef unsigned docid;
+typedef double doclength;
+typedef int percent;
+typedef unsigned termcount;
+typedef int termcount_diff;
+typedef unsigned termpos;
+typedef int termpos_diff;
+typedef unsigned timeout;
+typedef unsigned valueno;
+typedef int valueno_diff;
+typedef double weight;
+const valueno BAD_VALUENO = static_cast<valueno>(-1);
+}
+namespace Xapian {
+class ErrorHandler;
+class __attribute__((visibility("default"))) Error {
+    friend class ErrorHandler;
+    std::string msg;
+    std::string context;
+    const char * type;
+    int my_errno;
+    mutable std::string error_string;
+    bool already_handled;
+    void operator=(const Error &o);
+  protected:
+    Error(const std::string &msg_, const std::string &context_,
+   const char * type_, const char * error_string_);
+    Error(const std::string &msg_, const std::string &context_,
+   const char * type_, int errno_)
+ : msg(msg_), context(context_), type(type_), my_errno(errno_),
+   error_string(), already_handled(false) { }
+  public:
+    const char * get_type() const { return type; }
+    const std::string & get_msg() const { return msg; }
+    const std::string & get_context() const { return context; }
+    const char * get_error_string() const;
+    std::string get_description() const;
+};
+class __attribute__((visibility("default"))) LogicError : public Error {
+  protected:
+    LogicError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : Error(msg_, context_, type_, error_string_) {}
+    LogicError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : Error(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) RuntimeError : public Error {
+  protected:
+    RuntimeError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : Error(msg_, context_, type_, error_string_) {}
+    RuntimeError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : Error(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) AssertionError : public LogicError {
+  public:
+    AssertionError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : LogicError(msg_, context_, "AssertionError", error_string_) {}
+    explicit AssertionError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : LogicError(msg_, context_, "AssertionError", errno_) {}
+    AssertionError(const std::string &msg_, int errno_)
+ : LogicError(msg_, std::string(), "AssertionError", errno_) {}
+  protected:
+    AssertionError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : LogicError(msg_, context_, type_, error_string_) {}
+    AssertionError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : LogicError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) InvalidArgumentError : public LogicError {
+  public:
+    InvalidArgumentError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : LogicError(msg_, context_, "InvalidArgumentError", error_string_) {}
+    explicit InvalidArgumentError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : LogicError(msg_, context_, "InvalidArgumentError", errno_) {}
+    InvalidArgumentError(const std::string &msg_, int errno_)
+ : LogicError(msg_, std::string(), "InvalidArgumentError", errno_) {}
+  protected:
+    InvalidArgumentError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : LogicError(msg_, context_, type_, error_string_) {}
+    InvalidArgumentError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : LogicError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) InvalidOperationError : public LogicError {
+  public:
+    InvalidOperationError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : LogicError(msg_, context_, "InvalidOperationError", error_string_) {}
+    explicit InvalidOperationError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : LogicError(msg_, context_, "InvalidOperationError", errno_) {}
+    InvalidOperationError(const std::string &msg_, int errno_)
+ : LogicError(msg_, std::string(), "InvalidOperationError", errno_) {}
+  protected:
+    InvalidOperationError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : LogicError(msg_, context_, type_, error_string_) {}
+    InvalidOperationError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : LogicError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) UnimplementedError : public LogicError {
+  public:
+    UnimplementedError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : LogicError(msg_, context_, "UnimplementedError", error_string_) {}
+    explicit UnimplementedError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : LogicError(msg_, context_, "UnimplementedError", errno_) {}
+    UnimplementedError(const std::string &msg_, int errno_)
+ : LogicError(msg_, std::string(), "UnimplementedError", errno_) {}
+  protected:
+    UnimplementedError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : LogicError(msg_, context_, type_, error_string_) {}
+    UnimplementedError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : LogicError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) DatabaseError : public RuntimeError {
+  public:
+    DatabaseError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : RuntimeError(msg_, context_, "DatabaseError", error_string_) {}
+    explicit DatabaseError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : RuntimeError(msg_, context_, "DatabaseError", errno_) {}
+    DatabaseError(const std::string &msg_, int errno_)
+ : RuntimeError(msg_, std::string(), "DatabaseError", errno_) {}
+  protected:
+    DatabaseError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : RuntimeError(msg_, context_, type_, error_string_) {}
+    DatabaseError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : RuntimeError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) DatabaseCorruptError : public DatabaseError {
+  public:
+    DatabaseCorruptError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : DatabaseError(msg_, context_, "DatabaseCorruptError", error_string_) {}
+    explicit DatabaseCorruptError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : DatabaseError(msg_, context_, "DatabaseCorruptError", errno_) {}
+    DatabaseCorruptError(const std::string &msg_, int errno_)
+ : DatabaseError(msg_, std::string(), "DatabaseCorruptError", errno_) {}
+  protected:
+    DatabaseCorruptError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : DatabaseError(msg_, context_, type_, error_string_) {}
+    DatabaseCorruptError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : DatabaseError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) DatabaseCreateError : public DatabaseError {
+  public:
+    DatabaseCreateError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : DatabaseError(msg_, context_, "DatabaseCreateError", error_string_) {}
+    explicit DatabaseCreateError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : DatabaseError(msg_, context_, "DatabaseCreateError", errno_) {}
+    DatabaseCreateError(const std::string &msg_, int errno_)
+ : DatabaseError(msg_, std::string(), "DatabaseCreateError", errno_) {}
+  protected:
+    DatabaseCreateError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : DatabaseError(msg_, context_, type_, error_string_) {}
+    DatabaseCreateError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : DatabaseError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) DatabaseLockError : public DatabaseError {
+  public:
+    DatabaseLockError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : DatabaseError(msg_, context_, "DatabaseLockError", error_string_) {}
+    explicit DatabaseLockError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : DatabaseError(msg_, context_, "DatabaseLockError", errno_) {}
+    DatabaseLockError(const std::string &msg_, int errno_)
+ : DatabaseError(msg_, std::string(), "DatabaseLockError", errno_) {}
+  protected:
+    DatabaseLockError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : DatabaseError(msg_, context_, type_, error_string_) {}
+    DatabaseLockError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : DatabaseError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) DatabaseModifiedError : public DatabaseError {
+  public:
+    DatabaseModifiedError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : DatabaseError(msg_, context_, "DatabaseModifiedError", error_string_) {}
+    explicit DatabaseModifiedError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : DatabaseError(msg_, context_, "DatabaseModifiedError", errno_) {}
+    DatabaseModifiedError(const std::string &msg_, int errno_)
+ : DatabaseError(msg_, std::string(), "DatabaseModifiedError", errno_) {}
+  protected:
+    DatabaseModifiedError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : DatabaseError(msg_, context_, type_, error_string_) {}
+    DatabaseModifiedError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : DatabaseError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) DatabaseOpeningError : public DatabaseError {
+  public:
+    DatabaseOpeningError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : DatabaseError(msg_, context_, "DatabaseOpeningError", error_string_) {}
+    explicit DatabaseOpeningError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : DatabaseError(msg_, context_, "DatabaseOpeningError", errno_) {}
+    DatabaseOpeningError(const std::string &msg_, int errno_)
+ : DatabaseError(msg_, std::string(), "DatabaseOpeningError", errno_) {}
+  protected:
+    DatabaseOpeningError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : DatabaseError(msg_, context_, type_, error_string_) {}
+    DatabaseOpeningError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : DatabaseError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) DatabaseVersionError : public DatabaseOpeningError {
+  public:
+    DatabaseVersionError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : DatabaseOpeningError(msg_, context_, "DatabaseVersionError", error_string_) {}
+    explicit DatabaseVersionError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : DatabaseOpeningError(msg_, context_, "DatabaseVersionError", errno_) {}
+    DatabaseVersionError(const std::string &msg_, int errno_)
+ : DatabaseOpeningError(msg_, std::string(), "DatabaseVersionError", errno_) {}
+  protected:
+    DatabaseVersionError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : DatabaseOpeningError(msg_, context_, type_, error_string_) {}
+    DatabaseVersionError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : DatabaseOpeningError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) DocNotFoundError : public RuntimeError {
+  public:
+    DocNotFoundError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : RuntimeError(msg_, context_, "DocNotFoundError", error_string_) {}
+    explicit DocNotFoundError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : RuntimeError(msg_, context_, "DocNotFoundError", errno_) {}
+    DocNotFoundError(const std::string &msg_, int errno_)
+ : RuntimeError(msg_, std::string(), "DocNotFoundError", errno_) {}
+  protected:
+    DocNotFoundError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : RuntimeError(msg_, context_, type_, error_string_) {}
+    DocNotFoundError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : RuntimeError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) FeatureUnavailableError : public RuntimeError {
+  public:
+    FeatureUnavailableError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : RuntimeError(msg_, context_, "FeatureUnavailableError", error_string_) {}
+    explicit FeatureUnavailableError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : RuntimeError(msg_, context_, "FeatureUnavailableError", errno_) {}
+    FeatureUnavailableError(const std::string &msg_, int errno_)
+ : RuntimeError(msg_, std::string(), "FeatureUnavailableError", errno_) {}
+  protected:
+    FeatureUnavailableError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : RuntimeError(msg_, context_, type_, error_string_) {}
+    FeatureUnavailableError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : RuntimeError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) InternalError : public RuntimeError {
+  public:
+    InternalError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : RuntimeError(msg_, context_, "InternalError", error_string_) {}
+    explicit InternalError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : RuntimeError(msg_, context_, "InternalError", errno_) {}
+    InternalError(const std::string &msg_, int errno_)
+ : RuntimeError(msg_, std::string(), "InternalError", errno_) {}
+  protected:
+    InternalError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : RuntimeError(msg_, context_, type_, error_string_) {}
+    InternalError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : RuntimeError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) NetworkError : public RuntimeError {
+  public:
+    NetworkError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : RuntimeError(msg_, context_, "NetworkError", error_string_) {}
+    explicit NetworkError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : RuntimeError(msg_, context_, "NetworkError", errno_) {}
+    NetworkError(const std::string &msg_, int errno_)
+ : RuntimeError(msg_, std::string(), "NetworkError", errno_) {}
+  protected:
+    NetworkError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : RuntimeError(msg_, context_, type_, error_string_) {}
+    NetworkError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : RuntimeError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) NetworkTimeoutError : public NetworkError {
+  public:
+    NetworkTimeoutError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : NetworkError(msg_, context_, "NetworkTimeoutError", error_string_) {}
+    explicit NetworkTimeoutError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : NetworkError(msg_, context_, "NetworkTimeoutError", errno_) {}
+    NetworkTimeoutError(const std::string &msg_, int errno_)
+ : NetworkError(msg_, std::string(), "NetworkTimeoutError", errno_) {}
+  protected:
+    NetworkTimeoutError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : NetworkError(msg_, context_, type_, error_string_) {}
+    NetworkTimeoutError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : NetworkError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) QueryParserError : public RuntimeError {
+  public:
+    QueryParserError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : RuntimeError(msg_, context_, "QueryParserError", error_string_) {}
+    explicit QueryParserError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : RuntimeError(msg_, context_, "QueryParserError", errno_) {}
+    QueryParserError(const std::string &msg_, int errno_)
+ : RuntimeError(msg_, std::string(), "QueryParserError", errno_) {}
+  protected:
+    QueryParserError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : RuntimeError(msg_, context_, type_, error_string_) {}
+    QueryParserError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : RuntimeError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) SerialisationError : public RuntimeError {
+  public:
+    SerialisationError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : RuntimeError(msg_, context_, "SerialisationError", error_string_) {}
+    explicit SerialisationError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : RuntimeError(msg_, context_, "SerialisationError", errno_) {}
+    SerialisationError(const std::string &msg_, int errno_)
+ : RuntimeError(msg_, std::string(), "SerialisationError", errno_) {}
+  protected:
+    SerialisationError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : RuntimeError(msg_, context_, type_, error_string_) {}
+    SerialisationError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : RuntimeError(msg_, context_, type_, errno_) {}
+};
+class __attribute__((visibility("default"))) RangeError : public RuntimeError {
+  public:
+    RangeError(const std::string &msg_, const std::string &context_, const char * error_string_)
+ : RuntimeError(msg_, context_, "RangeError", error_string_) {}
+    explicit RangeError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
+ : RuntimeError(msg_, context_, "RangeError", errno_) {}
+    RangeError(const std::string &msg_, int errno_)
+ : RuntimeError(msg_, std::string(), "RangeError", errno_) {}
+  protected:
+    RangeError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
+ : RuntimeError(msg_, context_, type_, error_string_) {}
+    RangeError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
+ : RuntimeError(msg_, context_, type_, errno_) {}
+};
+}
+namespace Xapian {
+class Error;
+class __attribute__((visibility("default"))) ErrorHandler {
+    void operator=(const ErrorHandler &);
+    ErrorHandler(const Xapian::ErrorHandler &);
+    virtual bool handle_error(Xapian::Error &error) = 0;
+  public:
+    ErrorHandler() {}
+    virtual ~ErrorHandler();
+    void operator()(Xapian::Error &error);
+};
+}
+namespace Xapian {
+namespace Internal {
+class RefCntBase {
+    protected:
+ RefCntBase(const RefCntBase &) : ref_count(0) { }
+    public:
+ RefCntBase() : ref_count(0) { }
+ typedef unsigned int ref_count_t;
+ mutable ref_count_t ref_count;
+};
+template <class T>
+class RefCntPtr {
+    private:
+ T *dest;
+    public:
+ T *operator->() const;
+ T &operator*() const;
+ T *get() const;
+ RefCntPtr(T *dest_);
+ RefCntPtr();
+ RefCntPtr(const RefCntPtr &other);
+ void operator=(const RefCntPtr &other);
+ void operator=(T *dest_);
+ ~RefCntPtr();
+ template <class U>
+ RefCntPtr(const RefCntPtr<U> &other);
+};
+template <class T>
+inline RefCntPtr<T>::RefCntPtr(T *dest_) : dest(dest_)
+{
+    if (dest) ++dest->ref_count;
+}
+template <class T>
+inline RefCntPtr<T>::RefCntPtr() : dest(0)
+{
+}
+template <class T>
+inline RefCntPtr<T>::RefCntPtr(const RefCntPtr &other) : dest(other.dest)
+{
+    if (dest) ++dest->ref_count;
+}
+template <class T>
+inline void RefCntPtr<T>::operator=(const RefCntPtr &other) {
+    operator=(other.dest);
+}
+template <class T>
+inline void RefCntPtr<T>::operator=(T *dest_) {
+    if (dest == dest_) return;
+    T *old_dest = dest;
+    dest = dest_;
+    if (dest) ++dest->ref_count;
+    if (old_dest && --old_dest->ref_count == 0) delete old_dest;
+}
+template <class T>
+inline RefCntPtr<T>::~RefCntPtr()
+{
+    if (dest && --dest->ref_count == 0) {
+ T * condemned = dest;
+ dest = 0;
+ delete condemned;
+    }
+}
+template <class T>
+template <class U>
+inline
+RefCntPtr<T>::RefCntPtr(const RefCntPtr<U> &other)
+ : dest(other.get())
+{
+    if (dest) ++dest->ref_count;
+}
+template <class T>
+inline T *RefCntPtr<T>::operator->() const
+{
+    return dest;
+}
+template <class T>
+inline T &RefCntPtr<T>::operator*() const
+{
+    return *dest;
+}
+template <class T>
+inline T *RefCntPtr<T>::get() const
+{
+    return dest;
+}
+}
+}
+       
+       
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Tp, typename _CharT = char,
+           typename _Traits = char_traits<_CharT>, typename _Dist = ptrdiff_t>
+    class istream_iterator
+    : public iterator<input_iterator_tag, _Tp, _Dist, const _Tp*, const _Tp&>
+    {
+    public:
+      typedef _CharT char_type;
+      typedef _Traits traits_type;
+      typedef basic_istream<_CharT, _Traits> istream_type;
+    private:
+      istream_type* _M_stream;
+      _Tp _M_value;
+      bool _M_ok;
+    public:
+      istream_iterator()
+      : _M_stream(0), _M_value(), _M_ok(false) {}
+      istream_iterator(istream_type& __s)
+      : _M_stream(&__s)
+      { _M_read(); }
+      istream_iterator(const istream_iterator& __obj)
+      : _M_stream(__obj._M_stream), _M_value(__obj._M_value),
+        _M_ok(__obj._M_ok)
+      { }
+      const _Tp&
+      operator*() const
+      {
+ ;
+ return _M_value;
+      }
+      const _Tp*
+      operator->() const { return &(operator*()); }
+      istream_iterator&
+      operator++()
+      {
+ ;
+ _M_read();
+ return *this;
+      }
+      istream_iterator
+      operator++(int)
+      {
+ ;
+ istream_iterator __tmp = *this;
+ _M_read();
+ return __tmp;
+      }
+      bool
+      _M_equal(const istream_iterator& __x) const
+      { return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); }
+    private:
+      void
+      _M_read()
+      {
+ _M_ok = (_M_stream && *_M_stream) ? true : false;
+ if (_M_ok)
+   {
+     *_M_stream >> _M_value;
+     _M_ok = *_M_stream ? true : false;
+   }
+      }
+    };
+  template<typename _Tp, typename _CharT, typename _Traits, typename _Dist>
+    inline bool
+    operator==(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x,
+        const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __y)
+    { return __x._M_equal(__y); }
+  template <class _Tp, class _CharT, class _Traits, class _Dist>
+    inline bool
+    operator!=(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x,
+        const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __y)
+    { return !__x._M_equal(__y); }
+  template<typename _Tp, typename _CharT = char,
+           typename _Traits = char_traits<_CharT> >
+    class ostream_iterator
+    : public iterator<output_iterator_tag, void, void, void, void>
+    {
+    public:
+      typedef _CharT char_type;
+      typedef _Traits traits_type;
+      typedef basic_ostream<_CharT, _Traits> ostream_type;
+    private:
+      ostream_type* _M_stream;
+      const _CharT* _M_string;
+    public:
+      ostream_iterator(ostream_type& __s) : _M_stream(&__s), _M_string(0) {}
+      ostream_iterator(ostream_type& __s, const _CharT* __c)
+      : _M_stream(&__s), _M_string(__c) { }
+      ostream_iterator(const ostream_iterator& __obj)
+      : _M_stream(__obj._M_stream), _M_string(__obj._M_string) { }
+      ostream_iterator&
+      operator=(const _Tp& __value)
+      {
+ ;
+ *_M_stream << __value;
+ if (_M_string) *_M_stream << _M_string;
+ return *this;
+      }
+      ostream_iterator&
+      operator*()
+      { return *this; }
+      ostream_iterator&
+      operator++()
+      { return *this; }
+      ostream_iterator&
+      operator++(int)
+      { return *this; }
+    };
+}
+namespace Xapian {
+template<typename T>
+class DerefWrapper_ {
+    void operator=(const DerefWrapper_ &);
+    T res;
+  public:
+    explicit DerefWrapper_(const T &res_) : res(res_) { }
+    const T & operator*() const { return res; }
+};
+}
+namespace Xapian {
+class Database;
+class PostingIterator;
+class TermIterator;
+class __attribute__((visibility("default"))) PositionIterator {
+    private:
+ friend class PostingIterator;
+ friend class TermIterator;
+ friend class Database;
+    public:
+ class Internal;
+ Xapian::Internal::RefCntPtr<Internal> internal;
+        friend bool operator==(const PositionIterator &a, const PositionIterator &b);
+ explicit PositionIterator(Internal *internal_);
+ PositionIterator();
+        ~PositionIterator();
+ PositionIterator(const PositionIterator &o);
+ void operator=(const PositionIterator &o);
+ Xapian::termpos operator *() const;
+ PositionIterator & operator++();
+ DerefWrapper_<termpos> operator++(int) {
+     Xapian::termpos tmp = **this;
+     operator++();
+     return DerefWrapper_<termpos>(tmp);
+ }
+ void skip_to(Xapian::termpos pos);
+ std::string get_description() const;
+ typedef std::input_iterator_tag iterator_category;
+ typedef Xapian::termpos value_type;
+ typedef Xapian::termpos_diff difference_type;
+ typedef Xapian::termpos * pointer;
+ typedef Xapian::termpos & reference;
+};
+inline bool
+operator==(const PositionIterator &a, const PositionIterator &b)
+{
+    return (a.internal.get() == b.internal.get());
+}
+inline bool
+operator!=(const PositionIterator &a, const PositionIterator &b)
+{
+    return !(a == b);
+}
+}
+namespace Xapian {
+class Database;
+class __attribute__((visibility("default"))) TermIterator {
+    public:
+ class Internal;
+ Xapian::Internal::RefCntPtr<Internal> internal;
+ explicit TermIterator(Internal *internal_);
+ TermIterator();
+ ~TermIterator();
+ TermIterator(const TermIterator &other);
+ void operator=(const TermIterator &other);
+ std::string operator *() const;
+ TermIterator & operator++();
+ DerefWrapper_<std::string> operator++(int) {
+     const std::string & term(**this);
+     operator++();
+     return DerefWrapper_<std::string>(term);
+ }
+ void skip_to(const std::string & tname);
+ Xapian::termcount get_wdf() const;
+ Xapian::doccount get_termfreq() const;
+ Xapian::termcount positionlist_count() const;
+ PositionIterator positionlist_begin() const;
+ PositionIterator positionlist_end() const {
+     return PositionIterator(__null);
+ }
+ std::string get_description() const;
+ typedef std::input_iterator_tag iterator_category;
+ typedef std::string value_type;
+ typedef Xapian::termcount_diff difference_type;
+ typedef std::string * pointer;
+ typedef std::string & reference;
+};
+inline bool
+operator==(const TermIterator &a, const TermIterator &b)
+{
+    return (a.internal.get() == b.internal.get());
+}
+inline bool
+operator!=(const TermIterator &a, const TermIterator &b)
+{
+    return !(a == b);
+}
+}
+namespace Xapian {
+class ValueIteratorEnd_ { };
+class __attribute__((visibility("default"))) ValueIterator {
+  public:
+    class Internal;
+    Xapian::Internal::RefCntPtr<Internal> internal;
+    explicit ValueIterator(Internal *internal_);
+    ValueIterator(const ValueIterator & o);
+    ValueIterator(const ValueIteratorEnd_ &);
+    ValueIterator & operator=(const ValueIterator & o);
+    ValueIterator & operator=(const ValueIteratorEnd_ &);
+    ValueIterator();
+    ~ValueIterator();
+    std::string operator*() const;
+    ValueIterator & operator++();
+    DerefWrapper_<std::string> operator++(int) {
+ const std::string & value(**this);
+ operator++();
+ return DerefWrapper_<std::string>(value);
+    }
+    Xapian::docid get_docid() const;
+    Xapian::valueno get_valueno() const;
+    void skip_to(Xapian::docid docid_or_slot);
+    bool check(Xapian::docid docid);
+    std::string get_description() const;
+    typedef std::input_iterator_tag iterator_category;
+    typedef std::string value_type;
+    typedef Xapian::doccount_diff difference_type;
+    typedef std::string * pointer;
+    typedef std::string & reference;
+};
+inline bool
+operator==(const ValueIterator &a, const ValueIterator &b)
+{
+    return a.internal.get() == b.internal.get();
+}
+inline bool
+operator==(const ValueIterator &a, const ValueIteratorEnd_ &)
+{
+    return a.internal.get() == __null;
+}
+inline bool
+operator==(const ValueIteratorEnd_ &a, const ValueIterator &b)
+{
+    return b == a;
+}
+inline bool
+operator==(const ValueIteratorEnd_ &, const ValueIteratorEnd_ &)
+{
+    return true;
+}
+inline bool
+operator!=(const ValueIterator &a, const ValueIterator &b)
+{
+    return !(a == b);
+}
+inline bool
+operator!=(const ValueIterator &a, const ValueIteratorEnd_ &b)
+{
+    return !(a == b);
+}
+inline bool
+operator!=(const ValueIteratorEnd_ &a, const ValueIterator &b)
+{
+    return !(a == b);
+}
+inline bool
+operator!=(const ValueIteratorEnd_ &a, const ValueIteratorEnd_ &b)
+{
+    return !(a == b);
+}
+}
+namespace Xapian {
+class __attribute__((visibility("default"))) Document {
+    public:
+ class Internal;
+ Xapian::Internal::RefCntPtr<Internal> internal;
+ explicit Document(Internal *internal_);
+ Document(const Document &other);
+ void operator=(const Document &other);
+ Document();
+ ~Document();
+ std::string get_value(Xapian::valueno valueno) const;
+ void add_value(Xapian::valueno valueno, const std::string &value);
+ void remove_value(Xapian::valueno valueno);
+ void clear_values();
+ std::string get_data() const;
+ void set_data(const std::string &data);
+ void add_posting(const std::string & tname,
+    Xapian::termpos tpos,
+    Xapian::termcount wdfinc = 1);
+ void add_term(const std::string & tname, Xapian::termcount wdfinc = 1);
+ void add_boolean_term(const std::string & term) { add_term(term, 0); }
+ void remove_posting(const std::string & tname,
+       Xapian::termpos tpos,
+       Xapian::termcount wdfdec = 1);
+ void remove_term(const std::string & tname);
+ void clear_terms();
+ Xapian::termcount termlist_count() const;
+ TermIterator termlist_begin() const;
+ TermIterator termlist_end() const {
+     return TermIterator(__null);
+ }
+ Xapian::termcount values_count() const;
+ ValueIterator values_begin() const;
+ ValueIteratorEnd_ values_end() const {
+     return ValueIteratorEnd_();
+ }
+ docid get_docid() const;
+ std::string serialise() const;
+ static Document unserialise(const std::string &s);
+ std::string get_description() const;
+};
+}
+namespace Xapian {
+class Database;
+class __attribute__((visibility("default"))) PostingIterator {
+    public:
+ class Internal;
+ Xapian::Internal::RefCntPtr<Internal> internal;
+    private:
+ friend class Database;
+ explicit PostingIterator(Internal *internal_);
+    public:
+        friend bool operator==(const PostingIterator &a,
+          const PostingIterator &b);
+ PostingIterator();
+        ~PostingIterator();
+ PostingIterator(const PostingIterator &other);
+ void operator=(const PostingIterator &other);
+ PostingIterator & operator++();
+ DerefWrapper_<docid> operator++(int) {
+     Xapian::docid tmp = **this;
+     operator++();
+     return DerefWrapper_<docid>(tmp);
+ }
+ void skip_to(Xapian::docid did);
+ Xapian::docid operator *() const;
+ Xapian::termcount get_doclength() const;
+        Xapian::termcount get_wdf() const;
+ PositionIterator positionlist_begin() const;
+ PositionIterator positionlist_end() const {
+     return PositionIterator(__null);
+ }
+ std::string get_description() const;
+ typedef std::input_iterator_tag iterator_category;
+ typedef Xapian::docid value_type;
+ typedef Xapian::doccount_diff difference_type;
+ typedef Xapian::docid * pointer;
+ typedef Xapian::docid & reference;
+};
+inline bool operator==(const PostingIterator &a, const PostingIterator &b)
+{
+    return (a.internal.get() == b.internal.get());
+}
+inline bool operator!=(const PostingIterator &a, const PostingIterator &b)
+{
+    return !(a == b);
+}
+}
+namespace Xapian {
+class __attribute__((visibility("default"))) Database {
+    public:
+ class Internal;
+ std::vector<Xapian::Internal::RefCntPtr<Internal> > internal;
+ Document::Internal * get_document_lazily(Xapian::docid did) const;
+ void add_database(const Database & database);
+ Database();
+ explicit Database(const std::string &path);
+ explicit Database(Internal *internal);
+ virtual ~Database();
+ Database(const Database &other);
+ void operator=(const Database &other);
+ void reopen();
+ virtual void close();
+ virtual std::string get_description() const;
+ PostingIterator postlist_begin(const std::string &tname) const;
+ PostingIterator postlist_end(const std::string &) const {
+     return PostingIterator(__null);
+ }
+ TermIterator termlist_begin(Xapian::docid did) const;
+ TermIterator termlist_end(Xapian::docid) const {
+     return TermIterator(__null);
+ }
+ bool has_positions() const;
+ PositionIterator positionlist_begin(Xapian::docid did, const std::string &tname) const;
+ PositionIterator positionlist_end(Xapian::docid, const std::string &) const {
+     return PositionIterator(__null);
+ }
+ TermIterator allterms_begin() const;
+ TermIterator allterms_end() const {
+     return TermIterator(__null);
+ }
+ TermIterator allterms_begin(const std::string & prefix) const;
+ TermIterator allterms_end(const std::string &) const {
+     return TermIterator(__null);
+ }
+ Xapian::doccount get_doccount() const;
+ Xapian::docid get_lastdocid() const;
+ Xapian::doclength get_avlength() const;
+ Xapian::doccount get_termfreq(const std::string & tname) const;
+ bool term_exists(const std::string & tname) const;
+ Xapian::termcount get_collection_freq(const std::string & tname) const;
+ Xapian::doccount get_value_freq(Xapian::valueno valno) const;
+ std::string get_value_lower_bound(Xapian::valueno valno) const;
+ std::string get_value_upper_bound(Xapian::valueno valno) const;
+ Xapian::termcount get_doclength_lower_bound() const;
+ Xapian::termcount get_doclength_upper_bound() const;
+ Xapian::termcount get_wdf_upper_bound(const std::string & term) const;
+ ValueIterator valuestream_begin(Xapian::valueno slot) const;
+ ValueIteratorEnd_ valuestream_end(Xapian::valueno) const {
+     return ValueIteratorEnd_();
+ }
+ Xapian::termcount get_doclength(Xapian::docid did) const;
+ void keep_alive();
+ Xapian::Document get_document(Xapian::docid did) const;
+ std::string get_spelling_suggestion(const std::string &word,
+         unsigned max_edit_distance = 2) const;
+ Xapian::TermIterator spellings_begin() const;
+ Xapian::TermIterator spellings_end() const {
+     return Xapian::TermIterator(__null);
+ }
+ Xapian::TermIterator synonyms_begin(const std::string &term) const;
+ Xapian::TermIterator synonyms_end(const std::string &) const {
+     return Xapian::TermIterator(__null);
+ }
+ Xapian::TermIterator synonym_keys_begin(const std::string &prefix = std::string()) const;
+ Xapian::TermIterator synonym_keys_end(const std::string & = std::string()) const {
+     return Xapian::TermIterator(__null);
+ }
+ std::string get_metadata(const std::string & key) const;
+ Xapian::TermIterator metadata_keys_begin(const std::string &prefix = std::string()) const;
+ Xapian::TermIterator metadata_keys_end(const std::string & = std::string()) const {
+     return Xapian::TermIterator(__null);
+ }
+ std::string get_uuid() const;
+};
+class __attribute__((visibility("default"))) WritableDatabase : public Database {
+    public:
+ virtual ~WritableDatabase();
+ WritableDatabase();
+ WritableDatabase(const std::string &path, int action);
+ explicit WritableDatabase(Database::Internal *internal);
+ WritableDatabase(const WritableDatabase &other);
+ void operator=(const WritableDatabase &other);
+ void commit();
+ void flush() { commit(); }
+ void begin_transaction(bool flushed=true);
+ void commit_transaction();
+ void cancel_transaction();
+ Xapian::docid add_document(const Xapian::Document & document);
+ void delete_document(Xapian::docid did);
+ void delete_document(const std::string & unique_term);
+ void replace_document(Xapian::docid did,
+         const Xapian::Document & document);
+ Xapian::docid replace_document(const std::string & unique_term,
+           const Xapian::Document & document);
+ void add_spelling(const std::string & word,
+     Xapian::termcount freqinc = 1) const;
+ void remove_spelling(const std::string & word,
+        Xapian::termcount freqdec = 1) const;
+ void add_synonym(const std::string & term,
+    const std::string & synonym) const;
+ void remove_synonym(const std::string & term,
+       const std::string & synonym) const;
+ void clear_synonyms(const std::string & term) const;
+ void set_metadata(const std::string & key, const std::string & value);
+ std::string get_description() const;
+};
+const int DB_CREATE_OR_OPEN = 1;
+const int DB_CREATE = 2;
+const int DB_CREATE_OR_OVERWRITE = 3;
+const int DB_OPEN = 4;
+}
+namespace Xapian {
+class Database;
+class WritableDatabase;
+namespace Auto {
+__attribute__((visibility("default")))
+Database open_stub(const std::string &file);
+__attribute__((visibility("default")))
+WritableDatabase open_stub(const std::string &file, int action);
+}
+namespace InMemory {
+__attribute__((visibility("default")))
+WritableDatabase open();
+}
+namespace Brass {
+__attribute__((visibility("default")))
+Database open(const std::string &dir);
+__attribute__((visibility("default")))
+WritableDatabase
+open(const std::string &dir, int action, int block_size = 8192);
+}
+namespace Chert {
+__attribute__((visibility("default")))
+Database open(const std::string &dir);
+__attribute__((visibility("default")))
+WritableDatabase
+open(const std::string &dir, int action, int block_size = 8192);
+}
+namespace Flint {
+__attribute__((visibility("default")))
+Database open(const std::string &dir);
+__attribute__((visibility("default")))
+WritableDatabase
+open(const std::string &dir, int action, int block_size = 8192);
+}
+namespace Remote {
+__attribute__((visibility("default")))
+Database open(const std::string &host, unsigned int port, Xapian::timeout timeout = 10000, Xapian::timeout connect_timeout = 10000);
+__attribute__((visibility("default")))
+WritableDatabase open_writable(const std::string &host, unsigned int port, Xapian::timeout timeout = 0, Xapian::timeout connect_timeout = 10000);
+__attribute__((visibility("default")))
+Database open(const std::string &program, const std::string &args, Xapian::timeout timeout = 10000);
+__attribute__((visibility("default")))
+WritableDatabase open_writable(const std::string &program, const std::string &args, Xapian::timeout timeout = 0);
+}
+}
+namespace Xapian {
+class __attribute__((visibility("default"))) Utf8Iterator {
+    const unsigned char *p;
+    const unsigned char *end;
+    mutable unsigned seqlen;
+    void calculate_sequence_length() const;
+    unsigned get_char() const;
+    Utf8Iterator(const unsigned char *p_, const unsigned char *end_, unsigned seqlen_)
+ : p(p_), end(end_), seqlen(seqlen_) { }
+  public:
+    const char * raw() const {
+ return reinterpret_cast<const char *>(p ? p : end);
+    }
+    size_t left() const { return p ? end - p : 0; }
+    void assign(const char *p_, size_t len) {
+ if (len) {
+     p = reinterpret_cast<const unsigned char*>(p_);
+     end = p + len;
+     seqlen = 0;
+ } else {
+     p = __null;
+ }
+    }
+    void assign(const std::string &s) { assign(s.data(), s.size()); }
+    explicit Utf8Iterator(const char *p_);
+    Utf8Iterator(const char *p_, size_t len) { assign(p_, len); }
+    Utf8Iterator(const std::string &s) { assign(s.data(), s.size()); }
+    Utf8Iterator() : p(__null), end(0), seqlen(0) { }
+    unsigned operator*() const;
+    Utf8Iterator operator++(int) {
+ if (seqlen == 0) calculate_sequence_length();
+ const unsigned char *old_p = p;
+ unsigned old_seqlen = seqlen;
+ p += seqlen;
+ if (p == end) p = __null;
+ seqlen = 0;
+ return Utf8Iterator(old_p, end, old_seqlen);
+    }
+    Utf8Iterator & operator++() {
+ if (seqlen == 0) calculate_sequence_length();
+ p += seqlen;
+ if (p == end) p = __null;
+ seqlen = 0;
+ return *this;
+    }
+    bool operator==(const Utf8Iterator &other) const { return p == other.p; }
+    bool operator!=(const Utf8Iterator &other) const { return p != other.p; }
+    typedef std::input_iterator_tag iterator_category;
+    typedef unsigned value_type;
+    typedef size_t difference_type;
+    typedef const unsigned * pointer;
+    typedef const unsigned & reference;
+};
+namespace Unicode {
+typedef enum {
+    UNASSIGNED,
+    UPPERCASE_LETTER,
+    LOWERCASE_LETTER,
+    TITLECASE_LETTER,
+    MODIFIER_LETTER,
+    OTHER_LETTER,
+    NON_SPACING_MARK,
+    ENCLOSING_MARK,
+    COMBINING_SPACING_MARK,
+    DECIMAL_DIGIT_NUMBER,
+    LETTER_NUMBER,
+    OTHER_NUMBER,
+    SPACE_SEPARATOR,
+    LINE_SEPARATOR,
+    PARAGRAPH_SEPARATOR,
+    CONTROL,
+    FORMAT,
+    PRIVATE_USE,
+    SURROGATE,
+    CONNECTOR_PUNCTUATION,
+    DASH_PUNCTUATION,
+    OPEN_PUNCTUATION,
+    CLOSE_PUNCTUATION,
+    INITIAL_QUOTE_PUNCTUATION,
+    FINAL_QUOTE_PUNCTUATION,
+    OTHER_PUNCTUATION,
+    MATH_SYMBOL,
+    CURRENCY_SYMBOL,
+    MODIFIER_SYMBOL,
+    OTHER_SYMBOL
+} category;
+namespace Internal {
+    __attribute__((visibility("default")))
+    int get_character_info(unsigned ch);
+    inline int get_case_type(int info) { return ((info & 0xe0) >> 5); }
+    inline category get_category(int info) { return static_cast<category>(info & 0x1f); }
+    inline int get_delta(int info) {
+ return (info >= 0) ? (info >> 15) : (~(~info >> 15));
+    }
+}
+__attribute__((visibility("default")))
+unsigned nonascii_to_utf8(unsigned ch, char * buf);
+inline unsigned to_utf8(unsigned ch, char *buf) {
+    if (ch < 128) {
+ *buf = static_cast<unsigned char>(ch);
+ return 1;
+    }
+    return Xapian::Unicode::nonascii_to_utf8(ch, buf);
+}
+inline void append_utf8(std::string &s, unsigned ch) {
+    char buf[4];
+    s.append(buf, to_utf8(ch, buf));
+}
+inline category get_category(unsigned ch) {
+    if (ch >= 0x110000) return Xapian::Unicode::UNASSIGNED;
+    return Internal::get_category(Internal::get_character_info(ch));
+}
+inline bool is_wordchar(unsigned ch) {
+    const unsigned int WORDCHAR_MASK =
+     (1 << Xapian::Unicode::UPPERCASE_LETTER) |
+     (1 << Xapian::Unicode::LOWERCASE_LETTER) |
+     (1 << Xapian::Unicode::TITLECASE_LETTER) |
+     (1 << Xapian::Unicode::MODIFIER_LETTER) |
+     (1 << Xapian::Unicode::OTHER_LETTER) |
+     (1 << Xapian::Unicode::NON_SPACING_MARK) |
+     (1 << Xapian::Unicode::ENCLOSING_MARK) |
+     (1 << Xapian::Unicode::COMBINING_SPACING_MARK) |
+     (1 << Xapian::Unicode::DECIMAL_DIGIT_NUMBER) |
+     (1 << Xapian::Unicode::LETTER_NUMBER) |
+     (1 << Xapian::Unicode::OTHER_NUMBER) |
+     (1 << Xapian::Unicode::CONNECTOR_PUNCTUATION);
+    return ((WORDCHAR_MASK >> get_category(ch)) & 1);
+}
+inline bool is_whitespace(unsigned ch) {
+    const unsigned int WHITESPACE_MASK =
+     (1 << Xapian::Unicode::CONTROL) |
+     (1 << Xapian::Unicode::SPACE_SEPARATOR) |
+     (1 << Xapian::Unicode::LINE_SEPARATOR) |
+     (1 << Xapian::Unicode::PARAGRAPH_SEPARATOR);
+    return ((WHITESPACE_MASK >> get_category(ch)) & 1);
+}
+inline bool is_currency(unsigned ch) {
+    return (get_category(ch) == Xapian::Unicode::CURRENCY_SYMBOL);
+}
+inline unsigned tolower(unsigned ch) {
+    int info;
+    if (ch >= 0x110000 || !(Internal::get_case_type((info = Xapian::Unicode::Internal::get_character_info(ch))) & 2))
+ return ch;
+    return ch + Internal::get_delta(info);
+}
+inline unsigned toupper(unsigned ch) {
+    int info;
+    if (ch >= 0x110000 || !(Internal::get_case_type((info = Xapian::Unicode::Internal::get_character_info(ch))) & 4))
+ return ch;
+    return ch - Internal::get_delta(info);
+}
+inline std::string
+tolower(const std::string &term)
+{
+    std::string result;
+    result.reserve(term.size());
+    for (Utf8Iterator i(term); i != Utf8Iterator(); ++i) {
+ append_utf8(result, tolower(*i));
+    }
+    return result;
+}
+inline std::string
+toupper(const std::string &term)
+{
+    std::string result;
+    result.reserve(term.size());
+    for (Utf8Iterator i(term); i != Utf8Iterator(); ++i) {
+ append_utf8(result, toupper(*i));
+    }
+    return result;
+}
+}
+}
+namespace Xapian {
+class Document;
+class Stem;
+class Stopper;
+class WritableDatabase;
+class __attribute__((visibility("default"))) TermGenerator {
+  public:
+    class Internal;
+    Xapian::Internal::RefCntPtr<Internal> internal;
+    TermGenerator(const TermGenerator & o);
+    TermGenerator & operator=(const TermGenerator & o);
+    TermGenerator();
+    ~TermGenerator();
+    void set_stemmer(const Xapian::Stem & stemmer);
+    void set_stopper(const Xapian::Stopper *stop = __null);
+    void set_document(const Xapian::Document & doc);
+    const Xapian::Document & get_document() const;
+    void set_database(const Xapian::WritableDatabase &db);
+    enum flags {
+ FLAG_SPELLING = 128
+    };
+    flags set_flags(flags toggle, flags mask = flags(0));
+    void index_text(const Xapian::Utf8Iterator & itor,
+      Xapian::termcount weight = 1,
+      const std::string & prefix = std::string());
+    void index_text(const std::string & text,
+      Xapian::termcount weight = 1,
+      const std::string & prefix = std::string()) {
+ return index_text(Utf8Iterator(text), weight, prefix);
+    }
+    void index_text_without_positions(const Xapian::Utf8Iterator & itor,
+          Xapian::termcount weight = 1,
+          const std::string & prefix = std::string());
+    void index_text_without_positions(const std::string & text,
+          Xapian::termcount weight = 1,
+          const std::string & prefix = std::string()) {
+ return index_text_without_positions(Utf8Iterator(text), weight, prefix);
+    }
+    void increase_termpos(Xapian::termcount delta = 100);
+    Xapian::termcount get_termpos() const;
+    void set_termpos(Xapian::termcount termpos);
+    std::string get_description() const;
+};
+}
+namespace Xapian {
+class Document;
+class __attribute__((visibility("default"))) KeyMaker {
+  public:
+    virtual std::string operator()(const Xapian::Document & doc) const = 0;
+    virtual ~KeyMaker();
+};
+class __attribute__((visibility("default"))) MultiValueKeyMaker : public KeyMaker {
+    std::vector<std::pair<Xapian::valueno, bool> > valnos;
+  public:
+    MultiValueKeyMaker() { }
+    template <class Iterator>
+    MultiValueKeyMaker(Iterator begin, Iterator end) {
+ while (begin != end) add_value(*begin++);
+    }
+    virtual std::string operator()(const Xapian::Document & doc) const;
+    void add_value(Xapian::valueno valno, bool reverse = false) {
+ valnos.push_back(std::make_pair(valno, reverse));
+    }
+};
+class __attribute__((visibility("default"))) Sorter : public KeyMaker { };
+class __attribute__((visibility("default"))) MultiValueSorter : public Sorter {
+    std::vector<std::pair<Xapian::valueno, bool> > valnos;
+  public:
+    MultiValueSorter() { }
+    template <class Iterator>
+    MultiValueSorter(Iterator begin, Iterator end) {
+ while (begin != end) add(*begin++);
+    }
+    virtual std::string operator()(const Xapian::Document & doc) const;
+    void add(Xapian::valueno valno, bool forward = true) {
+ valnos.push_back(std::make_pair(valno, forward));
+    }
+};
+}
+namespace Xapian {
+class Database;
+class Document;
+class ErrorHandler;
+class ExpandDecider;
+class MatchSpy;
+class MSetIterator;
+class Query;
+class Weight;
+class __attribute__((visibility("default"))) MSet {
+    public:
+ class Internal;
+ Xapian::Internal::RefCntPtr<Internal> internal;
+ explicit MSet(MSet::Internal * internal_);
+ MSet();
+ ~MSet();
+ MSet(const MSet & other);
+ void operator=(const MSet &other);
+ void fetch(const MSetIterator &begin, const MSetIterator &end) const;
+ void fetch(const MSetIterator &item) const;
+ void fetch() const;
+ Xapian::percent convert_to_percent(Xapian::weight wt) const;
+ Xapian::percent convert_to_percent(const MSetIterator &it) const;
+ Xapian::doccount get_termfreq(const std::string &tname) const;
+ Xapian::weight get_termweight(const std::string &tname) const;
+ Xapian::doccount get_firstitem() const;
+ Xapian::doccount get_matches_lower_bound() const;
+ Xapian::doccount get_matches_estimated() const;
+ Xapian::doccount get_matches_upper_bound() const;
+ Xapian::doccount get_uncollapsed_matches_lower_bound() const;
+ Xapian::doccount get_uncollapsed_matches_estimated() const;
+ Xapian::doccount get_uncollapsed_matches_upper_bound() const;
+ Xapian::weight get_max_possible() const;
+ Xapian::weight get_max_attained() const;
+ Xapian::doccount size() const;
+ Xapian::doccount max_size() const { return size(); }
+ bool empty() const;
+ void swap(MSet & other);
+ MSetIterator begin() const;
+ MSetIterator end() const;
+ MSetIterator back() const;
+ MSetIterator operator[](Xapian::doccount i) const;
+ typedef MSetIterator value_type;
+ typedef MSetIterator iterator;
+ typedef MSetIterator const_iterator;
+ typedef MSetIterator & reference;
+ typedef MSetIterator & const_reference;
+ typedef MSetIterator * pointer;
+ typedef Xapian::doccount_diff difference_type;
+ typedef Xapian::doccount size_type;
+ std::string get_description() const;
+};
+class __attribute__((visibility("default"))) MSetIterator {
+    private:
+ friend class MSet;
+ friend bool operator==(const MSetIterator &a, const MSetIterator &b);
+ friend bool operator!=(const MSetIterator &a, const MSetIterator &b);
+ MSetIterator(Xapian::doccount index_, const MSet & mset_)
+     : index(index_), mset(mset_) { }
+ Xapian::doccount index;
+ MSet mset;
+    public:
+ MSetIterator() : index(0), mset() { }
+ MSetIterator(const MSetIterator &other) {
+     index = other.index;
+     mset = other.mset;
+ }
+ void operator=(const MSetIterator &other) {
+     index = other.index;
+     mset = other.mset;
+ }
+ MSetIterator & operator++() {
+     ++index;
+     return *this;
+ }
+ MSetIterator operator++(int) {
+     MSetIterator tmp = *this;
+     ++index;
+     return tmp;
+ }
+ MSetIterator & operator--() {
+     --index;
+     return *this;
+ }
+ MSetIterator operator--(int) {
+     MSetIterator tmp = *this;
+     --index;
+     return tmp;
+ }
+ Xapian::docid operator*() const;
+ Xapian::Document get_document() const;
+ Xapian::doccount get_rank() const {
+     return mset.get_firstitem() + index;
+ }
+ Xapian::weight get_weight() const;
+ std::string get_collapse_key() const;
+ Xapian::doccount get_collapse_count() const;
+ Xapian::percent get_percent() const;
+ std::string get_description() const;
+ typedef std::bidirectional_iterator_tag iterator_category;
+ typedef Xapian::docid value_type;
+ typedef Xapian::doccount_diff difference_type;
+ typedef Xapian::docid * pointer;
+ typedef Xapian::docid & reference;
+};
+inline bool operator==(const MSetIterator &a, const MSetIterator &b)
+{
+    return (a.index == b.index);
+}
+inline bool operator!=(const MSetIterator &a, const MSetIterator &b)
+{
+    return (a.index != b.index);
+}
+class ESetIterator;
+class __attribute__((visibility("default"))) ESet {
+    public:
+ class Internal;
+ Xapian::Internal::RefCntPtr<Internal> internal;
+ ESet();
+ ~ESet();
+ ESet(const ESet & other);
+ void operator=(const ESet &other);
+ Xapian::termcount get_ebound() const;
+ Xapian::termcount size() const;
+ Xapian::termcount max_size() const { return size(); }
+ bool empty() const;
+ void swap(ESet & other);
+ ESetIterator begin() const;
+ ESetIterator end() const;
+ ESetIterator back() const;
+ ESetIterator operator[](Xapian::termcount i) const;
+ std::string get_description() const;
+};
+class __attribute__((visibility("default"))) ESetIterator {
+    private:
+ friend class ESet;
+ friend bool operator==(const ESetIterator &a, const ESetIterator &b);
+ friend bool operator!=(const ESetIterator &a, const ESetIterator &b);
+ ESetIterator(Xapian::termcount index_, const ESet & eset_)
+     : index(index_), eset(eset_) { }
+ Xapian::termcount index;
+ ESet eset;
+    public:
+ ESetIterator() : index(0), eset() { }
+ ESetIterator(const ESetIterator &other) {
+     index = other.index;
+     eset = other.eset;
+ }
+ void operator=(const ESetIterator &other) {
+     index = other.index;
+     eset = other.eset;
+ }
+ ESetIterator & operator++() {
+     ++index;
+     return *this;
+ }
+ ESetIterator operator++(int) {
+     ESetIterator tmp = *this;
+     ++index;
+     return tmp;
+ }
+ ESetIterator & operator--() {
+     --index;
+     return *this;
+ }
+ ESetIterator operator--(int) {
+     ESetIterator tmp = *this;
+     --index;
+     return tmp;
+ }
+ const std::string & operator *() const;
+ Xapian::weight get_weight() const;
+ std::string get_description() const;
+ typedef std::bidirectional_iterator_tag iterator_category;
+ typedef std::string value_type;
+ typedef Xapian::termcount_diff difference_type;
+ typedef std::string * pointer;
+ typedef std::string & reference;
+};
+inline bool operator==(const ESetIterator &a, const ESetIterator &b)
+{
+    return (a.index == b.index);
+}
+inline bool operator!=(const ESetIterator &a, const ESetIterator &b)
+{
+    return (a.index != b.index);
+}
+class __attribute__((visibility("default"))) RSet {
+    public:
+ class Internal;
+ Xapian::Internal::RefCntPtr<Internal> internal;
+ RSet(const RSet &rset);
+ void operator=(const RSet &rset);
+ RSet();
+ ~RSet();
+ Xapian::doccount size() const;
+ bool empty() const;
+ void add_document(Xapian::docid did);
+ void add_document(const Xapian::MSetIterator & i) { add_document(*i); }
+ void remove_document(Xapian::docid did);
+ void remove_document(const Xapian::MSetIterator & i) { remove_document(*i); }
+ bool contains(Xapian::docid did) const;
+ bool contains(const Xapian::MSetIterator & i) const { return contains(*i); }
+ std::string get_description() const;
+};
+class __attribute__((visibility("default"))) MatchDecider {
+    public:
+ virtual bool operator()(const Xapian::Document &doc) const = 0;
+ virtual ~MatchDecider();
+};
+class __attribute__((visibility("default"))) Enquire {
+    public:
+ Enquire(const Enquire & other);
+ void operator=(const Enquire & other);
+ class Internal;
+ Xapian::Internal::RefCntPtr<Internal> internal;
+ explicit Enquire(const Database &database, ErrorHandler * errorhandler_ = 0);
+ ~Enquire();
+ void set_query(const Xapian::Query & query, Xapian::termcount qlen = 0);
+ const Xapian::Query & get_query() const;
+ void add_matchspy(MatchSpy * spy);
+ void clear_matchspies();
+ void set_weighting_scheme(const Weight &weight_);
+ void set_collapse_key(Xapian::valueno collapse_key,
+         Xapian::doccount collapse_max = 1);
+ typedef enum {
+     ASCENDING = 1,
+     DESCENDING = 0,
+     DONT_CARE = 2
+ } docid_order;
+ void set_docid_order(docid_order order);
+ void set_cutoff(Xapian::percent percent_cutoff, Xapian::weight weight_cutoff = 0);
+ void set_sort_by_relevance();
+ void set_sort_by_value(Xapian::valueno sort_key, bool reverse);
+ void set_sort_by_value(Xapian::valueno sort_key);
+ void set_sort_by_key(Xapian::KeyMaker * sorter, bool reverse);
+ void set_sort_by_key(Xapian::KeyMaker * sorter);
+ void set_sort_by_value_then_relevance(Xapian::valueno sort_key,
+           bool reverse);
+ void set_sort_by_value_then_relevance(Xapian::valueno sort_key);
+ void set_sort_by_key_then_relevance(Xapian::KeyMaker * sorter,
+         bool reverse);
+ void set_sort_by_key_then_relevance(Xapian::KeyMaker * sorter);
+ void set_sort_by_relevance_then_value(Xapian::valueno sort_key,
+           bool reverse);
+ void set_sort_by_relevance_then_value(Xapian::valueno sort_key);
+ void set_sort_by_relevance_then_key(Xapian::KeyMaker * sorter,
+         bool reverse);
+ void set_sort_by_relevance_then_key(Xapian::KeyMaker * sorter);
+ MSet get_mset(Xapian::doccount first, Xapian::doccount maxitems,
+        Xapian::doccount checkatleast = 0,
+        const RSet * omrset = 0,
+        const MatchDecider * mdecider = 0) const;
+ MSet get_mset(Xapian::doccount first, Xapian::doccount maxitems, Xapian::doccount checkatleast, const RSet * omrset, const MatchDecider * mdecider, const MatchDecider * matchspy) const;
+ MSet get_mset(Xapian::doccount first, Xapian::doccount maxitems,
+        const RSet * omrset,
+        const MatchDecider * mdecider = 0) const {
+     return get_mset(first, maxitems, 0, omrset, mdecider);
+ }
+ static const int INCLUDE_QUERY_TERMS = 1;
+ static const int USE_EXACT_TERMFREQ = 2;
+ ESet get_eset(Xapian::termcount maxitems,
+   const RSet & omrset,
+   int flags = 0,
+   double k = 1.0,
+   const Xapian::ExpandDecider * edecider = 0) const;
+ inline ESet get_eset(Xapian::termcount maxitems, const RSet & omrset,
+          const Xapian::ExpandDecider * edecider) const {
+     return get_eset(maxitems, omrset, 0, 1.0, edecider);
+ }
+ TermIterator get_matching_terms_begin(Xapian::docid did) const;
+ TermIterator get_matching_terms_end(Xapian::docid ) const {
+     return TermIterator(__null);
+ }
+ TermIterator get_matching_terms_begin(const MSetIterator &it) const;
+ TermIterator get_matching_terms_end(const MSetIterator & ) const {
+     return TermIterator(__null);
+ }
+ std::string get_description() const;
+};
+inline void
+Enquire::set_sort_by_value(Xapian::valueno sort_key)
+{
+    return set_sort_by_value(sort_key, true);
+}
+inline void
+Enquire::set_sort_by_key(Xapian::KeyMaker * sorter)
+{
+    return set_sort_by_key(sorter, true);
+}
+inline void
+Enquire::set_sort_by_value_then_relevance(Xapian::valueno sort_key)
+{
+    return set_sort_by_value_then_relevance(sort_key, true);
+}
+inline void
+Enquire::set_sort_by_key_then_relevance(Xapian::KeyMaker * sorter)
+{
+    return set_sort_by_key_then_relevance(sorter, true);
+}
+inline void
+Enquire::set_sort_by_relevance_then_value(Xapian::valueno sort_key)
+{
+    return set_sort_by_relevance_then_value(sort_key, true);
+}
+inline void
+Enquire::set_sort_by_relevance_then_key(Xapian::KeyMaker * sorter)
+{
+    return set_sort_by_relevance_then_key(sorter, true);
+}
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Key, typename _Compare = std::less<_Key>,
+    typename _Alloc = std::allocator<_Key> >
+    class set
+    {
+      typedef typename _Alloc::value_type _Alloc_value_type;
+     
+     
+     
+    public:
+      typedef _Key key_type;
+      typedef _Key value_type;
+      typedef _Compare key_compare;
+      typedef _Compare value_compare;
+      typedef _Alloc allocator_type;
+    private:
+      typedef typename _Alloc::template rebind<_Key>::other _Key_alloc_type;
+      typedef _Rb_tree<key_type, value_type, _Identity<value_type>,
+         key_compare, _Key_alloc_type> _Rep_type;
+      _Rep_type _M_t;
+    public:
+      typedef typename _Key_alloc_type::pointer pointer;
+      typedef typename _Key_alloc_type::const_pointer const_pointer;
+      typedef typename _Key_alloc_type::reference reference;
+      typedef typename _Key_alloc_type::const_reference const_reference;
+      typedef typename _Rep_type::const_iterator iterator;
+      typedef typename _Rep_type::const_iterator const_iterator;
+      typedef typename _Rep_type::const_reverse_iterator reverse_iterator;
+      typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
+      typedef typename _Rep_type::size_type size_type;
+      typedef typename _Rep_type::difference_type difference_type;
+      set()
+      : _M_t() { }
+      explicit
+      set(const _Compare& __comp,
+   const allocator_type& __a = allocator_type())
+      : _M_t(__comp, __a) { }
+      template<typename _InputIterator>
+        set(_InputIterator __first, _InputIterator __last)
+ : _M_t()
+        { _M_t._M_insert_unique(__first, __last); }
+      template<typename _InputIterator>
+        set(_InputIterator __first, _InputIterator __last,
+     const _Compare& __comp,
+     const allocator_type& __a = allocator_type())
+ : _M_t(__comp, __a)
+        { _M_t._M_insert_unique(__first, __last); }
+      set(const set& __x)
+      : _M_t(__x._M_t) { }
+      set&
+      operator=(const set& __x)
+      {
+ _M_t = __x._M_t;
+ return *this;
+      }
+      key_compare
+      key_comp() const
+      { return _M_t.key_comp(); }
+      value_compare
+      value_comp() const
+      { return _M_t.key_comp(); }
+      allocator_type
+      get_allocator() const
+      { return _M_t.get_allocator(); }
+      iterator
+      begin() const
+      { return _M_t.begin(); }
+      iterator
+      end() const
+      { return _M_t.end(); }
+      reverse_iterator
+      rbegin() const
+      { return _M_t.rbegin(); }
+      reverse_iterator
+      rend() const
+      { return _M_t.rend(); }
+      bool
+      empty() const
+      { return _M_t.empty(); }
+      size_type
+      size() const
+      { return _M_t.size(); }
+      size_type
+      max_size() const
+      { return _M_t.max_size(); }
+      void
+      swap(set& __x)
+      { _M_t.swap(__x._M_t); }
+      std::pair<iterator, bool>
+      insert(const value_type& __x)
+      {
+ std::pair<typename _Rep_type::iterator, bool> __p =
+   _M_t._M_insert_unique(__x);
+ return std::pair<iterator, bool>(__p.first, __p.second);
+      }
+      iterator
+      insert(iterator __position, const value_type& __x)
+      { return _M_t._M_insert_unique_(__position, __x); }
+      template<typename _InputIterator>
+        void
+        insert(_InputIterator __first, _InputIterator __last)
+        { _M_t._M_insert_unique(__first, __last); }
+      void
+      erase(iterator __position)
+      { _M_t.erase(__position); }
+      size_type
+      erase(const key_type& __x)
+      { return _M_t.erase(__x); }
+      void
+      erase(iterator __first, iterator __last)
+      { _M_t.erase(__first, __last); }
+      void
+      clear()
+      { _M_t.clear(); }
+      size_type
+      count(const key_type& __x) const
+      { return _M_t.find(__x) == _M_t.end() ? 0 : 1; }
+      iterator
+      find(const key_type& __x)
+      { return _M_t.find(__x); }
+      const_iterator
+      find(const key_type& __x) const
+      { return _M_t.find(__x); }
+      iterator
+      lower_bound(const key_type& __x)
+      { return _M_t.lower_bound(__x); }
+      const_iterator
+      lower_bound(const key_type& __x) const
+      { return _M_t.lower_bound(__x); }
+      iterator
+      upper_bound(const key_type& __x)
+      { return _M_t.upper_bound(__x); }
+      const_iterator
+      upper_bound(const key_type& __x) const
+      { return _M_t.upper_bound(__x); }
+      std::pair<iterator, iterator>
+      equal_range(const key_type& __x)
+      { return _M_t.equal_range(__x); }
+      std::pair<const_iterator, const_iterator>
+      equal_range(const key_type& __x) const
+      { return _M_t.equal_range(__x); }
+      template<typename _K1, typename _C1, typename _A1>
+        friend bool
+        operator==(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&);
+      template<typename _K1, typename _C1, typename _A1>
+        friend bool
+        operator<(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&);
+    };
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator==(const set<_Key, _Compare, _Alloc>& __x,
+        const set<_Key, _Compare, _Alloc>& __y)
+    { return __x._M_t == __y._M_t; }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator<(const set<_Key, _Compare, _Alloc>& __x,
+       const set<_Key, _Compare, _Alloc>& __y)
+    { return __x._M_t < __y._M_t; }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator!=(const set<_Key, _Compare, _Alloc>& __x,
+        const set<_Key, _Compare, _Alloc>& __y)
+    { return !(__x == __y); }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator>(const set<_Key, _Compare, _Alloc>& __x,
+       const set<_Key, _Compare, _Alloc>& __y)
+    { return __y < __x; }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator<=(const set<_Key, _Compare, _Alloc>& __x,
+        const set<_Key, _Compare, _Alloc>& __y)
+    { return !(__y < __x); }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator>=(const set<_Key, _Compare, _Alloc>& __x,
+        const set<_Key, _Compare, _Alloc>& __y)
+    { return !(__x < __y); }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline void
+    swap(set<_Key, _Compare, _Alloc>& __x, set<_Key, _Compare, _Alloc>& __y)
+    { __x.swap(__y); }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template <typename _Key, typename _Compare = std::less<_Key>,
+     typename _Alloc = std::allocator<_Key> >
+    class multiset
+    {
+      typedef typename _Alloc::value_type _Alloc_value_type;
+     
+     
+     
+    public:
+      typedef _Key key_type;
+      typedef _Key value_type;
+      typedef _Compare key_compare;
+      typedef _Compare value_compare;
+      typedef _Alloc allocator_type;
+    private:
+      typedef typename _Alloc::template rebind<_Key>::other _Key_alloc_type;
+      typedef _Rb_tree<key_type, value_type, _Identity<value_type>,
+         key_compare, _Key_alloc_type> _Rep_type;
+      _Rep_type _M_t;
+    public:
+      typedef typename _Key_alloc_type::pointer pointer;
+      typedef typename _Key_alloc_type::const_pointer const_pointer;
+      typedef typename _Key_alloc_type::reference reference;
+      typedef typename _Key_alloc_type::const_reference const_reference;
+      typedef typename _Rep_type::const_iterator iterator;
+      typedef typename _Rep_type::const_iterator const_iterator;
+      typedef typename _Rep_type::const_reverse_iterator reverse_iterator;
+      typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
+      typedef typename _Rep_type::size_type size_type;
+      typedef typename _Rep_type::difference_type difference_type;
+      multiset()
+      : _M_t() { }
+      explicit
+      multiset(const _Compare& __comp,
+        const allocator_type& __a = allocator_type())
+      : _M_t(__comp, __a) { }
+      template<typename _InputIterator>
+        multiset(_InputIterator __first, _InputIterator __last)
+ : _M_t()
+        { _M_t._M_insert_equal(__first, __last); }
+      template<typename _InputIterator>
+        multiset(_InputIterator __first, _InputIterator __last,
+   const _Compare& __comp,
+   const allocator_type& __a = allocator_type())
+ : _M_t(__comp, __a)
+        { _M_t._M_insert_equal(__first, __last); }
+      multiset(const multiset& __x)
+      : _M_t(__x._M_t) { }
+      multiset&
+      operator=(const multiset& __x)
+      {
+ _M_t = __x._M_t;
+ return *this;
+      }
+      key_compare
+      key_comp() const
+      { return _M_t.key_comp(); }
+      value_compare
+      value_comp() const
+      { return _M_t.key_comp(); }
+      allocator_type
+      get_allocator() const
+      { return _M_t.get_allocator(); }
+      iterator
+      begin() const
+      { return _M_t.begin(); }
+      iterator
+      end() const
+      { return _M_t.end(); }
+      reverse_iterator
+      rbegin() const
+      { return _M_t.rbegin(); }
+      reverse_iterator
+      rend() const
+      { return _M_t.rend(); }
+      bool
+      empty() const
+      { return _M_t.empty(); }
+      size_type
+      size() const
+      { return _M_t.size(); }
+      size_type
+      max_size() const
+      { return _M_t.max_size(); }
+      void
+      swap(multiset& __x)
+      { _M_t.swap(__x._M_t); }
+      iterator
+      insert(const value_type& __x)
+      { return _M_t._M_insert_equal(__x); }
+      iterator
+      insert(iterator __position, const value_type& __x)
+      { return _M_t._M_insert_equal_(__position, __x); }
+      template<typename _InputIterator>
+        void
+        insert(_InputIterator __first, _InputIterator __last)
+        { _M_t._M_insert_equal(__first, __last); }
+      void
+      erase(iterator __position)
+      { _M_t.erase(__position); }
+      size_type
+      erase(const key_type& __x)
+      { return _M_t.erase(__x); }
+      void
+      erase(iterator __first, iterator __last)
+      { _M_t.erase(__first, __last); }
+      void
+      clear()
+      { _M_t.clear(); }
+      size_type
+      count(const key_type& __x) const
+      { return _M_t.count(__x); }
+      iterator
+      find(const key_type& __x)
+      { return _M_t.find(__x); }
+      const_iterator
+      find(const key_type& __x) const
+      { return _M_t.find(__x); }
+      iterator
+      lower_bound(const key_type& __x)
+      { return _M_t.lower_bound(__x); }
+      const_iterator
+      lower_bound(const key_type& __x) const
+      { return _M_t.lower_bound(__x); }
+      iterator
+      upper_bound(const key_type& __x)
+      { return _M_t.upper_bound(__x); }
+      const_iterator
+      upper_bound(const key_type& __x) const
+      { return _M_t.upper_bound(__x); }
+      std::pair<iterator, iterator>
+      equal_range(const key_type& __x)
+      { return _M_t.equal_range(__x); }
+      std::pair<const_iterator, const_iterator>
+      equal_range(const key_type& __x) const
+      { return _M_t.equal_range(__x); }
+      template<typename _K1, typename _C1, typename _A1>
+        friend bool
+        operator==(const multiset<_K1, _C1, _A1>&,
+     const multiset<_K1, _C1, _A1>&);
+      template<typename _K1, typename _C1, typename _A1>
+        friend bool
+        operator< (const multiset<_K1, _C1, _A1>&,
+     const multiset<_K1, _C1, _A1>&);
+    };
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator==(const multiset<_Key, _Compare, _Alloc>& __x,
+        const multiset<_Key, _Compare, _Alloc>& __y)
+    { return __x._M_t == __y._M_t; }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator<(const multiset<_Key, _Compare, _Alloc>& __x,
+       const multiset<_Key, _Compare, _Alloc>& __y)
+    { return __x._M_t < __y._M_t; }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator!=(const multiset<_Key, _Compare, _Alloc>& __x,
+        const multiset<_Key, _Compare, _Alloc>& __y)
+    { return !(__x == __y); }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator>(const multiset<_Key,_Compare,_Alloc>& __x,
+       const multiset<_Key,_Compare,_Alloc>& __y)
+    { return __y < __x; }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator<=(const multiset<_Key, _Compare, _Alloc>& __x,
+        const multiset<_Key, _Compare, _Alloc>& __y)
+    { return !(__y < __x); }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline bool
+    operator>=(const multiset<_Key, _Compare, _Alloc>& __x,
+        const multiset<_Key, _Compare, _Alloc>& __y)
+    { return !(__x < __y); }
+  template<typename _Key, typename _Compare, typename _Alloc>
+    inline void
+    swap(multiset<_Key, _Compare, _Alloc>& __x,
+  multiset<_Key, _Compare, _Alloc>& __y)
+    { __x.swap(__y); }
+}
+namespace Xapian {
+class __attribute__((visibility("default"))) ExpandDecider {
+  public:
+    virtual bool operator()(const std::string &term) const = 0;
+    virtual ~ExpandDecider();
+};
+class __attribute__((visibility("default"))) ExpandDeciderAnd : public ExpandDecider {
+    const ExpandDecider &first, &second;
+  public:
+    ExpandDeciderAnd(const ExpandDecider &first_,
+       const ExpandDecider &second_)
+ : first(first_), second(second_) { }
+    ExpandDeciderAnd(const ExpandDecider *first_,
+       const ExpandDecider *second_)
+ : first(*first_), second(*second_) { }
+    virtual bool operator()(const std::string &term) const;
+};
+class __attribute__((visibility("default"))) ExpandDeciderFilterTerms : public ExpandDecider {
+    std::set<std::string> rejects;
+  public:
+    template <class Iterator>
+    ExpandDeciderFilterTerms(Iterator reject_begin, Iterator reject_end)
+ : rejects(reject_begin, reject_end) { }
+    virtual bool operator()(const std::string &term) const;
+};
+}
+namespace Xapian {
+class Document;
+class Registry;
+class __attribute__((visibility("default"))) MatchSpy {
+  private:
+    void operator=(const MatchSpy &);
+    MatchSpy(const MatchSpy &);
+  protected:
+    MatchSpy() {}
+  public:
+    virtual ~MatchSpy();
+    virtual void operator()(const Xapian::Document &doc,
+       Xapian::weight wt) = 0;
+    virtual MatchSpy * clone() const;
+    virtual std::string name() const;
+    virtual std::string serialise() const;
+    virtual MatchSpy * unserialise(const std::string & s,
+       const Registry & context) const;
+    virtual std::string serialise_results() const;
+    virtual void merge_results(const std::string & s);
+    virtual std::string get_description() const;
+};
+class __attribute__((visibility("default"))) ValueCountMatchSpy : public MatchSpy {
+  public:
+    struct Internal;
+    struct __attribute__((visibility("default"))) Internal
+     : public Xapian::Internal::RefCntBase
+    {
+ Xapian::valueno slot;
+ Xapian::doccount total;
+ std::map<std::string, Xapian::doccount> values;
+ Internal() : slot(Xapian::BAD_VALUENO), total(0) {}
+ Internal(Xapian::valueno slot_) : slot(slot_), total(0) {}
+    };
+  protected:
+    Xapian::Internal::RefCntPtr<Internal> internal;
+  public:
+    ValueCountMatchSpy() : internal() {}
+    ValueCountMatchSpy(Xapian::valueno slot_)
+     : internal(new Internal(slot_)) {}
+    size_t get_total() const {
+ return internal->total;
+    }
+    TermIterator values_begin() const;
+    TermIterator values_end() const {
+ return TermIterator(__null);
+    }
+    TermIterator top_values_begin(size_t maxvalues) const;
+    TermIterator top_values_end(size_t) const {
+ return TermIterator(__null);
+    }
+    void operator()(const Xapian::Document &doc, Xapian::weight wt);
+    virtual MatchSpy * clone() const;
+    virtual std::string name() const;
+    virtual std::string serialise() const;
+    virtual MatchSpy * unserialise(const std::string & s,
+       const Registry & context) const;
+    virtual std::string serialise_results() const;
+    virtual void merge_results(const std::string & s);
+    virtual std::string get_description() const;
+};
+}
+namespace Xapian {
+class __attribute__((visibility("default"))) PostingSource {
+    void operator=(const PostingSource &);
+    PostingSource(const PostingSource &);
+    double max_weight_;
+    void * matcher_;
+  protected:
+    PostingSource() : max_weight_(0), matcher_(__null) { }
+    void set_maxweight(Xapian::weight max_weight);
+  public:
+    void register_matcher_(void * matcher) { matcher_ = matcher; }
+    virtual ~PostingSource();
+    virtual Xapian::doccount get_termfreq_min() const = 0;
+    virtual Xapian::doccount get_termfreq_est() const = 0;
+    virtual Xapian::doccount get_termfreq_max() const = 0;
+    Xapian::weight get_maxweight() const { return max_weight_; }
+    virtual Xapian::weight get_weight() const;
+    virtual Xapian::docid get_docid() const = 0;
+    virtual void next(Xapian::weight min_wt) = 0;
+    virtual void skip_to(Xapian::docid did, Xapian::weight min_wt);
+    virtual bool check(Xapian::docid did, Xapian::weight min_wt);
+    virtual bool at_end() const = 0;
+    virtual PostingSource * clone() const;
+    virtual std::string name() const;
+    virtual std::string serialise() const;
+    virtual PostingSource * unserialise(const std::string &s) const;
+    virtual void init(const Database & db) = 0;
+    virtual std::string get_description() const;
+};
+class __attribute__((visibility("default"))) ValuePostingSource : public PostingSource {
+  protected:
+    Xapian::Database db;
+    Xapian::valueno slot;
+    Xapian::ValueIterator value_it;
+    bool started;
+    Xapian::doccount termfreq_min;
+    Xapian::doccount termfreq_est;
+    Xapian::doccount termfreq_max;
+  public:
+    ValuePostingSource(Xapian::valueno slot_);
+    Xapian::doccount get_termfreq_min() const;
+    Xapian::doccount get_termfreq_est() const;
+    Xapian::doccount get_termfreq_max() const;
+    void next(Xapian::weight min_wt);
+    void skip_to(Xapian::docid min_docid, Xapian::weight min_wt);
+    bool check(Xapian::docid min_docid, Xapian::weight min_wt);
+    bool at_end() const;
+    Xapian::docid get_docid() const;
+    void init(const Database & db_);
+};
+class __attribute__((visibility("default"))) ValueWeightPostingSource
+ : public ValuePostingSource {
+  public:
+    ValueWeightPostingSource(Xapian::valueno slot_);
+    Xapian::weight get_weight() const;
+    ValueWeightPostingSource * clone() const;
+    std::string name() const;
+    std::string serialise() const;
+    ValueWeightPostingSource * unserialise(const std::string &s) const;
+    void init(const Database & db_);
+    std::string get_description() const;
+};
+class __attribute__((visibility("default"))) DecreasingValueWeightPostingSource
+ : public Xapian::ValueWeightPostingSource {
+  protected:
+    Xapian::docid range_start;
+    Xapian::docid range_end;
+    double curr_weight;
+    bool items_at_end;
+    void skip_if_in_range(Xapian::weight min_wt);
+  public:
+    DecreasingValueWeightPostingSource(Xapian::valueno slot_,
+           Xapian::docid range_start_ = 0,
+           Xapian::docid range_end_ = 0);
+    Xapian::weight get_weight() const;
+    DecreasingValueWeightPostingSource * clone() const;
+    std::string name() const;
+    std::string serialise() const;
+    DecreasingValueWeightPostingSource * unserialise(const std::string &s) const;
+    void init(const Xapian::Database & db_);
+    void next(Xapian::weight min_wt);
+    void skip_to(Xapian::docid min_docid, Xapian::weight min_wt);
+    bool check(Xapian::docid min_docid, Xapian::weight min_wt);
+    std::string get_description() const;
+};
+class __attribute__((visibility("default"))) ValueMapPostingSource
+ : public ValuePostingSource {
+    double default_weight;
+    double max_weight_in_map;
+    std::map<std::string, double> weight_map;
+  public:
+    ValueMapPostingSource(Xapian::valueno slot_);
+    void add_mapping(const std::string &key, double weight);
+    void clear_mappings();
+    void set_default_weight(double wt);
+    Xapian::weight get_weight() const;
+    ValueMapPostingSource * clone() const;
+    std::string name() const;
+    std::string serialise() const;
+    ValueMapPostingSource * unserialise(const std::string &s) const;
+    void init(const Database & db_);
+    std::string get_description() const;
+};
+class __attribute__((visibility("default"))) FixedWeightPostingSource : public PostingSource {
+    Xapian::Database db;
+    Xapian::doccount termfreq;
+    Xapian::PostingIterator it;
+    bool started;
+    Xapian::docid check_docid;
+  public:
+    FixedWeightPostingSource(Xapian::weight wt);
+    Xapian::doccount get_termfreq_min() const;
+    Xapian::doccount get_termfreq_est() const;
+    Xapian::doccount get_termfreq_max() const;
+    Xapian::weight get_weight() const;
+    void next(Xapian::weight min_wt);
+    void skip_to(Xapian::docid min_docid, Xapian::weight min_wt);
+    bool check(Xapian::docid min_docid, Xapian::weight min_wt);
+    bool at_end() const;
+    Xapian::docid get_docid() const;
+    FixedWeightPostingSource * clone() const;
+    std::string name() const;
+    std::string serialise() const;
+    FixedWeightPostingSource * unserialise(const std::string &s) const;
+    void init(const Database & db_);
+    std::string get_description() const;
+};
+}
+class LocalSubMatch;
+class MultiMatch;
+class QueryOptimiser;
+struct SortPosName;
+namespace Xapian {
+class PostingSource;
+class Registry;
+class __attribute__((visibility("default"))) Query {
+    public:
+ class Internal;
+ Xapian::Internal::RefCntPtr<Internal> internal;
+        typedef enum {
+     OP_AND,
+     OP_OR,
+     OP_AND_NOT,
+     OP_XOR,
+     OP_AND_MAYBE,
+     OP_FILTER,
+     OP_NEAR,
+     OP_PHRASE,
+     OP_VALUE_RANGE,
+     OP_SCALE_WEIGHT,
+     OP_ELITE_SET,
+     OP_VALUE_GE,
+     OP_VALUE_LE,
+     OP_SYNONYM
+ } op;
+ Query(const Query & copyme);
+ Query & operator=(const Query & copyme);
+ Query();
+ ~Query();
+ Query(const std::string & tname_, Xapian::termcount wqf_ = 1,
+       Xapian::termpos pos_ = 0);
+ Query(Query::op op_, const Query & left, const Query & right);
+ Query(Query::op op_,
+       const std::string & left, const std::string & right);
+ template <class Iterator>
+ Query(Query::op op_, Iterator qbegin, Iterator qend,
+       Xapian::termcount parameter = 0);
+ Query(Query::op op_, Xapian::Query q, double parameter);
+ Query(Query::op op_, Xapian::valueno valno,
+       const std::string &begin, const std::string &end);
+ Query(Query::op op_, Xapian::valueno valno, const std::string &value);
+ explicit Query(Xapian::PostingSource * external_source);
+ static const Xapian::Query MatchAll;
+ static const Xapian::Query MatchNothing;
+ Xapian::termcount get_length() const;
+ TermIterator get_terms_begin() const;
+ TermIterator get_terms_end() const {
+     return TermIterator(__null);
+ }
+ bool empty() const;
+ std::string serialise() const;
+ static Query unserialise(const std::string &s);
+ static Query unserialise(const std::string & s,
+     const Registry & registry);
+ std::string get_description() const;
+    private:
+ void add_subquery(const Query & subq);
+ void add_subquery(const Query * subq);
+ void add_subquery(const std::string & tname);
+ void start_construction(Query::op op_, Xapian::termcount parameter);
+ void end_construction();
+ void abort_construction();
+};
+template <class Iterator>
+Query::Query(Query::op op_, Iterator qbegin, Iterator qend, termcount parameter)
+    : internal(0)
+{
+    try {
+ start_construction(op_, parameter);
+ while (qbegin != qend) {
+     add_subquery(*qbegin);
+     ++qbegin;
+ }
+ end_construction();
+    } catch (...) {
+ abort_construction();
+ throw;
+    }
+}
+class __attribute__((visibility("default"))) Query::Internal : public Xapian::Internal::RefCntBase {
+    friend class ::LocalSubMatch;
+    friend class ::MultiMatch;
+    friend class ::QueryOptimiser;
+    friend struct ::SortPosName;
+    friend class Query;
+    public:
+        static const int OP_LEAF = -1;
+        static const int OP_EXTERNAL_SOURCE = -2;
+ typedef std::vector<Internal *> subquery_list;
+ typedef int op_t;
+    private:
+ Xapian::Query::Internal::op_t op;
+ subquery_list subqs;
+ Xapian::termcount parameter;
+ std::string tname;
+ std::string str_parameter;
+ Xapian::termpos term_pos;
+ Xapian::PostingSource * external_source;
+ bool external_source_owned;
+ void initialise_from_copy(const Query::Internal & copyme);
+        void accumulate_terms(
+     std::vector<std::pair<std::string, Xapian::termpos> > &terms) const;
+ Internal * simplify_query();
+ void validate_query() const;
+ bool simplify_matchnothing();
+ static std::string get_op_name(Xapian::Query::Internal::op_t op);
+ void collapse_subqs();
+ Xapian::Query::Internal * flatten_subqs();
+ std::string serialise(Xapian::termpos & curpos) const;
+    public:
+ Internal(const Query::Internal & copyme);
+ void operator=(const Query::Internal & copyme);
+ explicit Internal(const std::string & tname_, Xapian::termcount wqf_ = 1,
+     Xapian::termpos term_pos_ = 0);
+ Internal(op_t op_, Xapian::termcount parameter);
+ Internal(op_t op_, Xapian::valueno valno,
+   const std::string &begin, const std::string &end);
+ Internal(op_t op_, Xapian::valueno valno, const std::string &value);
+ explicit Internal(Xapian::PostingSource * external_source_, bool owned);
+ ~Internal();
+ static Xapian::Query::Internal * unserialise(const std::string &s,
+           const Registry & registry);
+ void add_subquery(const Query::Internal * subq);
+ void add_subquery_nocopy(Query::Internal * subq);
+ void set_dbl_parameter(double dbl_parameter_);
+ double get_dbl_parameter() const;
+ Query::Internal * end_construction();
+ std::string serialise() const {
+            Xapian::termpos curpos = 1;
+            return serialise(curpos);
+        }
+ std::string get_description() const;
+ Xapian::termcount get_parameter() const { return parameter; }
+ Xapian::termcount get_wqf() const { return parameter; }
+ Xapian::termcount get_length() const;
+ TermIterator get_terms() const;
+};
+}
+namespace Xapian {
+class Database;
+class Stem;
+class __attribute__((visibility("default"))) Stopper {
+  public:
+    virtual bool operator()(const std::string & term) const = 0;
+    virtual ~Stopper() { }
+    virtual std::string get_description() const;
+};
+class __attribute__((visibility("default"))) SimpleStopper : public Stopper {
+    std::set<std::string> stop_words;
+  public:
+    SimpleStopper() { }
+    template <class Iterator>
+    SimpleStopper(Iterator begin, Iterator end) : stop_words(begin, end) { }
+    void add(const std::string & word) { stop_words.insert(word); }
+    virtual bool operator()(const std::string & term) const {
+ return stop_words.find(term) != stop_words.end();
+    }
+    virtual std::string get_description() const;
+};
+struct __attribute__((visibility("default"))) ValueRangeProcessor {
+    virtual ~ValueRangeProcessor();
+    virtual Xapian::valueno operator()(std::string &begin, std::string &end) = 0;
+};
+class __attribute__((visibility("default"))) StringValueRangeProcessor : public ValueRangeProcessor {
+  protected:
+    Xapian::valueno valno;
+  private:
+    bool prefix;
+    std::string str;
+  public:
+    StringValueRangeProcessor(Xapian::valueno valno_)
+ : valno(valno_), str() { }
+    StringValueRangeProcessor(Xapian::valueno valno_, const std::string &str_,
+         bool prefix_ = true)
+ : valno(valno_), prefix(prefix_), str(str_) { }
+    Xapian::valueno operator()(std::string &, std::string &);
+};
+class __attribute__((visibility("default"))) DateValueRangeProcessor : public StringValueRangeProcessor {
+    bool prefer_mdy;
+    int epoch_year;
+  public:
+    DateValueRangeProcessor(Xapian::valueno valno_, bool prefer_mdy_ = false,
+       int epoch_year_ = 1970)
+ : StringValueRangeProcessor(valno_),
+   prefer_mdy(prefer_mdy_), epoch_year(epoch_year_) { }
+    DateValueRangeProcessor(Xapian::valueno valno_, const std::string &str_,
+       bool prefix_ = true,
+       bool prefer_mdy_ = false, int epoch_year_ = 1970)
+ : StringValueRangeProcessor(valno_, str_, prefix_),
+   prefer_mdy(prefer_mdy_), epoch_year(epoch_year_) { }
+    Xapian::valueno operator()(std::string &begin, std::string &end);
+};
+class __attribute__((visibility("default"))) NumberValueRangeProcessor : public StringValueRangeProcessor {
+  public:
+    NumberValueRangeProcessor(Xapian::valueno valno_)
+ : StringValueRangeProcessor(valno_) { }
+    NumberValueRangeProcessor(Xapian::valueno valno_, const std::string &str_,
+         bool prefix_ = true)
+ : StringValueRangeProcessor(valno_, str_, prefix_) { }
+    Xapian::valueno operator()(std::string &begin, std::string &end);
+};
+class __attribute__((visibility("default"))) QueryParser {
+  public:
+    class Internal;
+    Xapian::Internal::RefCntPtr<Internal> internal;
+    typedef enum {
+ FLAG_BOOLEAN = 1,
+ FLAG_PHRASE = 2,
+ FLAG_LOVEHATE = 4,
+ FLAG_BOOLEAN_ANY_CASE = 8,
+ FLAG_WILDCARD = 16,
+ FLAG_PURE_NOT = 32,
+ FLAG_PARTIAL = 64,
+ FLAG_SPELLING_CORRECTION = 128,
+ FLAG_SYNONYM = 256,
+ FLAG_AUTO_SYNONYMS = 512,
+ FLAG_AUTO_MULTIWORD_SYNONYMS = 1024 | FLAG_AUTO_SYNONYMS,
+ FLAG_DEFAULT = FLAG_PHRASE|FLAG_BOOLEAN|FLAG_LOVEHATE
+    } feature_flag;
+    typedef enum { STEM_NONE, STEM_SOME, STEM_ALL } stem_strategy;
+    QueryParser(const QueryParser & o);
+    QueryParser & operator=(const QueryParser & o);
+    QueryParser();
+    ~QueryParser();
+    void set_stemmer(const Xapian::Stem & stemmer);
+    void set_stemming_strategy(stem_strategy strategy);
+    void set_stopper(const Stopper *stop = __null);
+    void set_default_op(Query::op default_op);
+    Query::op get_default_op() const;
+    void set_database(const Database &db);
+    Query parse_query(const std::string &query_string,
+        unsigned flags = FLAG_DEFAULT,
+        const std::string &default_prefix = std::string());
+    void add_prefix(const std::string &field, const std::string &prefix);
+    void add_boolean_prefix(const std::string &field, const std::string &prefix,
+       bool exclusive);
+    void add_boolean_prefix(const std::string &field, const std::string &prefix);
+    TermIterator stoplist_begin() const;
+    TermIterator stoplist_end() const {
+ return TermIterator(__null);
+    }
+    TermIterator unstem_begin(const std::string &term) const;
+    TermIterator unstem_end(const std::string &) const {
+ return TermIterator(__null);
+    }
+    void add_valuerangeprocessor(Xapian::ValueRangeProcessor * vrproc);
+    std::string get_corrected_query_string() const;
+    std::string get_description() const;
+};
+__attribute__((visibility("default")))
+std::string sortable_serialise(double value);
+__attribute__((visibility("default")))
+double sortable_unserialise(const std::string & value);
+}
+namespace Xapian {
+class Document;
+class __attribute__((visibility("default"))) ValueSetMatchDecider : public MatchDecider {
+    std::set<std::string> testset;
+    valueno valuenum;
+    bool inclusive;
+  public:
+    ValueSetMatchDecider(Xapian::valueno slot, bool inclusive_)
+ : valuenum(slot), inclusive(inclusive_) { }
+    void add_value(const std::string& value)
+    {
+ testset.insert(value);
+    }
+    void remove_value(const std::string& value)
+    {
+ testset.erase(value);
+    }
+    bool operator()(const Xapian::Document& doc) const;
+};
+}
+namespace Xapian {
+class __attribute__((visibility("default"))) Weight {
+  protected:
+    typedef enum {
+ COLLECTION_SIZE = 1,
+ RSET_SIZE = 2,
+ AVERAGE_LENGTH = 4,
+ TERMFREQ = 8,
+ RELTERMFREQ = 16,
+ QUERY_LENGTH = 32,
+ WQF = 64,
+ WDF = 128,
+ DOC_LENGTH = 256,
+ DOC_LENGTH_MIN = 512,
+ DOC_LENGTH_MAX = 1024,
+ WDF_MAX = 2048
+    } stat_flags;
+    void need_stat(stat_flags flag) {
+ stats_needed = stat_flags(stats_needed | flag);
+    }
+    virtual void init(double factor) = 0;
+  private:
+    void operator=(const Weight &);
+    stat_flags stats_needed;
+    Xapian::doccount collection_size_;
+    Xapian::doccount rset_size_;
+    Xapian::doclength average_length_;
+    Xapian::doccount termfreq_;
+    Xapian::doccount reltermfreq_;
+    Xapian::termcount query_length_;
+    Xapian::termcount wqf_;
+    Xapian::termcount doclength_lower_bound_;
+    Xapian::termcount doclength_upper_bound_;
+    Xapian::termcount wdf_upper_bound_;
+  public:
+    class Internal;
+    virtual ~Weight();
+    virtual Weight * clone() const = 0;
+    virtual std::string name() const;
+    virtual std::string serialise() const;
+    virtual Weight * unserialise(const std::string & s) const;
+    virtual Xapian::weight get_sumpart(Xapian::termcount wdf,
+           Xapian::termcount doclen) const = 0;
+    virtual Xapian::weight get_maxpart() const = 0;
+    virtual Xapian::weight get_sumextra(Xapian::termcount doclen) const = 0;
+    virtual Xapian::weight get_maxextra() const = 0;
+    void init_(const Internal & stats, Xapian::termcount query_len_,
+        const std::string & term, Xapian::termcount wqf_,
+        double factor);
+    void init_(const Internal & stats, Xapian::termcount query_len_,
+        double factor, Xapian::doccount termfreq,
+        Xapian::doccount reltermfreq);
+    void init_(const Internal & stats, Xapian::termcount query_len_);
+    bool get_sumpart_needs_doclength_() const {
+ return stats_needed & DOC_LENGTH;
+    }
+    bool get_sumpart_needs_wdf_() const {
+ return stats_needed & WDF;
+    }
+  protected:
+    Weight(const Weight &);
+    Weight() : stats_needed() { }
+    Xapian::doccount get_collection_size() const { return collection_size_; }
+    Xapian::doccount get_rset_size() const { return rset_size_; }
+    Xapian::doclength get_average_length() const { return average_length_; }
+    Xapian::doccount get_termfreq() const { return termfreq_; }
+    Xapian::doccount get_reltermfreq() const { return reltermfreq_; }
+    Xapian::termcount get_query_length() const { return query_length_; }
+    Xapian::termcount get_wqf() const { return wqf_; }
+    Xapian::termcount get_doclength_upper_bound() const {
+ return doclength_upper_bound_;
+    }
+    Xapian::termcount get_doclength_lower_bound() const {
+ return doclength_lower_bound_;
+    }
+    Xapian::termcount get_wdf_upper_bound() const {
+ return wdf_upper_bound_;
+    }
+};
+class __attribute__((visibility("default"))) BoolWeight : public Weight {
+    BoolWeight * clone() const;
+    void init(double factor);
+  public:
+    BoolWeight() { }
+    std::string name() const;
+    std::string serialise() const;
+    BoolWeight * unserialise(const std::string & s) const;
+    Xapian::weight get_sumpart(Xapian::termcount wdf,
+          Xapian::termcount doclen) const;
+    Xapian::weight get_maxpart() const;
+    Xapian::weight get_sumextra(Xapian::termcount doclen) const;
+    Xapian::weight get_maxextra() const;
+};
+class __attribute__((visibility("default"))) BM25Weight : public Weight {
+    mutable Xapian::doclength len_factor;
+    mutable Xapian::weight termweight;
+    double param_k1, param_k2, param_k3, param_b;
+    Xapian::doclength param_min_normlen;
+    BM25Weight * clone() const;
+    void init(double factor);
+  public:
+    BM25Weight(double k1, double k2, double k3, double b, double min_normlen)
+ : param_k1(k1), param_k2(k2), param_k3(k3), param_b(b),
+   param_min_normlen(min_normlen)
+    {
+ if (param_k1 < 0) param_k1 = 0;
+ if (param_k2 < 0) param_k2 = 0;
+ if (param_k3 < 0) param_k3 = 0;
+ if (param_b < 0) {
+     param_b = 0;
+ } else if (param_b > 1) {
+     param_b = 1;
+ }
+ need_stat(COLLECTION_SIZE);
+ need_stat(RSET_SIZE);
+ need_stat(TERMFREQ);
+ need_stat(RELTERMFREQ);
+ need_stat(WDF);
+ need_stat(WDF_MAX);
+ need_stat(WDF);
+ if (param_k2 != 0 || (param_k1 != 0 && param_b != 0)) {
+     need_stat(DOC_LENGTH_MIN);
+     need_stat(AVERAGE_LENGTH);
+ }
+ if (param_k1 != 0 && param_b != 0) need_stat(DOC_LENGTH);
+ if (param_k2 != 0) need_stat(QUERY_LENGTH);
+ if (param_k3 != 0) need_stat(WQF);
+    }
+    BM25Weight()
+ : param_k1(1), param_k2(0), param_k3(1), param_b(0.5),
+   param_min_normlen(0.5)
+    {
+ need_stat(COLLECTION_SIZE);
+ need_stat(RSET_SIZE);
+ need_stat(TERMFREQ);
+ need_stat(RELTERMFREQ);
+ need_stat(WDF);
+ need_stat(WDF_MAX);
+ need_stat(WDF);
+ need_stat(DOC_LENGTH_MIN);
+ need_stat(AVERAGE_LENGTH);
+ need_stat(DOC_LENGTH);
+ need_stat(WQF);
+    }
+    std::string name() const;
+    std::string serialise() const;
+    BM25Weight * unserialise(const std::string & s) const;
+    Xapian::weight get_sumpart(Xapian::termcount wdf,
+          Xapian::termcount doclen) const;
+    Xapian::weight get_maxpart() const;
+    Xapian::weight get_sumextra(Xapian::termcount doclen) const;
+    Xapian::weight get_maxextra() const;
+};
+class __attribute__((visibility("default"))) TradWeight : public Weight {
+    mutable Xapian::doclength len_factor;
+    mutable Xapian::weight termweight;
+    double param_k;
+    TradWeight * clone() const;
+    void init(double factor);
+  public:
+    explicit TradWeight(double k = 1.0) : param_k(k) {
+ if (param_k < 0) param_k = 0;
+ if (param_k != 0.0) {
+     need_stat(AVERAGE_LENGTH);
+     need_stat(DOC_LENGTH);
+ }
+ need_stat(COLLECTION_SIZE);
+ need_stat(RSET_SIZE);
+ need_stat(TERMFREQ);
+ need_stat(RELTERMFREQ);
+ need_stat(DOC_LENGTH_MIN);
+ need_stat(WDF);
+ need_stat(WDF_MAX);
+ need_stat(WDF);
+    }
+    std::string name() const;
+    std::string serialise() const;
+    TradWeight * unserialise(const std::string & s) const;
+    Xapian::weight get_sumpart(Xapian::termcount wdf,
+          Xapian::termcount doclen) const;
+    Xapian::weight get_maxpart() const;
+    Xapian::weight get_sumextra(Xapian::termcount doclen) const;
+    Xapian::weight get_maxextra() const;
+};
+}
+namespace Xapian {
+struct __attribute__((visibility("default"))) StemImplementation
+    : public Xapian::Internal::RefCntBase
+{
+    virtual ~StemImplementation();
+    virtual std::string operator()(const std::string & word) = 0;
+    virtual std::string get_description() const = 0;
+};
+class __attribute__((visibility("default"))) Stem {
+  public:
+    Xapian::Internal::RefCntPtr<StemImplementation> internal;
+    Stem(const Stem & o);
+    void operator=(const Stem & o);
+    Stem();
+    explicit Stem(const std::string &language);
+    explicit Stem(StemImplementation * p);
+    ~Stem();
+    std::string operator()(const std::string &word) const;
+    std::string get_description() const;
+    static std::string get_available_languages();
+};
+}
+namespace Xapian {
+class MatchSpy;
+class PostingSource;
+class Weight;
+class __attribute__((visibility("default"))) Registry {
+  public:
+    class Internal;
+  private:
+    Xapian::Internal::RefCntPtr<Internal> internal;
+  public:
+    Registry(const Registry & other);
+    Registry & operator=(const Registry & other);
+    Registry();
+    ~Registry();
+    void register_weighting_scheme(const Xapian::Weight &wt);
+    const Xapian::Weight *
+     get_weighting_scheme(const std::string & name) const;
+    void register_posting_source(const Xapian::PostingSource &source);
+    const Xapian::PostingSource *
+     get_posting_source(const std::string & name) const;
+    void register_match_spy(const Xapian::MatchSpy &spy);
+    const Xapian::MatchSpy *
+     get_match_spy(const std::string & name) const;
+};
+}
+namespace Xapian {
+class __attribute__((visibility("default"))) Compactor {
+  public:
+    class Internal;
+    typedef enum { STANDARD, FULL, FULLER } compaction_level;
+  private:
+    Xapian::Internal::RefCntPtr<Internal> internal;
+  public:
+    Compactor();
+    virtual ~Compactor();
+    void set_block_size(size_t block_size);
+    void set_renumber(bool renumber);
+    void set_multipass(bool multipass);
+    void set_compaction_level(compaction_level compaction);
+    void set_destdir(const std::string & destdir);
+    void add_source(const std::string & srcdir);
+    void compact();
+    virtual void
+    set_status(const std::string & table, const std::string & status);
+    virtual std::string
+    resolve_duplicate_metadata(const std::string & key,
+          size_t num_tags, const std::string tags[]);
+};
+}
+namespace Xapian {
+__attribute__((visibility("default")))
+const char * version_string();
+__attribute__((visibility("default")))
+int major_version();
+__attribute__((visibility("default")))
+int minor_version();
+__attribute__((visibility("default")))
+int revision();
+}
+using namespace std;
+namespace Xapian {
+}
+namespace swig {
+  struct stop_iteration {
+  };
+  struct SwigPyIterator {
+  private:
+    SwigPtr_PyObject _seq;
+  protected:
+    SwigPyIterator(PyObject *seq) : _seq(seq)
+    {
+    }
+  public:
+    virtual ~SwigPyIterator() {}
+    virtual PyObject *value() const = 0;
+    virtual SwigPyIterator *incr(size_t n = 1) = 0;
+    virtual SwigPyIterator *decr(size_t = 1)
+    {
+      throw stop_iteration();
+    }
+    virtual ptrdiff_t distance(const SwigPyIterator & ) const
+    {
+      throw std::invalid_argument("operation not supported");
+    }
+    virtual bool equal (const SwigPyIterator & ) const
+    {
+      throw std::invalid_argument("operation not supported");
+    }
+    virtual SwigPyIterator *copy() const = 0;
+    PyObject *next()
+    {
+      SWIG_Python_Thread_Block _swig_thread_block;
+      PyObject *obj = value();
+      incr();
+      _swig_thread_block.end();
+      return obj;
+    }
+    PyObject *__next__()
+    {
+      return next();
+    }
+    PyObject *previous()
+    {
+      SWIG_Python_Thread_Block _swig_thread_block;
+      decr();
+      PyObject *obj = value();
+      _swig_thread_block.end();
+      return obj;
+    }
+    SwigPyIterator *advance(ptrdiff_t n)
+    {
+      return (n > 0) ? incr(n) : decr(-n);
+    }
+    bool operator == (const SwigPyIterator& x) const
+    {
+      return equal(x);
+    }
+    bool operator != (const SwigPyIterator& x) const
+    {
+      return ! operator==(x);
+    }
+    SwigPyIterator& operator += (ptrdiff_t n)
+    {
+      return *advance(n);
+    }
+    SwigPyIterator& operator -= (ptrdiff_t n)
+    {
+      return *advance(-n);
+    }
+    SwigPyIterator* operator + (ptrdiff_t n) const
+    {
+      return copy()->advance(n);
+    }
+    SwigPyIterator* operator - (ptrdiff_t n) const
+    {
+      return copy()->advance(-n);
+    }
+    ptrdiff_t operator - (const SwigPyIterator& x) const
+    {
+      return x.distance(*this);
+    }
+    static swig_type_info* descriptor() {
+      static int init = 0;
+      static swig_type_info* desc = 0;
+      if (!init) {
+ desc = SWIG_Python_TypeQuery("swig::SwigPyIterator *");
+ init = 1;
+      }
+      return desc;
+    }
+  };
+}
+static __attribute__ ((__unused__)) int
+SWIG_AsVal_double (PyObject *obj, double *val)
+{
+  int res = -5;
+  if (((((PyObject*)(obj))->ob_type) == (&PyFloat_Type) || PyType_IsSubtype((((PyObject*)(obj))->ob_type), (&PyFloat_Type)))) {
+    if (val) *val = PyFloat_AsDouble(obj);
+    return (0);
+  } else if (((((obj)->ob_type)->tp_flags & ((1L<<23))) != 0)) {
+    if (val) *val = PyInt_AsLong(obj);
+    return (0);
+  } else if (((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<24))) != 0)) {
+    double v = PyLong_AsDouble(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return (0);
+    } else {
+      PyErr_Clear();
+    }
+  }
+  return res;
+}
+static __attribute__ ((__unused__)) inline int
+SWIG_CanCastAsInteger(double *d, double min, double max) {
+  double x = *d;
+  if ((min <= x && x <= max)) {
+   double fx = floor(x);
+   double cx = ceil(x);
+   double rd = ((x - fx) < 0.5) ? fx : cx;
+   if (((*__errno_location ()) == 33) || ((*__errno_location ()) == 34)) {
+     (*__errno_location ()) = 0;
+   } else {
+     double summ, reps, diff;
+     if (rd < x) {
+       diff = x - rd;
+     } else if (rd > x) {
+       diff = rd - x;
+     } else {
+       return 1;
+     }
+     summ = rd + x;
+     reps = diff/summ;
+     if (reps < 8*2.2204460492503131e-16) {
+       *d = rd;
+       return 1;
+     }
+   }
+  }
+  return 0;
+}
+static __attribute__ ((__unused__)) int
+SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
+{
+  if (((((obj)->ob_type)->tp_flags & ((1L<<23))) != 0)) {
+    long v = PyInt_AsLong(obj);
+    if (v >= 0) {
+      if (val) *val = v;
+      return (0);
+    } else {
+      return -7;
+    }
+  } else if (((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<24))) != 0)) {
+    unsigned long v = PyLong_AsUnsignedLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return (0);
+    } else {
+      PyErr_Clear();
+    }
+  }
+  return -5;
+}
+static __attribute__ ((__unused__)) inline int
+SWIG_AsVal_size_t (PyObject * obj, size_t *val)
+{
+  unsigned long v;
+  int res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0);
+  if ((res >= 0) && val) *val = static_cast< size_t >(v);
+  return res;
+}
+static __attribute__ ((__unused__)) inline PyObject *
+SWIG_From_ptrdiff_t (ptrdiff_t value)
+{
+  return PyInt_FromLong (static_cast< long >(value));
+}
+static __attribute__ ((__unused__)) inline PyObject*
+  SWIG_From_bool (bool value)
+{
+  return PyBool_FromLong(value ? 1 : 0);
+}
+static __attribute__ ((__unused__)) int
+SWIG_AsVal_long (PyObject *obj, long* val)
+{
+  if (((((obj)->ob_type)->tp_flags & ((1L<<23))) != 0)) {
+    if (val) *val = PyInt_AsLong(obj);
+    return (0);
+  } else if (((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<24))) != 0)) {
+    long v = PyLong_AsLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return (0);
+    } else {
+      PyErr_Clear();
+    }
+  }
+  return -5;
+}
+static __attribute__ ((__unused__)) inline int
+SWIG_AsVal_ptrdiff_t (PyObject * obj, ptrdiff_t *val)
+{
+  long v;
+  int res = SWIG_AsVal_long (obj, val ? &v : 0);
+  if ((res >= 0) && val) *val = static_cast< ptrdiff_t >(v);
+  return res;
+}
+       
+       
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  using ::div_t;
+  using ::ldiv_t;
+  using ::abort;
+  using ::abs;
+  using ::atexit;
+  using ::atof;
+  using ::atoi;
+  using ::atol;
+  using ::bsearch;
+  using ::calloc;
+  using ::div;
+  using ::exit;
+  using ::free;
+  using ::getenv;
+  using ::labs;
+  using ::ldiv;
+  using ::malloc;
+  using ::mblen;
+  using ::mbstowcs;
+  using ::mbtowc;
+  using ::qsort;
+  using ::rand;
+  using ::realloc;
+  using ::srand;
+  using ::strtod;
+  using ::strtol;
+  using ::strtoul;
+  using ::system;
+  using ::wcstombs;
+  using ::wctomb;
+  inline long
+  abs(long __i) { return labs(__i); }
+  inline ldiv_t
+  div(long __i, long __j) { return ldiv(__i, __j); }
+}
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+  using ::lldiv_t;
+  using ::_Exit;
+  inline long long
+  abs(long long __x) { return __x >= 0 ? __x : -__x; }
+  using ::llabs;
+  inline lldiv_t
+  div(long long __n, long long __d)
+  { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
+  using ::lldiv;
+  using ::atoll;
+  using ::strtoll;
+  using ::strtoull;
+  using ::strtof;
+  using ::strtold;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  using ::__gnu_cxx::lldiv_t;
+  using ::__gnu_cxx::_Exit;
+  using ::__gnu_cxx::abs;
+  using ::__gnu_cxx::llabs;
+  using ::__gnu_cxx::div;
+  using ::__gnu_cxx::lldiv;
+  using ::__gnu_cxx::atoll;
+  using ::__gnu_cxx::strtof;
+  using ::__gnu_cxx::strtoll;
+  using ::__gnu_cxx::strtoull;
+  using ::__gnu_cxx::strtold;
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _FIter, typename _Tp>
+    bool
+    binary_search(_FIter, _FIter, const _Tp&);
+  template<typename _FIter, typename _Tp, typename _Compare>
+    bool
+    binary_search(_FIter, _FIter, const _Tp&, _Compare);
+  template<typename _IIter, typename _OIter>
+    _OIter
+    copy(_IIter, _IIter, _OIter);
+  template<typename _BIter1, typename _BIter2>
+    _BIter2
+    copy_backward(_BIter1, _BIter1, _BIter2);
+  template<typename _FIter, typename _Tp>
+    pair<_FIter, _FIter>
+    equal_range(_FIter, _FIter, const _Tp&);
+  template<typename _FIter, typename _Tp, typename _Compare>
+    pair<_FIter, _FIter>
+    equal_range(_FIter, _FIter, const _Tp&, _Compare);
+  template<typename _FIter, typename _Tp>
+    void
+    fill(_FIter, _FIter, const _Tp&);
+  template<typename _OIter, typename _Size, typename _Tp>
+    _OIter
+    fill_n(_OIter, _Size, const _Tp&);
+  template<typename _FIter1, typename _FIter2>
+    _FIter1
+    find_end(_FIter1, _FIter1, _FIter2, _FIter2);
+  template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
+    _FIter1
+    find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
+  template<typename _IIter1, typename _IIter2>
+    bool
+    includes(_IIter1, _IIter1, _IIter2, _IIter2);
+  template<typename _IIter1, typename _IIter2, typename _Compare>
+    bool
+    includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
+  template<typename _BIter>
+    void
+    inplace_merge(_BIter, _BIter, _BIter);
+  template<typename _BIter, typename _Compare>
+    void
+    inplace_merge(_BIter, _BIter, _BIter, _Compare);
+  template<typename _FIter1, typename _FIter2>
+    void
+    iter_swap(_FIter1, _FIter2);
+  template<typename _FIter, typename _Tp>
+    _FIter
+    lower_bound(_FIter, _FIter, const _Tp&);
+  template<typename _FIter, typename _Tp, typename _Compare>
+    _FIter
+    lower_bound(_FIter, _FIter, const _Tp&, _Compare);
+  template<typename _RAIter>
+    void
+    make_heap(_RAIter, _RAIter);
+  template<typename _RAIter, typename _Compare>
+    void
+    make_heap(_RAIter, _RAIter, _Compare);
+  template<typename _Tp>
+    const _Tp&
+    max(const _Tp&, const _Tp&);
+  template<typename _Tp, typename _Compare>
+    const _Tp&
+    max(const _Tp&, const _Tp&, _Compare);
+  template<typename _Tp>
+    const _Tp&
+    min(const _Tp&, const _Tp&);
+  template<typename _Tp, typename _Compare>
+    const _Tp&
+    min(const _Tp&, const _Tp&, _Compare);
+  template<typename _BIter>
+    bool
+    next_permutation(_BIter, _BIter);
+  template<typename _BIter, typename _Compare>
+    bool
+    next_permutation(_BIter, _BIter, _Compare);
+  template<typename _IIter, typename _RAIter>
+    _RAIter
+    partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
+  template<typename _IIter, typename _RAIter, typename _Compare>
+    _RAIter
+    partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
+  template<typename _RAIter>
+    void
+    pop_heap(_RAIter, _RAIter);
+  template<typename _RAIter, typename _Compare>
+    void
+    pop_heap(_RAIter, _RAIter, _Compare);
+  template<typename _BIter>
+    bool
+    prev_permutation(_BIter, _BIter);
+  template<typename _BIter, typename _Compare>
+    bool
+    prev_permutation(_BIter, _BIter, _Compare);
+  template<typename _RAIter>
+    void
+    push_heap(_RAIter, _RAIter);
+  template<typename _RAIter, typename _Compare>
+    void
+    push_heap(_RAIter, _RAIter, _Compare);
+  template<typename _FIter, typename _Tp>
+    _FIter
+    remove(_FIter, _FIter, const _Tp&);
+  template<typename _FIter, typename _Predicate>
+    _FIter
+    remove_if(_FIter, _FIter, _Predicate);
+  template<typename _IIter, typename _OIter, typename _Tp>
+    _OIter
+    remove_copy(_IIter, _IIter, _OIter, const _Tp&);
+  template<typename _IIter, typename _OIter, typename _Predicate>
+    _OIter
+    remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
+  template<typename _IIter, typename _OIter, typename _Tp>
+    _OIter
+    replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
+  template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
+    _OIter
+    replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
+  template<typename _BIter>
+    void
+    reverse(_BIter, _BIter);
+  template<typename _BIter, typename _OIter>
+    _OIter
+    reverse_copy(_BIter, _BIter, _OIter);
+  template<typename _FIter>
+    void
+    rotate(_FIter, _FIter, _FIter);
+  template<typename _FIter, typename _OIter>
+    _OIter
+    rotate_copy(_FIter, _FIter, _FIter, _OIter);
+  template<typename _RAIter>
+    void
+    sort_heap(_RAIter, _RAIter);
+  template<typename _RAIter, typename _Compare>
+    void
+    sort_heap(_RAIter, _RAIter, _Compare);
+  template<typename _BIter, typename _Predicate>
+    _BIter
+    stable_partition(_BIter, _BIter, _Predicate);
+  template<typename _Tp>
+    void
+    swap(_Tp&, _Tp&);
+  template<typename _Tp, size_t _Nm>
+    void
+    swap(_Tp (&)[_Nm], _Tp (&)[_Nm]);
+  template<typename _FIter1, typename _FIter2>
+    _FIter2
+    swap_ranges(_FIter1, _FIter1, _FIter2);
+  template<typename _FIter>
+    _FIter
+    unique(_FIter, _FIter);
+  template<typename _FIter, typename _BinaryPredicate>
+    _FIter
+    unique(_FIter, _FIter, _BinaryPredicate);
+  template<typename _FIter, typename _Tp>
+    _FIter
+    upper_bound(_FIter, _FIter, const _Tp&);
+  template<typename _FIter, typename _Tp, typename _Compare>
+    _FIter
+    upper_bound(_FIter, _FIter, const _Tp&, _Compare);
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _FIter>
+    _FIter
+    adjacent_find(_FIter, _FIter);
+  template<typename _FIter, typename _BinaryPredicate>
+    _FIter
+    adjacent_find(_FIter, _FIter, _BinaryPredicate);
+  template<typename _IIter, typename _Tp>
+    typename iterator_traits<_IIter>::difference_type
+    count(_IIter, _IIter, const _Tp&);
+  template<typename _IIter, typename _Predicate>
+    typename iterator_traits<_IIter>::difference_type
+    count_if(_IIter, _IIter, _Predicate);
+  template<typename _IIter1, typename _IIter2>
+    bool
+    equal(_IIter1, _IIter1, _IIter2);
+  template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
+    bool
+    equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
+  template<typename _IIter, typename _Tp>
+    _IIter
+    find(_IIter, _IIter, const _Tp&);
+  template<typename _FIter1, typename _FIter2>
+    _FIter1
+    find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
+  template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
+    _FIter1
+    find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
+  template<typename _IIter, typename _Predicate>
+    _IIter
+    find_if(_IIter, _IIter, _Predicate);
+  template<typename _IIter, typename _Funct>
+    _Funct
+    for_each(_IIter, _IIter, _Funct);
+  template<typename _FIter, typename _Generator>
+    void
+    generate(_FIter, _FIter, _Generator);
+  template<typename _OIter, typename _Size, typename _Generator>
+    _OIter
+    generate_n(_OIter, _Size, _Generator);
+  template<typename _IIter1, typename _IIter2>
+    bool
+    lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
+  template<typename _IIter1, typename _IIter2, typename _Compare>
+    bool
+    lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
+  template<typename _FIter>
+    _FIter
+    max_element(_FIter, _FIter);
+  template<typename _FIter, typename _Compare>
+    _FIter
+    max_element(_FIter, _FIter, _Compare);
+  template<typename _IIter1, typename _IIter2, typename _OIter>
+    _OIter
+    merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
+  template<typename _IIter1, typename _IIter2, typename _OIter,
+    typename _Compare>
+    _OIter
+    merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
+  template<typename _FIter>
+    _FIter
+    min_element(_FIter, _FIter);
+  template<typename _FIter, typename _Compare>
+    _FIter
+    min_element(_FIter, _FIter, _Compare);
+  template<typename _IIter1, typename _IIter2>
+    pair<_IIter1, _IIter2>
+    mismatch(_IIter1, _IIter1, _IIter2);
+  template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
+    pair<_IIter1, _IIter2>
+    mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
+  template<typename _RAIter>
+    void
+    nth_element(_RAIter, _RAIter, _RAIter);
+  template<typename _RAIter, typename _Compare>
+    void
+    nth_element(_RAIter, _RAIter, _RAIter, _Compare);
+  template<typename _RAIter>
+    void
+    partial_sort(_RAIter, _RAIter, _RAIter);
+  template<typename _RAIter, typename _Compare>
+    void
+    partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
+  template<typename _BIter, typename _Predicate>
+    _BIter
+    partition(_BIter, _BIter, _Predicate);
+  template<typename _RAIter>
+    void
+    random_shuffle(_RAIter, _RAIter);
+  template<typename _RAIter, typename _Generator>
+    void
+    random_shuffle(_RAIter, _RAIter, _Generator&);
+  template<typename _FIter, typename _Tp>
+    void
+    replace(_FIter, _FIter, const _Tp&, const _Tp&);
+  template<typename _FIter, typename _Predicate, typename _Tp>
+    void
+    replace_if(_FIter, _FIter, _Predicate, const _Tp&);
+  template<typename _FIter1, typename _FIter2>
+    _FIter1
+    search(_FIter1, _FIter1, _FIter2, _FIter2);
+  template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
+    _FIter1
+    search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
+  template<typename _FIter, typename _Size, typename _Tp>
+    _FIter
+    search_n(_FIter, _FIter, _Size, const _Tp&);
+  template<typename _FIter, typename _Size, typename _Tp,
+    typename _BinaryPredicate>
+    _FIter
+    search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
+  template<typename _IIter1, typename _IIter2, typename _OIter>
+    _OIter
+    set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
+  template<typename _IIter1, typename _IIter2, typename _OIter,
+    typename _Compare>
+    _OIter
+    set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
+  template<typename _IIter1, typename _IIter2, typename _OIter>
+    _OIter
+    set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
+  template<typename _IIter1, typename _IIter2, typename _OIter,
+    typename _Compare>
+    _OIter
+    set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
+  template<typename _IIter1, typename _IIter2, typename _OIter>
+    _OIter
+    set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
+  template<typename _IIter1, typename _IIter2, typename _OIter,
+    typename _Compare>
+    _OIter
+    set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
+        _OIter, _Compare);
+  template<typename _IIter1, typename _IIter2, typename _OIter>
+    _OIter
+    set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
+  template<typename _IIter1, typename _IIter2, typename _OIter,
+    typename _Compare>
+    _OIter
+    set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
+  template<typename _RAIter>
+    void
+    sort(_RAIter, _RAIter);
+  template<typename _RAIter, typename _Compare>
+    void
+    sort(_RAIter, _RAIter, _Compare);
+  template<typename _RAIter>
+    void
+    stable_sort(_RAIter, _RAIter);
+  template<typename _RAIter, typename _Compare>
+    void
+    stable_sort(_RAIter, _RAIter, _Compare);
+  template<typename _IIter, typename _OIter, typename _UnaryOperation>
+    _OIter
+    transform(_IIter, _IIter, _OIter, _UnaryOperation);
+  template<typename _IIter1, typename _IIter2, typename _OIter,
+    typename _BinaryOperation>
+    _OIter
+    transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
+  template<typename _IIter, typename _OIter>
+    _OIter
+    unique_copy(_IIter, _IIter, _OIter);
+  template<typename _IIter, typename _OIter, typename _BinaryPredicate>
+    _OIter
+    unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _RandomAccessIterator, typename _Distance>
+    _Distance
+    __is_heap_until(_RandomAccessIterator __first, _Distance __n)
+    {
+      _Distance __parent = 0;
+      for (_Distance __child = 1; __child < __n; ++__child)
+ {
+   if (__first[__parent] < __first[__child])
+     return __child;
+   if ((__child & 1) == 0)
+     ++__parent;
+ }
+      return __n;
+    }
+  template<typename _RandomAccessIterator, typename _Distance,
+    typename _Compare>
+    _Distance
+    __is_heap_until(_RandomAccessIterator __first, _Distance __n,
+      _Compare __comp)
+    {
+      _Distance __parent = 0;
+      for (_Distance __child = 1; __child < __n; ++__child)
+ {
+   if (__comp(__first[__parent], __first[__child]))
+     return __child;
+   if ((__child & 1) == 0)
+     ++__parent;
+ }
+      return __n;
+    }
+  template<typename _RandomAccessIterator, typename _Distance>
+    inline bool
+    __is_heap(_RandomAccessIterator __first, _Distance __n)
+    { return std::__is_heap_until(__first, __n) == __n; }
+  template<typename _RandomAccessIterator, typename _Compare,
+    typename _Distance>
+    inline bool
+    __is_heap(_RandomAccessIterator __first, _Compare __comp, _Distance __n)
+    { return std::__is_heap_until(__first, __n, __comp) == __n; }
+  template<typename _RandomAccessIterator>
+    inline bool
+    __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+    { return std::__is_heap(__first, std::distance(__first, __last)); }
+  template<typename _RandomAccessIterator, typename _Compare>
+    inline bool
+    __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+       _Compare __comp)
+    { return std::__is_heap(__first, __comp, std::distance(__first, __last)); }
+  template<typename _RandomAccessIterator, typename _Distance, typename _Tp>
+    void
+    __push_heap(_RandomAccessIterator __first,
+  _Distance __holeIndex, _Distance __topIndex, _Tp __value)
+    {
+      _Distance __parent = (__holeIndex - 1) / 2;
+      while (__holeIndex > __topIndex && *(__first + __parent) < __value)
+ {
+   *(__first + __holeIndex) = (*(__first + __parent));
+   __holeIndex = __parent;
+   __parent = (__holeIndex - 1) / 2;
+ }
+      *(__first + __holeIndex) = (__value);
+    }
+  template<typename _RandomAccessIterator>
+    inline void
+    push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+   _ValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+   _DistanceType;
+     
+     
+      ;
+      ;
+      _ValueType __value = (*(__last - 1));
+      std::__push_heap(__first, _DistanceType((__last - __first) - 1),
+         _DistanceType(0), (__value));
+    }
+  template<typename _RandomAccessIterator, typename _Distance, typename _Tp,
+    typename _Compare>
+    void
+    __push_heap(_RandomAccessIterator __first, _Distance __holeIndex,
+  _Distance __topIndex, _Tp __value, _Compare __comp)
+    {
+      _Distance __parent = (__holeIndex - 1) / 2;
+      while (__holeIndex > __topIndex
+      && __comp(*(__first + __parent), __value))
+ {
+   *(__first + __holeIndex) = (*(__first + __parent));
+   __holeIndex = __parent;
+   __parent = (__holeIndex - 1) / 2;
+ }
+      *(__first + __holeIndex) = (__value);
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    inline void
+    push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+       _Compare __comp)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+   _ValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+   _DistanceType;
+     
+      ;
+      ;
+      _ValueType __value = (*(__last - 1));
+      std::__push_heap(__first, _DistanceType((__last - __first) - 1),
+         _DistanceType(0), (__value), __comp);
+    }
+  template<typename _RandomAccessIterator, typename _Distance, typename _Tp>
+    void
+    __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
+    _Distance __len, _Tp __value)
+    {
+      const _Distance __topIndex = __holeIndex;
+      _Distance __secondChild = __holeIndex;
+      while (__secondChild < (__len - 1) / 2)
+ {
+   __secondChild = 2 * (__secondChild + 1);
+   if (*(__first + __secondChild) < *(__first + (__secondChild - 1)))
+     __secondChild--;
+   *(__first + __holeIndex) = (*(__first + __secondChild));
+   __holeIndex = __secondChild;
+ }
+      if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2)
+ {
+   __secondChild = 2 * (__secondChild + 1);
+   *(__first + __holeIndex) = (*(__first + (__secondChild - 1)));
+   __holeIndex = __secondChild - 1;
+ }
+      std::__push_heap(__first, __holeIndex, __topIndex,
+         (__value));
+    }
+  template<typename _RandomAccessIterator>
+    inline void
+    __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+        _RandomAccessIterator __result)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+ _DistanceType;
+      _ValueType __value = (*__result);
+      *__result = (*__first);
+      std::__adjust_heap(__first, _DistanceType(0),
+    _DistanceType(__last - __first),
+    (__value));
+    }
+  template<typename _RandomAccessIterator>
+    inline void
+    pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+     
+     
+      ;
+      ;
+      --__last;
+      std::__pop_heap(__first, __last, __last);
+    }
+  template<typename _RandomAccessIterator, typename _Distance,
+    typename _Tp, typename _Compare>
+    void
+    __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
+    _Distance __len, _Tp __value, _Compare __comp)
+    {
+      const _Distance __topIndex = __holeIndex;
+      _Distance __secondChild = __holeIndex;
+      while (__secondChild < (__len - 1) / 2)
+ {
+   __secondChild = 2 * (__secondChild + 1);
+   if (__comp(*(__first + __secondChild),
+       *(__first + (__secondChild - 1))))
+     __secondChild--;
+   *(__first + __holeIndex) = (*(__first + __secondChild));
+   __holeIndex = __secondChild;
+ }
+      if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2)
+ {
+   __secondChild = 2 * (__secondChild + 1);
+   *(__first + __holeIndex) = (*(__first + (__secondChild - 1)));
+   __holeIndex = __secondChild - 1;
+ }
+      std::__push_heap(__first, __holeIndex, __topIndex,
+         (__value), __comp);
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    inline void
+    __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+        _RandomAccessIterator __result, _Compare __comp)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+ _DistanceType;
+      _ValueType __value = (*__result);
+      *__result = (*__first);
+      std::__adjust_heap(__first, _DistanceType(0),
+    _DistanceType(__last - __first),
+    (__value), __comp);
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    inline void
+    pop_heap(_RandomAccessIterator __first,
+      _RandomAccessIterator __last, _Compare __comp)
+    {
+     
+      ;
+      ;
+      --__last;
+      std::__pop_heap(__first, __last, __last, __comp);
+    }
+  template<typename _RandomAccessIterator>
+    void
+    make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+   _ValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+   _DistanceType;
+     
+     
+      ;
+      if (__last - __first < 2)
+ return;
+      const _DistanceType __len = __last - __first;
+      _DistanceType __parent = (__len - 2) / 2;
+      while (true)
+ {
+   _ValueType __value = (*(__first + __parent));
+   std::__adjust_heap(__first, __parent, __len, (__value));
+   if (__parent == 0)
+     return;
+   __parent--;
+ }
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    void
+    make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+       _Compare __comp)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+   _ValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+   _DistanceType;
+     
+      ;
+      if (__last - __first < 2)
+ return;
+      const _DistanceType __len = __last - __first;
+      _DistanceType __parent = (__len - 2) / 2;
+      while (true)
+ {
+   _ValueType __value = (*(__first + __parent));
+   std::__adjust_heap(__first, __parent, __len, (__value),
+        __comp);
+   if (__parent == 0)
+     return;
+   __parent--;
+ }
+    }
+  template<typename _RandomAccessIterator>
+    void
+    sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+    {
+     
+     
+      ;
+      ;
+      while (__last - __first > 1)
+ {
+   --__last;
+   std::__pop_heap(__first, __last, __last);
+ }
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    void
+    sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+       _Compare __comp)
+    {
+     
+      ;
+      ;
+      while (__last - __first > 1)
+ {
+   --__last;
+   std::__pop_heap(__first, __last, __last, __comp);
+ }
+    }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Tp>
+    pair<_Tp*, ptrdiff_t>
+    get_temporary_buffer(ptrdiff_t __len)
+    {
+      const ptrdiff_t __max =
+ __gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
+      if (__len > __max)
+ __len = __max;
+      while (__len > 0)
+ {
+   _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp),
+       std::nothrow));
+   if (__tmp != 0)
+     return std::pair<_Tp*, ptrdiff_t>(__tmp, __len);
+   __len /= 2;
+ }
+      return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0);
+    }
+  template<typename _Tp>
+    inline void
+    return_temporary_buffer(_Tp* __p)
+    { ::operator delete(__p, std::nothrow); }
+  template<typename _ForwardIterator, typename _Tp>
+    class _Temporary_buffer
+    {
+     
+    public:
+      typedef _Tp value_type;
+      typedef value_type* pointer;
+      typedef pointer iterator;
+      typedef ptrdiff_t size_type;
+    protected:
+      size_type _M_original_len;
+      size_type _M_len;
+      pointer _M_buffer;
+    public:
+      size_type
+      size() const
+      { return _M_len; }
+      size_type
+      requested_size() const
+      { return _M_original_len; }
+      iterator
+      begin()
+      { return _M_buffer; }
+      iterator
+      end()
+      { return _M_buffer + _M_len; }
+      _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last);
+      ~_Temporary_buffer()
+      {
+ std::_Destroy(_M_buffer, _M_buffer + _M_len);
+ std::return_temporary_buffer(_M_buffer);
+      }
+    private:
+      _Temporary_buffer(const _Temporary_buffer&);
+      void
+      operator=(const _Temporary_buffer&);
+    };
+  template<typename _ForwardIterator, typename _Tp>
+    _Temporary_buffer<_ForwardIterator, _Tp>::
+    _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
+    : _M_original_len(std::distance(__first, __last)),
+      _M_len(0), _M_buffer(0)
+    {
+      try
+ {
+   std::pair<pointer, size_type> __p(std::get_temporary_buffer<
+         value_type>(_M_original_len));
+   _M_buffer = __p.first;
+   _M_len = __p.second;
+   if (!__is_pod(_Tp) && _M_len > 0)
+     std::uninitialized_fill_n(_M_buffer, _M_len, *__first);
+ }
+      catch(...)
+ {
+   std::return_temporary_buffer(_M_buffer);
+   _M_buffer = 0;
+   _M_len = 0;
+   throw;
+ }
+    }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _Tp>
+    inline const _Tp&
+    __median(const _Tp& __a, const _Tp& __b, const _Tp& __c)
+    {
+     
+      if (__a < __b)
+ if (__b < __c)
+   return __b;
+ else if (__a < __c)
+   return __c;
+ else
+   return __a;
+      else if (__a < __c)
+ return __a;
+      else if (__b < __c)
+ return __c;
+      else
+ return __b;
+    }
+  template<typename _Tp, typename _Compare>
+    inline const _Tp&
+    __median(const _Tp& __a, const _Tp& __b, const _Tp& __c, _Compare __comp)
+    {
+     
+      if (__comp(__a, __b))
+ if (__comp(__b, __c))
+   return __b;
+ else if (__comp(__a, __c))
+   return __c;
+ else
+   return __a;
+      else if (__comp(__a, __c))
+ return __a;
+      else if (__comp(__b, __c))
+ return __c;
+      else
+ return __b;
+    }
+  template<typename _InputIterator, typename _Tp>
+    inline _InputIterator
+    __find(_InputIterator __first, _InputIterator __last,
+    const _Tp& __val, input_iterator_tag)
+    {
+      while (__first != __last && !(*__first == __val))
+ ++__first;
+      return __first;
+    }
+  template<typename _InputIterator, typename _Predicate>
+    inline _InputIterator
+    __find_if(_InputIterator __first, _InputIterator __last,
+       _Predicate __pred, input_iterator_tag)
+    {
+      while (__first != __last && !bool(__pred(*__first)))
+ ++__first;
+      return __first;
+    }
+  template<typename _RandomAccessIterator, typename _Tp>
+    _RandomAccessIterator
+    __find(_RandomAccessIterator __first, _RandomAccessIterator __last,
+    const _Tp& __val, random_access_iterator_tag)
+    {
+      typename iterator_traits<_RandomAccessIterator>::difference_type
+ __trip_count = (__last - __first) >> 2;
+      for (; __trip_count > 0; --__trip_count)
+ {
+   if (*__first == __val)
+     return __first;
+   ++__first;
+   if (*__first == __val)
+     return __first;
+   ++__first;
+   if (*__first == __val)
+     return __first;
+   ++__first;
+   if (*__first == __val)
+     return __first;
+   ++__first;
+ }
+      switch (__last - __first)
+ {
+ case 3:
+   if (*__first == __val)
+     return __first;
+   ++__first;
+ case 2:
+   if (*__first == __val)
+     return __first;
+   ++__first;
+ case 1:
+   if (*__first == __val)
+     return __first;
+   ++__first;
+ case 0:
+ default:
+   return __last;
+ }
+    }
+  template<typename _RandomAccessIterator, typename _Predicate>
+    _RandomAccessIterator
+    __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last,
+       _Predicate __pred, random_access_iterator_tag)
+    {
+      typename iterator_traits<_RandomAccessIterator>::difference_type
+ __trip_count = (__last - __first) >> 2;
+      for (; __trip_count > 0; --__trip_count)
+ {
+   if (__pred(*__first))
+     return __first;
+   ++__first;
+   if (__pred(*__first))
+     return __first;
+   ++__first;
+   if (__pred(*__first))
+     return __first;
+   ++__first;
+   if (__pred(*__first))
+     return __first;
+   ++__first;
+ }
+      switch (__last - __first)
+ {
+ case 3:
+   if (__pred(*__first))
+     return __first;
+   ++__first;
+ case 2:
+   if (__pred(*__first))
+     return __first;
+   ++__first;
+ case 1:
+   if (__pred(*__first))
+     return __first;
+   ++__first;
+ case 0:
+ default:
+   return __last;
+ }
+    }
+  template<typename _ForwardIterator, typename _Integer, typename _Tp>
+    _ForwardIterator
+    __search_n(_ForwardIterator __first, _ForwardIterator __last,
+        _Integer __count, const _Tp& __val,
+        std::forward_iterator_tag)
+    {
+      __first = std::find(__first, __last, __val);
+      while (__first != __last)
+ {
+   typename iterator_traits<_ForwardIterator>::difference_type
+     __n = __count;
+   _ForwardIterator __i = __first;
+   ++__i;
+   while (__i != __last && __n != 1 && *__i == __val)
+     {
+       ++__i;
+       --__n;
+     }
+   if (__n == 1)
+     return __first;
+   if (__i == __last)
+     return __last;
+   __first = std::find(++__i, __last, __val);
+ }
+      return __last;
+    }
+  template<typename _RandomAccessIter, typename _Integer, typename _Tp>
+    _RandomAccessIter
+    __search_n(_RandomAccessIter __first, _RandomAccessIter __last,
+        _Integer __count, const _Tp& __val,
+        std::random_access_iterator_tag)
+    {
+      typedef typename std::iterator_traits<_RandomAccessIter>::difference_type
+ _DistanceType;
+      _DistanceType __tailSize = __last - __first;
+      const _DistanceType __pattSize = __count;
+      if (__tailSize < __pattSize)
+        return __last;
+      const _DistanceType __skipOffset = __pattSize - 1;
+      _RandomAccessIter __lookAhead = __first + __skipOffset;
+      __tailSize -= __pattSize;
+      while (1)
+ {
+   while (!(*__lookAhead == __val))
+     {
+       if (__tailSize < __pattSize)
+  return __last;
+       __lookAhead += __pattSize;
+       __tailSize -= __pattSize;
+     }
+   _DistanceType __remainder = __skipOffset;
+   for (_RandomAccessIter __backTrack = __lookAhead - 1;
+        *__backTrack == __val; --__backTrack)
+     {
+       if (--__remainder == 0)
+  return (__lookAhead - __skipOffset);
+     }
+   if (__remainder > __tailSize)
+     return __last;
+   __lookAhead += __remainder;
+   __tailSize -= __remainder;
+ }
+    }
+  template<typename _ForwardIterator, typename _Integer, typename _Tp,
+           typename _BinaryPredicate>
+    _ForwardIterator
+    __search_n(_ForwardIterator __first, _ForwardIterator __last,
+        _Integer __count, const _Tp& __val,
+        _BinaryPredicate __binary_pred, std::forward_iterator_tag)
+    {
+      while (__first != __last && !bool(__binary_pred(*__first, __val)))
+        ++__first;
+      while (__first != __last)
+ {
+   typename iterator_traits<_ForwardIterator>::difference_type
+     __n = __count;
+   _ForwardIterator __i = __first;
+   ++__i;
+   while (__i != __last && __n != 1 && bool(__binary_pred(*__i, __val)))
+     {
+       ++__i;
+       --__n;
+     }
+   if (__n == 1)
+     return __first;
+   if (__i == __last)
+     return __last;
+   __first = ++__i;
+   while (__first != __last
+   && !bool(__binary_pred(*__first, __val)))
+     ++__first;
+ }
+      return __last;
+    }
+  template<typename _RandomAccessIter, typename _Integer, typename _Tp,
+    typename _BinaryPredicate>
+    _RandomAccessIter
+    __search_n(_RandomAccessIter __first, _RandomAccessIter __last,
+        _Integer __count, const _Tp& __val,
+        _BinaryPredicate __binary_pred, std::random_access_iterator_tag)
+    {
+      typedef typename std::iterator_traits<_RandomAccessIter>::difference_type
+ _DistanceType;
+      _DistanceType __tailSize = __last - __first;
+      const _DistanceType __pattSize = __count;
+      if (__tailSize < __pattSize)
+        return __last;
+      const _DistanceType __skipOffset = __pattSize - 1;
+      _RandomAccessIter __lookAhead = __first + __skipOffset;
+      __tailSize -= __pattSize;
+      while (1)
+ {
+   while (!bool(__binary_pred(*__lookAhead, __val)))
+     {
+       if (__tailSize < __pattSize)
+  return __last;
+       __lookAhead += __pattSize;
+       __tailSize -= __pattSize;
+     }
+   _DistanceType __remainder = __skipOffset;
+   for (_RandomAccessIter __backTrack = __lookAhead - 1;
+        __binary_pred(*__backTrack, __val); --__backTrack)
+     {
+       if (--__remainder == 0)
+  return (__lookAhead - __skipOffset);
+     }
+   if (__remainder > __tailSize)
+     return __last;
+   __lookAhead += __remainder;
+   __tailSize -= __remainder;
+ }
+    }
+  template<typename _ForwardIterator1, typename _ForwardIterator2>
+    _ForwardIterator1
+    __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+        _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+        forward_iterator_tag, forward_iterator_tag)
+    {
+      if (__first2 == __last2)
+ return __last1;
+      else
+ {
+   _ForwardIterator1 __result = __last1;
+   while (1)
+     {
+       _ForwardIterator1 __new_result
+  = std::search(__first1, __last1, __first2, __last2);
+       if (__new_result == __last1)
+  return __result;
+       else
+  {
+    __result = __new_result;
+    __first1 = __new_result;
+    ++__first1;
+  }
+     }
+ }
+    }
+  template<typename _ForwardIterator1, typename _ForwardIterator2,
+    typename _BinaryPredicate>
+    _ForwardIterator1
+    __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+        _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+        forward_iterator_tag, forward_iterator_tag,
+        _BinaryPredicate __comp)
+    {
+      if (__first2 == __last2)
+ return __last1;
+      else
+ {
+   _ForwardIterator1 __result = __last1;
+   while (1)
+     {
+       _ForwardIterator1 __new_result
+  = std::search(__first1, __last1, __first2,
+      __last2, __comp);
+       if (__new_result == __last1)
+  return __result;
+       else
+  {
+    __result = __new_result;
+    __first1 = __new_result;
+    ++__first1;
+  }
+     }
+ }
+    }
+  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2>
+    _BidirectionalIterator1
+    __find_end(_BidirectionalIterator1 __first1,
+        _BidirectionalIterator1 __last1,
+        _BidirectionalIterator2 __first2,
+        _BidirectionalIterator2 __last2,
+        bidirectional_iterator_tag, bidirectional_iterator_tag)
+    {
+     
+     
+      typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1;
+      typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2;
+      _RevIterator1 __rlast1(__first1);
+      _RevIterator2 __rlast2(__first2);
+      _RevIterator1 __rresult = std::search(_RevIterator1(__last1),
+             __rlast1,
+             _RevIterator2(__last2),
+             __rlast2);
+      if (__rresult == __rlast1)
+ return __last1;
+      else
+ {
+   _BidirectionalIterator1 __result = __rresult.base();
+   std::advance(__result, -std::distance(__first2, __last2));
+   return __result;
+ }
+    }
+  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
+    typename _BinaryPredicate>
+    _BidirectionalIterator1
+    __find_end(_BidirectionalIterator1 __first1,
+        _BidirectionalIterator1 __last1,
+        _BidirectionalIterator2 __first2,
+        _BidirectionalIterator2 __last2,
+        bidirectional_iterator_tag, bidirectional_iterator_tag,
+        _BinaryPredicate __comp)
+    {
+     
+     
+      typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1;
+      typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2;
+      _RevIterator1 __rlast1(__first1);
+      _RevIterator2 __rlast2(__first2);
+      _RevIterator1 __rresult = std::search(_RevIterator1(__last1), __rlast1,
+         _RevIterator2(__last2), __rlast2,
+         __comp);
+      if (__rresult == __rlast1)
+ return __last1;
+      else
+ {
+   _BidirectionalIterator1 __result = __rresult.base();
+   std::advance(__result, -std::distance(__first2, __last2));
+   return __result;
+ }
+    }
+  template<typename _ForwardIterator1, typename _ForwardIterator2>
+    inline _ForwardIterator1
+    find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+      _ForwardIterator2 __first2, _ForwardIterator2 __last2)
+    {
+     
+     
+     
+      ;
+      ;
+      return std::__find_end(__first1, __last1, __first2, __last2,
+        std::__iterator_category(__first1),
+        std::__iterator_category(__first2));
+    }
+  template<typename _ForwardIterator1, typename _ForwardIterator2,
+    typename _BinaryPredicate>
+    inline _ForwardIterator1
+    find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+      _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+      _BinaryPredicate __comp)
+    {
+     
+     
+     
+      ;
+      ;
+      return std::__find_end(__first1, __last1, __first2, __last2,
+        std::__iterator_category(__first1),
+        std::__iterator_category(__first2),
+        __comp);
+    }
+  template<typename _InputIterator, typename _OutputIterator, typename _Tp>
+    _OutputIterator
+    remove_copy(_InputIterator __first, _InputIterator __last,
+  _OutputIterator __result, const _Tp& __value)
+    {
+     
+     
+     
+      ;
+      for (; __first != __last; ++__first)
+ if (!(*__first == __value))
+   {
+     *__result = *__first;
+     ++__result;
+   }
+      return __result;
+    }
+  template<typename _InputIterator, typename _OutputIterator,
+    typename _Predicate>
+    _OutputIterator
+    remove_copy_if(_InputIterator __first, _InputIterator __last,
+     _OutputIterator __result, _Predicate __pred)
+    {
+     
+     
+     
+      ;
+      for (; __first != __last; ++__first)
+ if (!bool(__pred(*__first)))
+   {
+     *__result = *__first;
+     ++__result;
+   }
+      return __result;
+    }
+  template<typename _ForwardIterator, typename _Tp>
+    _ForwardIterator
+    remove(_ForwardIterator __first, _ForwardIterator __last,
+    const _Tp& __value)
+    {
+     
+     
+      ;
+      __first = std::find(__first, __last, __value);
+      if(__first == __last)
+        return __first;
+      _ForwardIterator __result = __first;
+      ++__first;
+      for(; __first != __last; ++__first)
+        if(!(*__first == __value))
+          {
+            *__result = (*__first);
+            ++__result;
+          }
+      return __result;
+    }
+  template<typename _ForwardIterator, typename _Predicate>
+    _ForwardIterator
+    remove_if(_ForwardIterator __first, _ForwardIterator __last,
+       _Predicate __pred)
+    {
+     
+     
+      ;
+      __first = std::find_if(__first, __last, __pred);
+      if(__first == __last)
+        return __first;
+      _ForwardIterator __result = __first;
+      ++__first;
+      for(; __first != __last; ++__first)
+        if(!bool(__pred(*__first)))
+          {
+            *__result = (*__first);
+            ++__result;
+          }
+      return __result;
+    }
+  template<typename _ForwardIterator>
+    _ForwardIterator
+    unique(_ForwardIterator __first, _ForwardIterator __last)
+    {
+     
+     
+      ;
+      __first = std::adjacent_find(__first, __last);
+      if (__first == __last)
+ return __last;
+      _ForwardIterator __dest = __first;
+      ++__first;
+      while (++__first != __last)
+ if (!(*__dest == *__first))
+   *++__dest = (*__first);
+      return ++__dest;
+    }
+  template<typename _ForwardIterator, typename _BinaryPredicate>
+    _ForwardIterator
+    unique(_ForwardIterator __first, _ForwardIterator __last,
+           _BinaryPredicate __binary_pred)
+    {
+     
+     
+      ;
+      __first = std::adjacent_find(__first, __last, __binary_pred);
+      if (__first == __last)
+ return __last;
+      _ForwardIterator __dest = __first;
+      ++__first;
+      while (++__first != __last)
+ if (!bool(__binary_pred(*__dest, *__first)))
+   *++__dest = (*__first);
+      return ++__dest;
+    }
+  template<typename _ForwardIterator, typename _OutputIterator>
+    _OutputIterator
+    __unique_copy(_ForwardIterator __first, _ForwardIterator __last,
+    _OutputIterator __result,
+    forward_iterator_tag, output_iterator_tag)
+    {
+      _ForwardIterator __next = __first;
+      *__result = *__first;
+      while (++__next != __last)
+ if (!(*__first == *__next))
+   {
+     __first = __next;
+     *++__result = *__first;
+   }
+      return ++__result;
+    }
+  template<typename _InputIterator, typename _OutputIterator>
+    _OutputIterator
+    __unique_copy(_InputIterator __first, _InputIterator __last,
+    _OutputIterator __result,
+    input_iterator_tag, output_iterator_tag)
+    {
+      typename iterator_traits<_InputIterator>::value_type __value = *__first;
+      *__result = __value;
+      while (++__first != __last)
+ if (!(__value == *__first))
+   {
+     __value = *__first;
+     *++__result = __value;
+   }
+      return ++__result;
+    }
+  template<typename _InputIterator, typename _ForwardIterator>
+    _ForwardIterator
+    __unique_copy(_InputIterator __first, _InputIterator __last,
+    _ForwardIterator __result,
+    input_iterator_tag, forward_iterator_tag)
+    {
+      *__result = *__first;
+      while (++__first != __last)
+ if (!(*__result == *__first))
+   *++__result = *__first;
+      return ++__result;
+    }
+  template<typename _ForwardIterator, typename _OutputIterator,
+    typename _BinaryPredicate>
+    _OutputIterator
+    __unique_copy(_ForwardIterator __first, _ForwardIterator __last,
+    _OutputIterator __result, _BinaryPredicate __binary_pred,
+    forward_iterator_tag, output_iterator_tag)
+    {
+     
+      _ForwardIterator __next = __first;
+      *__result = *__first;
+      while (++__next != __last)
+ if (!bool(__binary_pred(*__first, *__next)))
+   {
+     __first = __next;
+     *++__result = *__first;
+   }
+      return ++__result;
+    }
+  template<typename _InputIterator, typename _OutputIterator,
+    typename _BinaryPredicate>
+    _OutputIterator
+    __unique_copy(_InputIterator __first, _InputIterator __last,
+    _OutputIterator __result, _BinaryPredicate __binary_pred,
+    input_iterator_tag, output_iterator_tag)
+    {
+     
+      typename iterator_traits<_InputIterator>::value_type __value = *__first;
+      *__result = __value;
+      while (++__first != __last)
+ if (!bool(__binary_pred(__value, *__first)))
+   {
+     __value = *__first;
+     *++__result = __value;
+   }
+      return ++__result;
+    }
+  template<typename _InputIterator, typename _ForwardIterator,
+    typename _BinaryPredicate>
+    _ForwardIterator
+    __unique_copy(_InputIterator __first, _InputIterator __last,
+    _ForwardIterator __result, _BinaryPredicate __binary_pred,
+    input_iterator_tag, forward_iterator_tag)
+    {
+     
+      *__result = *__first;
+      while (++__first != __last)
+ if (!bool(__binary_pred(*__result, *__first)))
+   *++__result = *__first;
+      return ++__result;
+    }
+  template<typename _BidirectionalIterator>
+    void
+    __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last,
+       bidirectional_iterator_tag)
+    {
+      while (true)
+ if (__first == __last || __first == --__last)
+   return;
+ else
+   {
+     std::iter_swap(__first, __last);
+     ++__first;
+   }
+    }
+  template<typename _RandomAccessIterator>
+    void
+    __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last,
+       random_access_iterator_tag)
+    {
+      if (__first == __last)
+ return;
+      --__last;
+      while (__first < __last)
+ {
+   std::iter_swap(__first, __last);
+   ++__first;
+   --__last;
+ }
+    }
+  template<typename _BidirectionalIterator>
+    inline void
+    reverse(_BidirectionalIterator __first, _BidirectionalIterator __last)
+    {
+     
+      ;
+      std::__reverse(__first, __last, std::__iterator_category(__first));
+    }
+  template<typename _BidirectionalIterator, typename _OutputIterator>
+    _OutputIterator
+    reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last,
+   _OutputIterator __result)
+    {
+     
+     
+      ;
+      while (__first != __last)
+ {
+   --__last;
+   *__result = *__last;
+   ++__result;
+ }
+      return __result;
+    }
+  template<typename _EuclideanRingElement>
+    _EuclideanRingElement
+    __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n)
+    {
+      while (__n != 0)
+ {
+   _EuclideanRingElement __t = __m % __n;
+   __m = __n;
+   __n = __t;
+ }
+      return __m;
+    }
+  template<typename _ForwardIterator>
+    void
+    __rotate(_ForwardIterator __first,
+      _ForwardIterator __middle,
+      _ForwardIterator __last,
+      forward_iterator_tag)
+    {
+      if (__first == __middle || __last == __middle)
+ return;
+      _ForwardIterator __first2 = __middle;
+      do
+ {
+   std::iter_swap(__first, __first2);
+   ++__first;
+   ++__first2;
+   if (__first == __middle)
+     __middle = __first2;
+ }
+      while (__first2 != __last);
+      __first2 = __middle;
+      while (__first2 != __last)
+ {
+   std::iter_swap(__first, __first2);
+   ++__first;
+   ++__first2;
+   if (__first == __middle)
+     __middle = __first2;
+   else if (__first2 == __last)
+     __first2 = __middle;
+ }
+    }
+  template<typename _BidirectionalIterator>
+    void
+    __rotate(_BidirectionalIterator __first,
+      _BidirectionalIterator __middle,
+      _BidirectionalIterator __last,
+       bidirectional_iterator_tag)
+    {
+     
+      if (__first == __middle || __last == __middle)
+ return;
+      std::__reverse(__first, __middle, bidirectional_iterator_tag());
+      std::__reverse(__middle, __last, bidirectional_iterator_tag());
+      while (__first != __middle && __middle != __last)
+ {
+   std::iter_swap(__first, --__last);
+   ++__first;
+ }
+      if (__first == __middle)
+ std::__reverse(__middle, __last, bidirectional_iterator_tag());
+      else
+ std::__reverse(__first, __middle, bidirectional_iterator_tag());
+    }
+  template<typename _RandomAccessIterator>
+    void
+    __rotate(_RandomAccessIterator __first,
+      _RandomAccessIterator __middle,
+      _RandomAccessIterator __last,
+      random_access_iterator_tag)
+    {
+     
+      if (__first == __middle || __last == __middle)
+ return;
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+ _Distance;
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+      const _Distance __n = __last - __first;
+      const _Distance __k = __middle - __first;
+      const _Distance __l = __n - __k;
+      if (__k == __l)
+ {
+   std::swap_ranges(__first, __middle, __middle);
+   return;
+ }
+      const _Distance __d = std::__gcd(__n, __k);
+      for (_Distance __i = 0; __i < __d; __i++)
+ {
+   _ValueType __tmp = (*__first);
+   _RandomAccessIterator __p = __first;
+   if (__k < __l)
+     {
+       for (_Distance __j = 0; __j < __l / __d; __j++)
+  {
+    if (__p > __first + __l)
+      {
+        *__p = (*(__p - __l));
+        __p -= __l;
+      }
+    *__p = (*(__p + __k));
+    __p += __k;
+  }
+     }
+   else
+     {
+       for (_Distance __j = 0; __j < __k / __d - 1; __j ++)
+  {
+    if (__p < __last - __k)
+      {
+        *__p = (*(__p + __k));
+        __p += __k;
+      }
+    *__p = (*(__p - __l));
+    __p -= __l;
+  }
+     }
+   *__p = (__tmp);
+   ++__first;
+ }
+    }
+  template<typename _ForwardIterator>
+    inline void
+    rotate(_ForwardIterator __first, _ForwardIterator __middle,
+    _ForwardIterator __last)
+    {
+     
+      ;
+      ;
+      typedef typename iterator_traits<_ForwardIterator>::iterator_category
+ _IterType;
+      std::__rotate(__first, __middle, __last, _IterType());
+    }
+  template<typename _ForwardIterator, typename _OutputIterator>
+    _OutputIterator
+    rotate_copy(_ForwardIterator __first, _ForwardIterator __middle,
+                _ForwardIterator __last, _OutputIterator __result)
+    {
+     
+     
+      ;
+      ;
+      return std::copy(__first, __middle,
+                       std::copy(__middle, __last, __result));
+    }
+  template<typename _ForwardIterator, typename _Predicate>
+    _ForwardIterator
+    __partition(_ForwardIterator __first, _ForwardIterator __last,
+  _Predicate __pred, forward_iterator_tag)
+    {
+      if (__first == __last)
+ return __first;
+      while (__pred(*__first))
+ if (++__first == __last)
+   return __first;
+      _ForwardIterator __next = __first;
+      while (++__next != __last)
+ if (__pred(*__next))
+   {
+     std::iter_swap(__first, __next);
+     ++__first;
+   }
+      return __first;
+    }
+  template<typename _BidirectionalIterator, typename _Predicate>
+    _BidirectionalIterator
+    __partition(_BidirectionalIterator __first, _BidirectionalIterator __last,
+  _Predicate __pred, bidirectional_iterator_tag)
+    {
+      while (true)
+ {
+   while (true)
+     if (__first == __last)
+       return __first;
+     else if (__pred(*__first))
+       ++__first;
+     else
+       break;
+   --__last;
+   while (true)
+     if (__first == __last)
+       return __first;
+     else if (!bool(__pred(*__last)))
+       --__last;
+     else
+       break;
+   std::iter_swap(__first, __last);
+   ++__first;
+ }
+    }
+  template<typename _ForwardIterator, typename _Predicate, typename _Distance>
+    _ForwardIterator
+    __inplace_stable_partition(_ForwardIterator __first,
+          _ForwardIterator __last,
+          _Predicate __pred, _Distance __len)
+    {
+      if (__len == 1)
+ return __pred(*__first) ? __last : __first;
+      _ForwardIterator __middle = __first;
+      std::advance(__middle, __len / 2);
+      _ForwardIterator __begin = std::__inplace_stable_partition(__first,
+         __middle,
+         __pred,
+         __len / 2);
+      _ForwardIterator __end = std::__inplace_stable_partition(__middle, __last,
+              __pred,
+              __len
+              - __len / 2);
+      std::rotate(__begin, __middle, __end);
+      std::advance(__begin, std::distance(__middle, __end));
+      return __begin;
+    }
+  template<typename _ForwardIterator, typename _Pointer, typename _Predicate,
+    typename _Distance>
+    _ForwardIterator
+    __stable_partition_adaptive(_ForwardIterator __first,
+    _ForwardIterator __last,
+    _Predicate __pred, _Distance __len,
+    _Pointer __buffer,
+    _Distance __buffer_size)
+    {
+      if (__len <= __buffer_size)
+ {
+   _ForwardIterator __result1 = __first;
+   _Pointer __result2 = __buffer;
+   for (; __first != __last; ++__first)
+     if (__pred(*__first))
+       {
+  *__result1 = *__first;
+  ++__result1;
+       }
+     else
+       {
+  *__result2 = *__first;
+  ++__result2;
+       }
+   std::copy(__buffer, __result2, __result1);
+   return __result1;
+ }
+      else
+ {
+   _ForwardIterator __middle = __first;
+   std::advance(__middle, __len / 2);
+   _ForwardIterator __begin =
+     std::__stable_partition_adaptive(__first, __middle, __pred,
+          __len / 2, __buffer,
+          __buffer_size);
+   _ForwardIterator __end =
+     std::__stable_partition_adaptive(__middle, __last, __pred,
+          __len - __len / 2,
+          __buffer, __buffer_size);
+   std::rotate(__begin, __middle, __end);
+   std::advance(__begin, std::distance(__middle, __end));
+   return __begin;
+ }
+    }
+  template<typename _ForwardIterator, typename _Predicate>
+    _ForwardIterator
+    stable_partition(_ForwardIterator __first, _ForwardIterator __last,
+       _Predicate __pred)
+    {
+     
+     
+      ;
+      if (__first == __last)
+ return __first;
+      else
+ {
+   typedef typename iterator_traits<_ForwardIterator>::value_type
+     _ValueType;
+   typedef typename iterator_traits<_ForwardIterator>::difference_type
+     _DistanceType;
+   _Temporary_buffer<_ForwardIterator, _ValueType> __buf(__first,
+        __last);
+ if (__buf.size() > 0)
+   return
+     std::__stable_partition_adaptive(__first, __last, __pred,
+       _DistanceType(__buf.requested_size()),
+       __buf.begin(),
+       _DistanceType(__buf.size()));
+ else
+   return
+     std::__inplace_stable_partition(__first, __last, __pred,
+      _DistanceType(__buf.requested_size()));
+ }
+    }
+  template<typename _RandomAccessIterator>
+    void
+    __heap_select(_RandomAccessIterator __first,
+    _RandomAccessIterator __middle,
+    _RandomAccessIterator __last)
+    {
+      std::make_heap(__first, __middle);
+      for (_RandomAccessIterator __i = __middle; __i < __last; ++__i)
+ if (*__i < *__first)
+   std::__pop_heap(__first, __middle, __i);
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    void
+    __heap_select(_RandomAccessIterator __first,
+    _RandomAccessIterator __middle,
+    _RandomAccessIterator __last, _Compare __comp)
+    {
+      std::make_heap(__first, __middle, __comp);
+      for (_RandomAccessIterator __i = __middle; __i < __last; ++__i)
+ if (__comp(*__i, *__first))
+   std::__pop_heap(__first, __middle, __i, __comp);
+    }
+  template<typename _InputIterator, typename _RandomAccessIterator>
+    _RandomAccessIterator
+    partial_sort_copy(_InputIterator __first, _InputIterator __last,
+        _RandomAccessIterator __result_first,
+        _RandomAccessIterator __result_last)
+    {
+      typedef typename iterator_traits<_InputIterator>::value_type
+ _InputValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _OutputValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+ _DistanceType;
+     
+     
+     
+     
+      ;
+      ;
+      if (__result_first == __result_last)
+ return __result_last;
+      _RandomAccessIterator __result_real_last = __result_first;
+      while(__first != __last && __result_real_last != __result_last)
+ {
+   *__result_real_last = *__first;
+   ++__result_real_last;
+   ++__first;
+ }
+      std::make_heap(__result_first, __result_real_last);
+      while (__first != __last)
+ {
+   if (*__first < *__result_first)
+     std::__adjust_heap(__result_first, _DistanceType(0),
+          _DistanceType(__result_real_last
+          - __result_first),
+          _InputValueType(*__first));
+   ++__first;
+ }
+      std::sort_heap(__result_first, __result_real_last);
+      return __result_real_last;
+    }
+  template<typename _InputIterator, typename _RandomAccessIterator, typename _Compare>
+    _RandomAccessIterator
+    partial_sort_copy(_InputIterator __first, _InputIterator __last,
+        _RandomAccessIterator __result_first,
+        _RandomAccessIterator __result_last,
+        _Compare __comp)
+    {
+      typedef typename iterator_traits<_InputIterator>::value_type
+ _InputValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _OutputValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+ _DistanceType;
+     
+     
+     
+     
+     
+      ;
+      ;
+      if (__result_first == __result_last)
+ return __result_last;
+      _RandomAccessIterator __result_real_last = __result_first;
+      while(__first != __last && __result_real_last != __result_last)
+ {
+   *__result_real_last = *__first;
+   ++__result_real_last;
+   ++__first;
+ }
+      std::make_heap(__result_first, __result_real_last, __comp);
+      while (__first != __last)
+ {
+   if (__comp(*__first, *__result_first))
+     std::__adjust_heap(__result_first, _DistanceType(0),
+          _DistanceType(__result_real_last
+          - __result_first),
+          _InputValueType(*__first),
+          __comp);
+   ++__first;
+ }
+      std::sort_heap(__result_first, __result_real_last, __comp);
+      return __result_real_last;
+    }
+  template<typename _RandomAccessIterator, typename _Tp>
+    void
+    __unguarded_linear_insert(_RandomAccessIterator __last, _Tp __val)
+    {
+      _RandomAccessIterator __next = __last;
+      --__next;
+      while (__val < *__next)
+ {
+   *__last = *__next;
+   __last = __next;
+   --__next;
+ }
+      *__last = __val;
+    }
+  template<typename _RandomAccessIterator, typename _Tp, typename _Compare>
+    void
+    __unguarded_linear_insert(_RandomAccessIterator __last, _Tp __val,
+         _Compare __comp)
+    {
+      _RandomAccessIterator __next = __last;
+      --__next;
+      while (__comp(__val, *__next))
+ {
+   *__last = *__next;
+   __last = __next;
+   --__next;
+ }
+      *__last = __val;
+    }
+  template<typename _RandomAccessIterator>
+    void
+    __insertion_sort(_RandomAccessIterator __first,
+       _RandomAccessIterator __last)
+    {
+      if (__first == __last)
+ return;
+      for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+ {
+   typename iterator_traits<_RandomAccessIterator>::value_type
+     __val = *__i;
+   if (__val < *__first)
+     {
+       std::copy_backward(__first, __i, __i + 1);
+       *__first = __val;
+     }
+   else
+     std::__unguarded_linear_insert(__i, __val);
+ }
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    void
+    __insertion_sort(_RandomAccessIterator __first,
+       _RandomAccessIterator __last, _Compare __comp)
+    {
+      if (__first == __last) return;
+      for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+ {
+   typename iterator_traits<_RandomAccessIterator>::value_type
+     __val = *__i;
+   if (__comp(__val, *__first))
+     {
+       std::copy_backward(__first, __i, __i + 1);
+       *__first = __val;
+     }
+   else
+     std::__unguarded_linear_insert(__i, __val, __comp);
+ }
+    }
+  template<typename _RandomAccessIterator>
+    inline void
+    __unguarded_insertion_sort(_RandomAccessIterator __first,
+          _RandomAccessIterator __last)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+      for (_RandomAccessIterator __i = __first; __i != __last; ++__i)
+ std::__unguarded_linear_insert(__i, _ValueType(*__i));
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    inline void
+    __unguarded_insertion_sort(_RandomAccessIterator __first,
+          _RandomAccessIterator __last, _Compare __comp)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+      for (_RandomAccessIterator __i = __first; __i != __last; ++__i)
+ std::__unguarded_linear_insert(__i, _ValueType(*__i), __comp);
+    }
+  enum { _S_threshold = 16 };
+  template<typename _RandomAccessIterator>
+    void
+    __final_insertion_sort(_RandomAccessIterator __first,
+      _RandomAccessIterator __last)
+    {
+      if (__last - __first > int(_S_threshold))
+ {
+   std::__insertion_sort(__first, __first + int(_S_threshold));
+   std::__unguarded_insertion_sort(__first + int(_S_threshold), __last);
+ }
+      else
+ std::__insertion_sort(__first, __last);
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    void
+    __final_insertion_sort(_RandomAccessIterator __first,
+      _RandomAccessIterator __last, _Compare __comp)
+    {
+      if (__last - __first > int(_S_threshold))
+ {
+   std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
+   std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
+       __comp);
+ }
+      else
+ std::__insertion_sort(__first, __last, __comp);
+    }
+  template<typename _RandomAccessIterator, typename _Tp>
+    _RandomAccessIterator
+    __unguarded_partition(_RandomAccessIterator __first,
+     _RandomAccessIterator __last, _Tp __pivot)
+    {
+      while (true)
+ {
+   while (*__first < __pivot)
+     ++__first;
+   --__last;
+   while (__pivot < *__last)
+     --__last;
+   if (!(__first < __last))
+     return __first;
+   std::iter_swap(__first, __last);
+   ++__first;
+ }
+    }
+  template<typename _RandomAccessIterator, typename _Tp, typename _Compare>
+    _RandomAccessIterator
+    __unguarded_partition(_RandomAccessIterator __first,
+     _RandomAccessIterator __last,
+     _Tp __pivot, _Compare __comp)
+    {
+      while (true)
+ {
+   while (__comp(*__first, __pivot))
+     ++__first;
+   --__last;
+   while (__comp(__pivot, *__last))
+     --__last;
+   if (!(__first < __last))
+     return __first;
+   std::iter_swap(__first, __last);
+   ++__first;
+ }
+    }
+  template<typename _RandomAccessIterator, typename _Size>
+    void
+    __introsort_loop(_RandomAccessIterator __first,
+       _RandomAccessIterator __last,
+       _Size __depth_limit)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+      while (__last - __first > int(_S_threshold))
+ {
+   if (__depth_limit == 0)
+     {
+       std::partial_sort(__first, __last, __last);
+       return;
+     }
+   --__depth_limit;
+   _RandomAccessIterator __cut =
+     std::__unguarded_partition(__first, __last,
+           _ValueType(std::__median(*__first,
+        *(__first
+          + (__last
+             - __first)
+          / 2),
+        *(__last
+          - 1))));
+   std::__introsort_loop(__cut, __last, __depth_limit);
+   __last = __cut;
+ }
+    }
+  template<typename _RandomAccessIterator, typename _Size, typename _Compare>
+    void
+    __introsort_loop(_RandomAccessIterator __first,
+       _RandomAccessIterator __last,
+       _Size __depth_limit, _Compare __comp)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+      while (__last - __first > int(_S_threshold))
+ {
+   if (__depth_limit == 0)
+     {
+       std::partial_sort(__first, __last, __last, __comp);
+       return;
+     }
+   --__depth_limit;
+   _RandomAccessIterator __cut =
+     std::__unguarded_partition(__first, __last,
+           _ValueType(std::__median(*__first,
+        *(__first
+          + (__last
+             - __first)
+          / 2),
+        *(__last - 1),
+        __comp)),
+           __comp);
+   std::__introsort_loop(__cut, __last, __depth_limit, __comp);
+   __last = __cut;
+ }
+    }
+  template<typename _Size>
+    inline _Size
+    __lg(_Size __n)
+    {
+      _Size __k;
+      for (__k = 0; __n != 0; __n >>= 1)
+ ++__k;
+      return __k - 1;
+    }
+  inline int
+  __lg(int __n)
+  { return sizeof(int) * 8 - 1 - __builtin_clz(__n); }
+  inline long
+  __lg(long __n)
+  { return sizeof(long) * 8 - 1 - __builtin_clzl(__n); }
+  inline long long
+  __lg(long long __n)
+  { return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); }
+  template<typename _RandomAccessIterator, typename _Size>
+    void
+    __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth,
+    _RandomAccessIterator __last, _Size __depth_limit)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+      while (__last - __first > 3)
+ {
+   if (__depth_limit == 0)
+     {
+       std::__heap_select(__first, __nth + 1, __last);
+       std::iter_swap(__first, __nth);
+       return;
+     }
+   --__depth_limit;
+   _RandomAccessIterator __cut =
+     std::__unguarded_partition(__first, __last,
+           _ValueType(std::__median(*__first,
+        *(__first
+          + (__last
+             - __first)
+          / 2),
+        *(__last
+          - 1))));
+   if (__cut <= __nth)
+     __first = __cut;
+   else
+     __last = __cut;
+ }
+      std::__insertion_sort(__first, __last);
+    }
+  template<typename _RandomAccessIterator, typename _Size, typename _Compare>
+    void
+    __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth,
+    _RandomAccessIterator __last, _Size __depth_limit,
+    _Compare __comp)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+      while (__last - __first > 3)
+ {
+   if (__depth_limit == 0)
+     {
+       std::__heap_select(__first, __nth + 1, __last, __comp);
+       std::iter_swap(__first, __nth);
+       return;
+     }
+   --__depth_limit;
+   _RandomAccessIterator __cut =
+     std::__unguarded_partition(__first, __last,
+           _ValueType(std::__median(*__first,
+        *(__first
+          + (__last
+             - __first)
+          / 2),
+        *(__last - 1),
+        __comp)),
+           __comp);
+   if (__cut <= __nth)
+     __first = __cut;
+   else
+     __last = __cut;
+ }
+      std::__insertion_sort(__first, __last, __comp);
+    }
+  template<typename _ForwardIterator, typename _Tp>
+    _ForwardIterator
+    lower_bound(_ForwardIterator __first, _ForwardIterator __last,
+  const _Tp& __val)
+    {
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+      typedef typename iterator_traits<_ForwardIterator>::difference_type
+ _DistanceType;
+     
+     
+      ;
+      _DistanceType __len = std::distance(__first, __last);
+      _DistanceType __half;
+      _ForwardIterator __middle;
+      while (__len > 0)
+ {
+   __half = __len >> 1;
+   __middle = __first;
+   std::advance(__middle, __half);
+   if (*__middle < __val)
+     {
+       __first = __middle;
+       ++__first;
+       __len = __len - __half - 1;
+     }
+   else
+     __len = __half;
+ }
+      return __first;
+    }
+  template<typename _ForwardIterator, typename _Tp, typename _Compare>
+    _ForwardIterator
+    lower_bound(_ForwardIterator __first, _ForwardIterator __last,
+  const _Tp& __val, _Compare __comp)
+    {
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+      typedef typename iterator_traits<_ForwardIterator>::difference_type
+ _DistanceType;
+     
+     
+      ;
+      _DistanceType __len = std::distance(__first, __last);
+      _DistanceType __half;
+      _ForwardIterator __middle;
+      while (__len > 0)
+ {
+   __half = __len >> 1;
+   __middle = __first;
+   std::advance(__middle, __half);
+   if (__comp(*__middle, __val))
+     {
+       __first = __middle;
+       ++__first;
+       __len = __len - __half - 1;
+     }
+   else
+     __len = __half;
+ }
+      return __first;
+    }
+  template<typename _ForwardIterator, typename _Tp>
+    _ForwardIterator
+    upper_bound(_ForwardIterator __first, _ForwardIterator __last,
+  const _Tp& __val)
+    {
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+      typedef typename iterator_traits<_ForwardIterator>::difference_type
+ _DistanceType;
+     
+     
+      ;
+      _DistanceType __len = std::distance(__first, __last);
+      _DistanceType __half;
+      _ForwardIterator __middle;
+      while (__len > 0)
+ {
+   __half = __len >> 1;
+   __middle = __first;
+   std::advance(__middle, __half);
+   if (__val < *__middle)
+     __len = __half;
+   else
+     {
+       __first = __middle;
+       ++__first;
+       __len = __len - __half - 1;
+     }
+ }
+      return __first;
+    }
+  template<typename _ForwardIterator, typename _Tp, typename _Compare>
+    _ForwardIterator
+    upper_bound(_ForwardIterator __first, _ForwardIterator __last,
+  const _Tp& __val, _Compare __comp)
+    {
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+      typedef typename iterator_traits<_ForwardIterator>::difference_type
+ _DistanceType;
+     
+     
+      ;
+      _DistanceType __len = std::distance(__first, __last);
+      _DistanceType __half;
+      _ForwardIterator __middle;
+      while (__len > 0)
+ {
+   __half = __len >> 1;
+   __middle = __first;
+   std::advance(__middle, __half);
+   if (__comp(__val, *__middle))
+     __len = __half;
+   else
+     {
+       __first = __middle;
+       ++__first;
+       __len = __len - __half - 1;
+     }
+ }
+      return __first;
+    }
+  template<typename _ForwardIterator, typename _Tp>
+    pair<_ForwardIterator, _ForwardIterator>
+    equal_range(_ForwardIterator __first, _ForwardIterator __last,
+  const _Tp& __val)
+    {
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+      typedef typename iterator_traits<_ForwardIterator>::difference_type
+ _DistanceType;
+     
+     
+     
+      ;
+      ;
+      _DistanceType __len = std::distance(__first, __last);
+      _DistanceType __half;
+      _ForwardIterator __middle, __left, __right;
+      while (__len > 0)
+ {
+   __half = __len >> 1;
+   __middle = __first;
+   std::advance(__middle, __half);
+   if (*__middle < __val)
+     {
+       __first = __middle;
+       ++__first;
+       __len = __len - __half - 1;
+     }
+   else if (__val < *__middle)
+     __len = __half;
+   else
+     {
+       __left = std::lower_bound(__first, __middle, __val);
+       std::advance(__first, __len);
+       __right = std::upper_bound(++__middle, __first, __val);
+       return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
+     }
+ }
+      return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
+    }
+  template<typename _ForwardIterator, typename _Tp, typename _Compare>
+    pair<_ForwardIterator, _ForwardIterator>
+    equal_range(_ForwardIterator __first, _ForwardIterator __last,
+  const _Tp& __val,
+  _Compare __comp)
+    {
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+      typedef typename iterator_traits<_ForwardIterator>::difference_type
+ _DistanceType;
+     
+     
+     
+      ;
+      ;
+      _DistanceType __len = std::distance(__first, __last);
+      _DistanceType __half;
+      _ForwardIterator __middle, __left, __right;
+      while (__len > 0)
+ {
+   __half = __len >> 1;
+   __middle = __first;
+   std::advance(__middle, __half);
+   if (__comp(*__middle, __val))
+     {
+       __first = __middle;
+       ++__first;
+       __len = __len - __half - 1;
+     }
+   else if (__comp(__val, *__middle))
+     __len = __half;
+   else
+     {
+       __left = std::lower_bound(__first, __middle, __val, __comp);
+       std::advance(__first, __len);
+       __right = std::upper_bound(++__middle, __first, __val, __comp);
+       return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
+     }
+ }
+      return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
+    }
+  template<typename _ForwardIterator, typename _Tp>
+    bool
+    binary_search(_ForwardIterator __first, _ForwardIterator __last,
+                  const _Tp& __val)
+    {
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+     
+     
+      ;
+      ;
+      _ForwardIterator __i = std::lower_bound(__first, __last, __val);
+      return __i != __last && !(__val < *__i);
+    }
+  template<typename _ForwardIterator, typename _Tp, typename _Compare>
+    bool
+    binary_search(_ForwardIterator __first, _ForwardIterator __last,
+                  const _Tp& __val, _Compare __comp)
+    {
+      typedef typename iterator_traits<_ForwardIterator>::value_type
+ _ValueType;
+     
+     
+      ;
+      ;
+      _ForwardIterator __i = std::lower_bound(__first, __last, __val, __comp);
+      return __i != __last && !bool(__comp(__val, *__i));
+    }
+  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
+    typename _BidirectionalIterator3>
+    _BidirectionalIterator3
+    __merge_backward(_BidirectionalIterator1 __first1,
+       _BidirectionalIterator1 __last1,
+       _BidirectionalIterator2 __first2,
+       _BidirectionalIterator2 __last2,
+       _BidirectionalIterator3 __result)
+    {
+      if (__first1 == __last1)
+ return std::copy_backward(__first2, __last2, __result);
+      if (__first2 == __last2)
+ return std::copy_backward(__first1, __last1, __result);
+      --__last1;
+      --__last2;
+      while (true)
+ {
+   if (*__last2 < *__last1)
+     {
+       *--__result = *__last1;
+       if (__first1 == __last1)
+  return std::copy_backward(__first2, ++__last2, __result);
+       --__last1;
+     }
+   else
+     {
+       *--__result = *__last2;
+       if (__first2 == __last2)
+  return std::copy_backward(__first1, ++__last1, __result);
+       --__last2;
+     }
+ }
+    }
+  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
+    typename _BidirectionalIterator3, typename _Compare>
+    _BidirectionalIterator3
+    __merge_backward(_BidirectionalIterator1 __first1,
+       _BidirectionalIterator1 __last1,
+       _BidirectionalIterator2 __first2,
+       _BidirectionalIterator2 __last2,
+       _BidirectionalIterator3 __result,
+       _Compare __comp)
+    {
+      if (__first1 == __last1)
+ return std::copy_backward(__first2, __last2, __result);
+      if (__first2 == __last2)
+ return std::copy_backward(__first1, __last1, __result);
+      --__last1;
+      --__last2;
+      while (true)
+ {
+   if (__comp(*__last2, *__last1))
+     {
+       *--__result = *__last1;
+       if (__first1 == __last1)
+  return std::copy_backward(__first2, ++__last2, __result);
+       --__last1;
+     }
+   else
+     {
+       *--__result = *__last2;
+       if (__first2 == __last2)
+  return std::copy_backward(__first1, ++__last1, __result);
+       --__last2;
+     }
+ }
+    }
+  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
+    typename _Distance>
+    _BidirectionalIterator1
+    __rotate_adaptive(_BidirectionalIterator1 __first,
+        _BidirectionalIterator1 __middle,
+        _BidirectionalIterator1 __last,
+        _Distance __len1, _Distance __len2,
+        _BidirectionalIterator2 __buffer,
+        _Distance __buffer_size)
+    {
+      _BidirectionalIterator2 __buffer_end;
+      if (__len1 > __len2 && __len2 <= __buffer_size)
+ {
+   __buffer_end = std::copy(__middle, __last, __buffer);
+   std::copy_backward(__first, __middle, __last);
+   return std::copy(__buffer, __buffer_end, __first);
+ }
+      else if (__len1 <= __buffer_size)
+ {
+   __buffer_end = std::copy(__first, __middle, __buffer);
+   std::copy(__middle, __last, __first);
+   return std::copy_backward(__buffer, __buffer_end, __last);
+ }
+      else
+ {
+   std::rotate(__first, __middle, __last);
+   std::advance(__first, std::distance(__middle, __last));
+   return __first;
+ }
+    }
+  template<typename _BidirectionalIterator, typename _Distance,
+    typename _Pointer>
+    void
+    __merge_adaptive(_BidirectionalIterator __first,
+                     _BidirectionalIterator __middle,
+       _BidirectionalIterator __last,
+       _Distance __len1, _Distance __len2,
+       _Pointer __buffer, _Distance __buffer_size)
+    {
+      if (__len1 <= __len2 && __len1 <= __buffer_size)
+ {
+   _Pointer __buffer_end = std::copy(__first, __middle, __buffer);
+   std::merge(__buffer, __buffer_end, __middle, __last,
+    __first);
+ }
+      else if (__len2 <= __buffer_size)
+ {
+   _Pointer __buffer_end = std::copy(__middle, __last, __buffer);
+   std::__merge_backward(__first, __middle, __buffer,
+    __buffer_end, __last);
+ }
+      else
+ {
+   _BidirectionalIterator __first_cut = __first;
+   _BidirectionalIterator __second_cut = __middle;
+   _Distance __len11 = 0;
+   _Distance __len22 = 0;
+   if (__len1 > __len2)
+     {
+       __len11 = __len1 / 2;
+       std::advance(__first_cut, __len11);
+       __second_cut = std::lower_bound(__middle, __last,
+           *__first_cut);
+       __len22 = std::distance(__middle, __second_cut);
+     }
+   else
+     {
+       __len22 = __len2 / 2;
+       std::advance(__second_cut, __len22);
+       __first_cut = std::upper_bound(__first, __middle,
+          *__second_cut);
+       __len11 = std::distance(__first, __first_cut);
+     }
+   _BidirectionalIterator __new_middle =
+     std::__rotate_adaptive(__first_cut, __middle, __second_cut,
+       __len1 - __len11, __len22, __buffer,
+       __buffer_size);
+   std::__merge_adaptive(__first, __first_cut, __new_middle, __len11,
+    __len22, __buffer, __buffer_size);
+   std::__merge_adaptive(__new_middle, __second_cut, __last,
+    __len1 - __len11,
+    __len2 - __len22, __buffer, __buffer_size);
+ }
+    }
+  template<typename _BidirectionalIterator, typename _Distance,
+    typename _Pointer, typename _Compare>
+    void
+    __merge_adaptive(_BidirectionalIterator __first,
+                     _BidirectionalIterator __middle,
+       _BidirectionalIterator __last,
+       _Distance __len1, _Distance __len2,
+       _Pointer __buffer, _Distance __buffer_size,
+       _Compare __comp)
+    {
+      if (__len1 <= __len2 && __len1 <= __buffer_size)
+ {
+   _Pointer __buffer_end = std::copy(__first, __middle, __buffer);
+   std::merge(__buffer, __buffer_end, __middle, __last,
+    __first, __comp);
+ }
+      else if (__len2 <= __buffer_size)
+ {
+   _Pointer __buffer_end = std::copy(__middle, __last, __buffer);
+   std::__merge_backward(__first, __middle, __buffer, __buffer_end,
+    __last, __comp);
+ }
+      else
+ {
+   _BidirectionalIterator __first_cut = __first;
+   _BidirectionalIterator __second_cut = __middle;
+   _Distance __len11 = 0;
+   _Distance __len22 = 0;
+   if (__len1 > __len2)
+     {
+       __len11 = __len1 / 2;
+       std::advance(__first_cut, __len11);
+       __second_cut = std::lower_bound(__middle, __last, *__first_cut,
+           __comp);
+       __len22 = std::distance(__middle, __second_cut);
+     }
+   else
+     {
+       __len22 = __len2 / 2;
+       std::advance(__second_cut, __len22);
+       __first_cut = std::upper_bound(__first, __middle, *__second_cut,
+          __comp);
+       __len11 = std::distance(__first, __first_cut);
+     }
+   _BidirectionalIterator __new_middle =
+     std::__rotate_adaptive(__first_cut, __middle, __second_cut,
+       __len1 - __len11, __len22, __buffer,
+       __buffer_size);
+   std::__merge_adaptive(__first, __first_cut, __new_middle, __len11,
+    __len22, __buffer, __buffer_size, __comp);
+   std::__merge_adaptive(__new_middle, __second_cut, __last,
+    __len1 - __len11,
+    __len2 - __len22, __buffer,
+    __buffer_size, __comp);
+ }
+    }
+  template<typename _BidirectionalIterator, typename _Distance>
+    void
+    __merge_without_buffer(_BidirectionalIterator __first,
+      _BidirectionalIterator __middle,
+      _BidirectionalIterator __last,
+      _Distance __len1, _Distance __len2)
+    {
+      if (__len1 == 0 || __len2 == 0)
+ return;
+      if (__len1 + __len2 == 2)
+ {
+   if (*__middle < *__first)
+     std::iter_swap(__first, __middle);
+   return;
+ }
+      _BidirectionalIterator __first_cut = __first;
+      _BidirectionalIterator __second_cut = __middle;
+      _Distance __len11 = 0;
+      _Distance __len22 = 0;
+      if (__len1 > __len2)
+ {
+   __len11 = __len1 / 2;
+   std::advance(__first_cut, __len11);
+   __second_cut = std::lower_bound(__middle, __last, *__first_cut);
+   __len22 = std::distance(__middle, __second_cut);
+ }
+      else
+ {
+   __len22 = __len2 / 2;
+   std::advance(__second_cut, __len22);
+   __first_cut = std::upper_bound(__first, __middle, *__second_cut);
+   __len11 = std::distance(__first, __first_cut);
+ }
+      std::rotate(__first_cut, __middle, __second_cut);
+      _BidirectionalIterator __new_middle = __first_cut;
+      std::advance(__new_middle, std::distance(__middle, __second_cut));
+      std::__merge_without_buffer(__first, __first_cut, __new_middle,
+      __len11, __len22);
+      std::__merge_without_buffer(__new_middle, __second_cut, __last,
+      __len1 - __len11, __len2 - __len22);
+    }
+  template<typename _BidirectionalIterator, typename _Distance,
+    typename _Compare>
+    void
+    __merge_without_buffer(_BidirectionalIterator __first,
+                           _BidirectionalIterator __middle,
+      _BidirectionalIterator __last,
+      _Distance __len1, _Distance __len2,
+      _Compare __comp)
+    {
+      if (__len1 == 0 || __len2 == 0)
+ return;
+      if (__len1 + __len2 == 2)
+ {
+   if (__comp(*__middle, *__first))
+     std::iter_swap(__first, __middle);
+   return;
+ }
+      _BidirectionalIterator __first_cut = __first;
+      _BidirectionalIterator __second_cut = __middle;
+      _Distance __len11 = 0;
+      _Distance __len22 = 0;
+      if (__len1 > __len2)
+ {
+   __len11 = __len1 / 2;
+   std::advance(__first_cut, __len11);
+   __second_cut = std::lower_bound(__middle, __last, *__first_cut,
+       __comp);
+   __len22 = std::distance(__middle, __second_cut);
+ }
+      else
+ {
+   __len22 = __len2 / 2;
+   std::advance(__second_cut, __len22);
+   __first_cut = std::upper_bound(__first, __middle, *__second_cut,
+      __comp);
+   __len11 = std::distance(__first, __first_cut);
+ }
+      std::rotate(__first_cut, __middle, __second_cut);
+      _BidirectionalIterator __new_middle = __first_cut;
+      std::advance(__new_middle, std::distance(__middle, __second_cut));
+      std::__merge_without_buffer(__first, __first_cut, __new_middle,
+      __len11, __len22, __comp);
+      std::__merge_without_buffer(__new_middle, __second_cut, __last,
+      __len1 - __len11, __len2 - __len22, __comp);
+    }
+  template<typename _BidirectionalIterator>
+    void
+    inplace_merge(_BidirectionalIterator __first,
+    _BidirectionalIterator __middle,
+    _BidirectionalIterator __last)
+    {
+      typedef typename iterator_traits<_BidirectionalIterator>::value_type
+          _ValueType;
+      typedef typename iterator_traits<_BidirectionalIterator>::difference_type
+          _DistanceType;
+     
+     
+      ;
+      ;
+      if (__first == __middle || __middle == __last)
+ return;
+      _DistanceType __len1 = std::distance(__first, __middle);
+      _DistanceType __len2 = std::distance(__middle, __last);
+      _Temporary_buffer<_BidirectionalIterator, _ValueType> __buf(__first,
+          __last);
+      if (__buf.begin() == 0)
+ std::__merge_without_buffer(__first, __middle, __last, __len1, __len2);
+      else
+ std::__merge_adaptive(__first, __middle, __last, __len1, __len2,
+         __buf.begin(), _DistanceType(__buf.size()));
+    }
+  template<typename _BidirectionalIterator, typename _Compare>
+    void
+    inplace_merge(_BidirectionalIterator __first,
+    _BidirectionalIterator __middle,
+    _BidirectionalIterator __last,
+    _Compare __comp)
+    {
+      typedef typename iterator_traits<_BidirectionalIterator>::value_type
+          _ValueType;
+      typedef typename iterator_traits<_BidirectionalIterator>::difference_type
+          _DistanceType;
+     
+     
+      ;
+      ;
+      if (__first == __middle || __middle == __last)
+ return;
+      const _DistanceType __len1 = std::distance(__first, __middle);
+      const _DistanceType __len2 = std::distance(__middle, __last);
+      _Temporary_buffer<_BidirectionalIterator, _ValueType> __buf(__first,
+          __last);
+      if (__buf.begin() == 0)
+ std::__merge_without_buffer(__first, __middle, __last, __len1,
+        __len2, __comp);
+      else
+ std::__merge_adaptive(__first, __middle, __last, __len1, __len2,
+         __buf.begin(), _DistanceType(__buf.size()),
+         __comp);
+    }
+  template<typename _RandomAccessIterator1, typename _RandomAccessIterator2,
+    typename _Distance>
+    void
+    __merge_sort_loop(_RandomAccessIterator1 __first,
+        _RandomAccessIterator1 __last,
+        _RandomAccessIterator2 __result,
+        _Distance __step_size)
+    {
+      const _Distance __two_step = 2 * __step_size;
+      while (__last - __first >= __two_step)
+ {
+   __result = std::merge(__first, __first + __step_size,
+        __first + __step_size,
+        __first + __two_step,
+        __result);
+   __first += __two_step;
+ }
+      __step_size = std::min(_Distance(__last - __first), __step_size);
+      std::merge(__first, __first + __step_size,
+       __first + __step_size, __last,
+       __result);
+    }
+  template<typename _RandomAccessIterator1, typename _RandomAccessIterator2,
+    typename _Distance, typename _Compare>
+    void
+    __merge_sort_loop(_RandomAccessIterator1 __first,
+        _RandomAccessIterator1 __last,
+        _RandomAccessIterator2 __result, _Distance __step_size,
+        _Compare __comp)
+    {
+      const _Distance __two_step = 2 * __step_size;
+      while (__last - __first >= __two_step)
+ {
+   __result = std::merge(__first, __first + __step_size,
+    __first + __step_size, __first + __two_step,
+    __result,
+    __comp);
+   __first += __two_step;
+ }
+      __step_size = std::min(_Distance(__last - __first), __step_size);
+      std::merge(__first, __first + __step_size,
+       __first + __step_size, __last, __result, __comp);
+    }
+  template<typename _RandomAccessIterator, typename _Distance>
+    void
+    __chunk_insertion_sort(_RandomAccessIterator __first,
+      _RandomAccessIterator __last,
+      _Distance __chunk_size)
+    {
+      while (__last - __first >= __chunk_size)
+ {
+   std::__insertion_sort(__first, __first + __chunk_size);
+   __first += __chunk_size;
+ }
+      std::__insertion_sort(__first, __last);
+    }
+  template<typename _RandomAccessIterator, typename _Distance,
+    typename _Compare>
+    void
+    __chunk_insertion_sort(_RandomAccessIterator __first,
+      _RandomAccessIterator __last,
+      _Distance __chunk_size, _Compare __comp)
+    {
+      while (__last - __first >= __chunk_size)
+ {
+   std::__insertion_sort(__first, __first + __chunk_size, __comp);
+   __first += __chunk_size;
+ }
+      std::__insertion_sort(__first, __last, __comp);
+    }
+  enum { _S_chunk_size = 7 };
+  template<typename _RandomAccessIterator, typename _Pointer>
+    void
+    __merge_sort_with_buffer(_RandomAccessIterator __first,
+        _RandomAccessIterator __last,
+                             _Pointer __buffer)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+ _Distance;
+      const _Distance __len = __last - __first;
+      const _Pointer __buffer_last = __buffer + __len;
+      _Distance __step_size = _S_chunk_size;
+      std::__chunk_insertion_sort(__first, __last, __step_size);
+      while (__step_size < __len)
+ {
+   std::__merge_sort_loop(__first, __last, __buffer, __step_size);
+   __step_size *= 2;
+   std::__merge_sort_loop(__buffer, __buffer_last, __first, __step_size);
+   __step_size *= 2;
+ }
+    }
+  template<typename _RandomAccessIterator, typename _Pointer, typename _Compare>
+    void
+    __merge_sort_with_buffer(_RandomAccessIterator __first,
+        _RandomAccessIterator __last,
+                             _Pointer __buffer, _Compare __comp)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+ _Distance;
+      const _Distance __len = __last - __first;
+      const _Pointer __buffer_last = __buffer + __len;
+      _Distance __step_size = _S_chunk_size;
+      std::__chunk_insertion_sort(__first, __last, __step_size, __comp);
+      while (__step_size < __len)
+ {
+   std::__merge_sort_loop(__first, __last, __buffer,
+     __step_size, __comp);
+   __step_size *= 2;
+   std::__merge_sort_loop(__buffer, __buffer_last, __first,
+     __step_size, __comp);
+   __step_size *= 2;
+ }
+    }
+  template<typename _RandomAccessIterator, typename _Pointer,
+    typename _Distance>
+    void
+    __stable_sort_adaptive(_RandomAccessIterator __first,
+      _RandomAccessIterator __last,
+                           _Pointer __buffer, _Distance __buffer_size)
+    {
+      const _Distance __len = (__last - __first + 1) / 2;
+      const _RandomAccessIterator __middle = __first + __len;
+      if (__len > __buffer_size)
+ {
+   std::__stable_sort_adaptive(__first, __middle,
+          __buffer, __buffer_size);
+   std::__stable_sort_adaptive(__middle, __last,
+          __buffer, __buffer_size);
+ }
+      else
+ {
+   std::__merge_sort_with_buffer(__first, __middle, __buffer);
+   std::__merge_sort_with_buffer(__middle, __last, __buffer);
+ }
+      std::__merge_adaptive(__first, __middle, __last,
+       _Distance(__middle - __first),
+       _Distance(__last - __middle),
+       __buffer, __buffer_size);
+    }
+  template<typename _RandomAccessIterator, typename _Pointer,
+    typename _Distance, typename _Compare>
+    void
+    __stable_sort_adaptive(_RandomAccessIterator __first,
+      _RandomAccessIterator __last,
+                           _Pointer __buffer, _Distance __buffer_size,
+                           _Compare __comp)
+    {
+      const _Distance __len = (__last - __first + 1) / 2;
+      const _RandomAccessIterator __middle = __first + __len;
+      if (__len > __buffer_size)
+ {
+   std::__stable_sort_adaptive(__first, __middle, __buffer,
+          __buffer_size, __comp);
+   std::__stable_sort_adaptive(__middle, __last, __buffer,
+          __buffer_size, __comp);
+ }
+      else
+ {
+   std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp);
+   std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp);
+ }
+      std::__merge_adaptive(__first, __middle, __last,
+       _Distance(__middle - __first),
+       _Distance(__last - __middle),
+       __buffer, __buffer_size,
+       __comp);
+    }
+  template<typename _RandomAccessIterator>
+    void
+    __inplace_stable_sort(_RandomAccessIterator __first,
+     _RandomAccessIterator __last)
+    {
+      if (__last - __first < 15)
+ {
+   std::__insertion_sort(__first, __last);
+   return;
+ }
+      _RandomAccessIterator __middle = __first + (__last - __first) / 2;
+      std::__inplace_stable_sort(__first, __middle);
+      std::__inplace_stable_sort(__middle, __last);
+      std::__merge_without_buffer(__first, __middle, __last,
+      __middle - __first,
+      __last - __middle);
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    void
+    __inplace_stable_sort(_RandomAccessIterator __first,
+     _RandomAccessIterator __last, _Compare __comp)
+    {
+      if (__last - __first < 15)
+ {
+   std::__insertion_sort(__first, __last, __comp);
+   return;
+ }
+      _RandomAccessIterator __middle = __first + (__last - __first) / 2;
+      std::__inplace_stable_sort(__first, __middle, __comp);
+      std::__inplace_stable_sort(__middle, __last, __comp);
+      std::__merge_without_buffer(__first, __middle, __last,
+      __middle - __first,
+      __last - __middle,
+      __comp);
+    }
+  template<typename _InputIterator1, typename _InputIterator2>
+    bool
+    includes(_InputIterator1 __first1, _InputIterator1 __last1,
+      _InputIterator2 __first2, _InputIterator2 __last2)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ if (*__first2 < *__first1)
+   return false;
+ else if(*__first1 < *__first2)
+   ++__first1;
+ else
+   ++__first1, ++__first2;
+      return __first2 == __last2;
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _Compare>
+    bool
+    includes(_InputIterator1 __first1, _InputIterator1 __last1,
+      _InputIterator2 __first2, _InputIterator2 __last2,
+      _Compare __comp)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ if (__comp(*__first2, *__first1))
+   return false;
+ else if(__comp(*__first1, *__first2))
+   ++__first1;
+ else
+   ++__first1, ++__first2;
+      return __first2 == __last2;
+    }
+  template<typename _BidirectionalIterator>
+    bool
+    next_permutation(_BidirectionalIterator __first,
+       _BidirectionalIterator __last)
+    {
+     
+     
+      ;
+      if (__first == __last)
+ return false;
+      _BidirectionalIterator __i = __first;
+      ++__i;
+      if (__i == __last)
+ return false;
+      __i = __last;
+      --__i;
+      for(;;)
+ {
+   _BidirectionalIterator __ii = __i;
+   --__i;
+   if (*__i < *__ii)
+     {
+       _BidirectionalIterator __j = __last;
+       while (!(*__i < *--__j))
+  {}
+       std::iter_swap(__i, __j);
+       std::reverse(__ii, __last);
+       return true;
+     }
+   if (__i == __first)
+     {
+       std::reverse(__first, __last);
+       return false;
+     }
+ }
+    }
+  template<typename _BidirectionalIterator, typename _Compare>
+    bool
+    next_permutation(_BidirectionalIterator __first,
+       _BidirectionalIterator __last, _Compare __comp)
+    {
+     
+     
+      ;
+      if (__first == __last)
+ return false;
+      _BidirectionalIterator __i = __first;
+      ++__i;
+      if (__i == __last)
+ return false;
+      __i = __last;
+      --__i;
+      for(;;)
+ {
+   _BidirectionalIterator __ii = __i;
+   --__i;
+   if (__comp(*__i, *__ii))
+     {
+       _BidirectionalIterator __j = __last;
+       while (!bool(__comp(*__i, *--__j)))
+  {}
+       std::iter_swap(__i, __j);
+       std::reverse(__ii, __last);
+       return true;
+     }
+   if (__i == __first)
+     {
+       std::reverse(__first, __last);
+       return false;
+     }
+ }
+    }
+  template<typename _BidirectionalIterator>
+    bool
+    prev_permutation(_BidirectionalIterator __first,
+       _BidirectionalIterator __last)
+    {
+     
+     
+      ;
+      if (__first == __last)
+ return false;
+      _BidirectionalIterator __i = __first;
+      ++__i;
+      if (__i == __last)
+ return false;
+      __i = __last;
+      --__i;
+      for(;;)
+ {
+   _BidirectionalIterator __ii = __i;
+   --__i;
+   if (*__ii < *__i)
+     {
+       _BidirectionalIterator __j = __last;
+       while (!(*--__j < *__i))
+  {}
+       std::iter_swap(__i, __j);
+       std::reverse(__ii, __last);
+       return true;
+     }
+   if (__i == __first)
+     {
+       std::reverse(__first, __last);
+       return false;
+     }
+ }
+    }
+  template<typename _BidirectionalIterator, typename _Compare>
+    bool
+    prev_permutation(_BidirectionalIterator __first,
+       _BidirectionalIterator __last, _Compare __comp)
+    {
+     
+     
+      ;
+      if (__first == __last)
+ return false;
+      _BidirectionalIterator __i = __first;
+      ++__i;
+      if (__i == __last)
+ return false;
+      __i = __last;
+      --__i;
+      for(;;)
+ {
+   _BidirectionalIterator __ii = __i;
+   --__i;
+   if (__comp(*__ii, *__i))
+     {
+       _BidirectionalIterator __j = __last;
+       while (!bool(__comp(*--__j, *__i)))
+  {}
+       std::iter_swap(__i, __j);
+       std::reverse(__ii, __last);
+       return true;
+     }
+   if (__i == __first)
+     {
+       std::reverse(__first, __last);
+       return false;
+     }
+ }
+    }
+  template<typename _InputIterator, typename _OutputIterator, typename _Tp>
+    _OutputIterator
+    replace_copy(_InputIterator __first, _InputIterator __last,
+   _OutputIterator __result,
+   const _Tp& __old_value, const _Tp& __new_value)
+    {
+     
+     
+     
+      ;
+      for (; __first != __last; ++__first, ++__result)
+ if (*__first == __old_value)
+   *__result = __new_value;
+ else
+   *__result = *__first;
+      return __result;
+    }
+  template<typename _InputIterator, typename _OutputIterator,
+    typename _Predicate, typename _Tp>
+    _OutputIterator
+    replace_copy_if(_InputIterator __first, _InputIterator __last,
+      _OutputIterator __result,
+      _Predicate __pred, const _Tp& __new_value)
+    {
+     
+     
+     
+      ;
+      for (; __first != __last; ++__first, ++__result)
+ if (__pred(*__first))
+   *__result = __new_value;
+ else
+   *__result = *__first;
+      return __result;
+    }
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  template<typename _InputIterator, typename _Function>
+    _Function
+    for_each(_InputIterator __first, _InputIterator __last, _Function __f)
+    {
+     
+      ;
+      for (; __first != __last; ++__first)
+ __f(*__first);
+      return __f;
+    }
+  template<typename _InputIterator, typename _Tp>
+    inline _InputIterator
+    find(_InputIterator __first, _InputIterator __last,
+  const _Tp& __val)
+    {
+     
+     
+      ;
+      return std::__find(__first, __last, __val,
+           std::__iterator_category(__first));
+    }
+  template<typename _InputIterator, typename _Predicate>
+    inline _InputIterator
+    find_if(_InputIterator __first, _InputIterator __last,
+     _Predicate __pred)
+    {
+     
+     
+      ;
+      return std::__find_if(__first, __last, __pred,
+       std::__iterator_category(__first));
+    }
+  template<typename _InputIterator, typename _ForwardIterator>
+    _InputIterator
+    find_first_of(_InputIterator __first1, _InputIterator __last1,
+    _ForwardIterator __first2, _ForwardIterator __last2)
+    {
+     
+     
+     
+      ;
+      ;
+      for (; __first1 != __last1; ++__first1)
+ for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
+   if (*__first1 == *__iter)
+     return __first1;
+      return __last1;
+    }
+  template<typename _InputIterator, typename _ForwardIterator,
+    typename _BinaryPredicate>
+    _InputIterator
+    find_first_of(_InputIterator __first1, _InputIterator __last1,
+    _ForwardIterator __first2, _ForwardIterator __last2,
+    _BinaryPredicate __comp)
+    {
+     
+     
+     
+      ;
+      ;
+      for (; __first1 != __last1; ++__first1)
+ for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
+   if (__comp(*__first1, *__iter))
+     return __first1;
+      return __last1;
+    }
+  template<typename _ForwardIterator>
+    _ForwardIterator
+    adjacent_find(_ForwardIterator __first, _ForwardIterator __last)
+    {
+     
+     
+      ;
+      if (__first == __last)
+ return __last;
+      _ForwardIterator __next = __first;
+      while(++__next != __last)
+ {
+   if (*__first == *__next)
+     return __first;
+   __first = __next;
+ }
+      return __last;
+    }
+  template<typename _ForwardIterator, typename _BinaryPredicate>
+    _ForwardIterator
+    adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
+    _BinaryPredicate __binary_pred)
+    {
+     
+     
+      ;
+      if (__first == __last)
+ return __last;
+      _ForwardIterator __next = __first;
+      while(++__next != __last)
+ {
+   if (__binary_pred(*__first, *__next))
+     return __first;
+   __first = __next;
+ }
+      return __last;
+    }
+  template<typename _InputIterator, typename _Tp>
+    typename iterator_traits<_InputIterator>::difference_type
+    count(_InputIterator __first, _InputIterator __last, const _Tp& __value)
+    {
+     
+     
+      ;
+      typename iterator_traits<_InputIterator>::difference_type __n = 0;
+      for (; __first != __last; ++__first)
+ if (*__first == __value)
+   ++__n;
+      return __n;
+    }
+  template<typename _InputIterator, typename _Predicate>
+    typename iterator_traits<_InputIterator>::difference_type
+    count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
+    {
+     
+     
+      ;
+      typename iterator_traits<_InputIterator>::difference_type __n = 0;
+      for (; __first != __last; ++__first)
+ if (__pred(*__first))
+   ++__n;
+      return __n;
+    }
+  template<typename _ForwardIterator1, typename _ForwardIterator2>
+    _ForwardIterator1
+    search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+    _ForwardIterator2 __first2, _ForwardIterator2 __last2)
+    {
+     
+     
+     
+      ;
+      ;
+      if (__first1 == __last1 || __first2 == __last2)
+ return __first1;
+      _ForwardIterator2 __p1(__first2);
+      if (++__p1 == __last2)
+ return std::find(__first1, __last1, *__first2);
+      _ForwardIterator2 __p;
+      _ForwardIterator1 __current = __first1;
+      for (;;)
+ {
+   __first1 = std::find(__first1, __last1, *__first2);
+   if (__first1 == __last1)
+     return __last1;
+   __p = __p1;
+   __current = __first1;
+   if (++__current == __last1)
+     return __last1;
+   while (*__current == *__p)
+     {
+       if (++__p == __last2)
+  return __first1;
+       if (++__current == __last1)
+  return __last1;
+     }
+   ++__first1;
+ }
+      return __first1;
+    }
+  template<typename _ForwardIterator1, typename _ForwardIterator2,
+    typename _BinaryPredicate>
+    _ForwardIterator1
+    search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+    _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+    _BinaryPredicate __predicate)
+    {
+     
+     
+     
+      ;
+      ;
+      if (__first1 == __last1 || __first2 == __last2)
+ return __first1;
+      _ForwardIterator2 __p1(__first2);
+      if (++__p1 == __last2)
+ {
+   while (__first1 != __last1
+   && !bool(__predicate(*__first1, *__first2)))
+     ++__first1;
+   return __first1;
+ }
+      _ForwardIterator2 __p;
+      _ForwardIterator1 __current = __first1;
+      for (;;)
+ {
+   while (__first1 != __last1
+   && !bool(__predicate(*__first1, *__first2)))
+     ++__first1;
+   if (__first1 == __last1)
+     return __last1;
+   __p = __p1;
+   __current = __first1;
+   if (++__current == __last1)
+     return __last1;
+   while (__predicate(*__current, *__p))
+     {
+       if (++__p == __last2)
+  return __first1;
+       if (++__current == __last1)
+  return __last1;
+     }
+   ++__first1;
+ }
+      return __first1;
+    }
+  template<typename _ForwardIterator, typename _Integer, typename _Tp>
+    _ForwardIterator
+    search_n(_ForwardIterator __first, _ForwardIterator __last,
+      _Integer __count, const _Tp& __val)
+    {
+     
+     
+      ;
+      if (__count <= 0)
+ return __first;
+      if (__count == 1)
+ return std::find(__first, __last, __val);
+      return std::__search_n(__first, __last, __count, __val,
+        std::__iterator_category(__first));
+    }
+  template<typename _ForwardIterator, typename _Integer, typename _Tp,
+           typename _BinaryPredicate>
+    _ForwardIterator
+    search_n(_ForwardIterator __first, _ForwardIterator __last,
+      _Integer __count, const _Tp& __val,
+      _BinaryPredicate __binary_pred)
+    {
+     
+     
+      ;
+      if (__count <= 0)
+ return __first;
+      if (__count == 1)
+ {
+   while (__first != __last && !bool(__binary_pred(*__first, __val)))
+     ++__first;
+   return __first;
+ }
+      return std::__search_n(__first, __last, __count, __val, __binary_pred,
+        std::__iterator_category(__first));
+    }
+  template<typename _InputIterator, typename _OutputIterator,
+    typename _UnaryOperation>
+    _OutputIterator
+    transform(_InputIterator __first, _InputIterator __last,
+       _OutputIterator __result, _UnaryOperation __unary_op)
+    {
+     
+     
+      ;
+      for (; __first != __last; ++__first, ++__result)
+ *__result = __unary_op(*__first);
+      return __result;
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _OutputIterator, typename _BinaryOperation>
+    _OutputIterator
+    transform(_InputIterator1 __first1, _InputIterator1 __last1,
+       _InputIterator2 __first2, _OutputIterator __result,
+       _BinaryOperation __binary_op)
+    {
+     
+     
+     
+      ;
+      for (; __first1 != __last1; ++__first1, ++__first2, ++__result)
+ *__result = __binary_op(*__first1, *__first2);
+      return __result;
+    }
+  template<typename _ForwardIterator, typename _Tp>
+    void
+    replace(_ForwardIterator __first, _ForwardIterator __last,
+     const _Tp& __old_value, const _Tp& __new_value)
+    {
+     
+     
+     
+      ;
+      for (; __first != __last; ++__first)
+ if (*__first == __old_value)
+   *__first = __new_value;
+    }
+  template<typename _ForwardIterator, typename _Predicate, typename _Tp>
+    void
+    replace_if(_ForwardIterator __first, _ForwardIterator __last,
+        _Predicate __pred, const _Tp& __new_value)
+    {
+     
+     
+     
+      ;
+      for (; __first != __last; ++__first)
+ if (__pred(*__first))
+   *__first = __new_value;
+    }
+  template<typename _ForwardIterator, typename _Generator>
+    void
+    generate(_ForwardIterator __first, _ForwardIterator __last,
+      _Generator __gen)
+    {
+     
+     
+      ;
+      for (; __first != __last; ++__first)
+ *__first = __gen();
+    }
+  template<typename _OutputIterator, typename _Size, typename _Generator>
+    _OutputIterator
+    generate_n(_OutputIterator __first, _Size __n, _Generator __gen)
+    {
+     
+      for (; __n > 0; --__n, ++__first)
+ *__first = __gen();
+      return __first;
+    }
+  template<typename _InputIterator, typename _OutputIterator>
+    inline _OutputIterator
+    unique_copy(_InputIterator __first, _InputIterator __last,
+  _OutputIterator __result)
+    {
+     
+     
+     
+      ;
+      if (__first == __last)
+ return __result;
+      return std::__unique_copy(__first, __last, __result,
+    std::__iterator_category(__first),
+    std::__iterator_category(__result));
+    }
+  template<typename _InputIterator, typename _OutputIterator,
+    typename _BinaryPredicate>
+    inline _OutputIterator
+    unique_copy(_InputIterator __first, _InputIterator __last,
+  _OutputIterator __result,
+  _BinaryPredicate __binary_pred)
+    {
+     
+     
+      ;
+      if (__first == __last)
+ return __result;
+      return std::__unique_copy(__first, __last, __result, __binary_pred,
+    std::__iterator_category(__first),
+    std::__iterator_category(__result));
+    }
+  template<typename _RandomAccessIterator>
+    inline void
+    random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
+    {
+     
+      ;
+      if (__first != __last)
+ for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+   std::iter_swap(__i, __first + (std::rand() % ((__i - __first) + 1)));
+    }
+  template<typename _RandomAccessIterator, typename _RandomNumberGenerator>
+    void
+    random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
+     _RandomNumberGenerator& __rand)
+    {
+     
+      ;
+      if (__first == __last)
+ return;
+      for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+ std::iter_swap(__i, __first + __rand((__i - __first) + 1));
+    }
+  template<typename _ForwardIterator, typename _Predicate>
+    inline _ForwardIterator
+    partition(_ForwardIterator __first, _ForwardIterator __last,
+       _Predicate __pred)
+    {
+     
+     
+      ;
+      return std::__partition(__first, __last, __pred,
+         std::__iterator_category(__first));
+    }
+  template<typename _RandomAccessIterator>
+    inline void
+    partial_sort(_RandomAccessIterator __first,
+   _RandomAccessIterator __middle,
+   _RandomAccessIterator __last)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+     
+     
+      ;
+      ;
+      std::__heap_select(__first, __middle, __last);
+      std::sort_heap(__first, __middle);
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    inline void
+    partial_sort(_RandomAccessIterator __first,
+   _RandomAccessIterator __middle,
+   _RandomAccessIterator __last,
+   _Compare __comp)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+     
+     
+      ;
+      ;
+      std::__heap_select(__first, __middle, __last, __comp);
+      std::sort_heap(__first, __middle, __comp);
+    }
+  template<typename _RandomAccessIterator>
+    inline void
+    nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
+  _RandomAccessIterator __last)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+     
+     
+      ;
+      ;
+      if (__first == __last || __nth == __last)
+ return;
+      std::__introselect(__first, __nth, __last,
+    std::__lg(__last - __first) * 2);
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    inline void
+    nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
+  _RandomAccessIterator __last, _Compare __comp)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+     
+     
+      ;
+      ;
+      if (__first == __last || __nth == __last)
+ return;
+      std::__introselect(__first, __nth, __last,
+    std::__lg(__last - __first) * 2, __comp);
+    }
+  template<typename _RandomAccessIterator>
+    inline void
+    sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+     
+     
+      ;
+      if (__first != __last)
+ {
+   std::__introsort_loop(__first, __last,
+    std::__lg(__last - __first) * 2);
+   std::__final_insertion_sort(__first, __last);
+ }
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    inline void
+    sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
+  _Compare __comp)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+     
+     
+      ;
+      if (__first != __last)
+ {
+   std::__introsort_loop(__first, __last,
+    std::__lg(__last - __first) * 2, __comp);
+   std::__final_insertion_sort(__first, __last, __comp);
+ }
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _OutputIterator>
+    _OutputIterator
+    merge(_InputIterator1 __first1, _InputIterator1 __last1,
+   _InputIterator2 __first2, _InputIterator2 __last2,
+   _OutputIterator __result)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ {
+   if (*__first2 < *__first1)
+     {
+       *__result = *__first2;
+       ++__first2;
+     }
+   else
+     {
+       *__result = *__first1;
+       ++__first1;
+     }
+   ++__result;
+ }
+      return std::copy(__first2, __last2, std::copy(__first1, __last1,
+          __result));
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _OutputIterator, typename _Compare>
+    _OutputIterator
+    merge(_InputIterator1 __first1, _InputIterator1 __last1,
+   _InputIterator2 __first2, _InputIterator2 __last2,
+   _OutputIterator __result, _Compare __comp)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ {
+   if (__comp(*__first2, *__first1))
+     {
+       *__result = *__first2;
+       ++__first2;
+     }
+   else
+     {
+       *__result = *__first1;
+       ++__first1;
+     }
+   ++__result;
+ }
+      return std::copy(__first2, __last2, std::copy(__first1, __last1,
+          __result));
+    }
+  template<typename _RandomAccessIterator>
+    inline void
+    stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+ _DistanceType;
+     
+     
+      ;
+      _Temporary_buffer<_RandomAccessIterator, _ValueType> __buf(__first,
+         __last);
+      if (__buf.begin() == 0)
+ std::__inplace_stable_sort(__first, __last);
+      else
+ std::__stable_sort_adaptive(__first, __last, __buf.begin(),
+        _DistanceType(__buf.size()));
+    }
+  template<typename _RandomAccessIterator, typename _Compare>
+    inline void
+    stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
+  _Compare __comp)
+    {
+      typedef typename iterator_traits<_RandomAccessIterator>::value_type
+ _ValueType;
+      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+ _DistanceType;
+     
+     
+      ;
+      _Temporary_buffer<_RandomAccessIterator, _ValueType> __buf(__first,
+         __last);
+      if (__buf.begin() == 0)
+ std::__inplace_stable_sort(__first, __last, __comp);
+      else
+ std::__stable_sort_adaptive(__first, __last, __buf.begin(),
+        _DistanceType(__buf.size()), __comp);
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _OutputIterator>
+    _OutputIterator
+    set_union(_InputIterator1 __first1, _InputIterator1 __last1,
+       _InputIterator2 __first2, _InputIterator2 __last2,
+       _OutputIterator __result)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ {
+   if (*__first1 < *__first2)
+     {
+       *__result = *__first1;
+       ++__first1;
+     }
+   else if (*__first2 < *__first1)
+     {
+       *__result = *__first2;
+       ++__first2;
+     }
+   else
+     {
+       *__result = *__first1;
+       ++__first1;
+       ++__first2;
+     }
+   ++__result;
+ }
+      return std::copy(__first2, __last2, std::copy(__first1, __last1,
+          __result));
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _OutputIterator, typename _Compare>
+    _OutputIterator
+    set_union(_InputIterator1 __first1, _InputIterator1 __last1,
+       _InputIterator2 __first2, _InputIterator2 __last2,
+       _OutputIterator __result, _Compare __comp)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ {
+   if (__comp(*__first1, *__first2))
+     {
+       *__result = *__first1;
+       ++__first1;
+     }
+   else if (__comp(*__first2, *__first1))
+     {
+       *__result = *__first2;
+       ++__first2;
+     }
+   else
+     {
+       *__result = *__first1;
+       ++__first1;
+       ++__first2;
+     }
+   ++__result;
+ }
+      return std::copy(__first2, __last2, std::copy(__first1, __last1,
+          __result));
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _OutputIterator>
+    _OutputIterator
+    set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
+       _InputIterator2 __first2, _InputIterator2 __last2,
+       _OutputIterator __result)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ if (*__first1 < *__first2)
+   ++__first1;
+ else if (*__first2 < *__first1)
+   ++__first2;
+ else
+   {
+     *__result = *__first1;
+     ++__first1;
+     ++__first2;
+     ++__result;
+   }
+      return __result;
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _OutputIterator, typename _Compare>
+    _OutputIterator
+    set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
+       _InputIterator2 __first2, _InputIterator2 __last2,
+       _OutputIterator __result, _Compare __comp)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ if (__comp(*__first1, *__first2))
+   ++__first1;
+ else if (__comp(*__first2, *__first1))
+   ++__first2;
+ else
+   {
+     *__result = *__first1;
+     ++__first1;
+     ++__first2;
+     ++__result;
+   }
+      return __result;
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _OutputIterator>
+    _OutputIterator
+    set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+     _InputIterator2 __first2, _InputIterator2 __last2,
+     _OutputIterator __result)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ if (*__first1 < *__first2)
+   {
+     *__result = *__first1;
+     ++__first1;
+     ++__result;
+   }
+ else if (*__first2 < *__first1)
+   ++__first2;
+ else
+   {
+     ++__first1;
+     ++__first2;
+   }
+      return std::copy(__first1, __last1, __result);
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _OutputIterator, typename _Compare>
+    _OutputIterator
+    set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+     _InputIterator2 __first2, _InputIterator2 __last2,
+     _OutputIterator __result, _Compare __comp)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ if (__comp(*__first1, *__first2))
+   {
+     *__result = *__first1;
+     ++__first1;
+     ++__result;
+   }
+ else if (__comp(*__first2, *__first1))
+   ++__first2;
+ else
+   {
+     ++__first1;
+     ++__first2;
+   }
+      return std::copy(__first1, __last1, __result);
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _OutputIterator>
+    _OutputIterator
+    set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+        _InputIterator2 __first2, _InputIterator2 __last2,
+        _OutputIterator __result)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ if (*__first1 < *__first2)
+   {
+     *__result = *__first1;
+     ++__first1;
+     ++__result;
+   }
+ else if (*__first2 < *__first1)
+   {
+     *__result = *__first2;
+     ++__first2;
+     ++__result;
+   }
+ else
+   {
+     ++__first1;
+     ++__first2;
+   }
+      return std::copy(__first2, __last2, std::copy(__first1,
+          __last1, __result));
+    }
+  template<typename _InputIterator1, typename _InputIterator2,
+    typename _OutputIterator, typename _Compare>
+    _OutputIterator
+    set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+        _InputIterator2 __first2, _InputIterator2 __last2,
+        _OutputIterator __result,
+        _Compare __comp)
+    {
+      typedef typename iterator_traits<_InputIterator1>::value_type
+ _ValueType1;
+      typedef typename iterator_traits<_InputIterator2>::value_type
+ _ValueType2;
+     
+     
+     
+     
+     
+     
+      ;
+      ;
+      while (__first1 != __last1 && __first2 != __last2)
+ if (__comp(*__first1, *__first2))
+   {
+     *__result = *__first1;
+     ++__first1;
+     ++__result;
+   }
+ else if (__comp(*__first2, *__first1))
+   {
+     *__result = *__first2;
+     ++__first2;
+     ++__result;
+   }
+ else
+   {
+     ++__first1;
+     ++__first2;
+   }
+      return std::copy(__first2, __last2,
+         std::copy(__first1, __last1, __result));
+    }
+  template<typename _ForwardIterator>
+    _ForwardIterator
+    min_element(_ForwardIterator __first, _ForwardIterator __last)
+    {
+     
+     
+      ;
+      if (__first == __last)
+ return __first;
+      _ForwardIterator __result = __first;
+      while (++__first != __last)
+ if (*__first < *__result)
+   __result = __first;
+      return __result;
+    }
+  template<typename _ForwardIterator, typename _Compare>
+    _ForwardIterator
+    min_element(_ForwardIterator __first, _ForwardIterator __last,
+  _Compare __comp)
+    {
+     
+     
+      ;
+      if (__first == __last)
+ return __first;
+      _ForwardIterator __result = __first;
+      while (++__first != __last)
+ if (__comp(*__first, *__result))
+   __result = __first;
+      return __result;
+    }
+  template<typename _ForwardIterator>
+    _ForwardIterator
+    max_element(_ForwardIterator __first, _ForwardIterator __last)
+    {
+     
+     
+      ;
+      if (__first == __last)
+ return __first;
+      _ForwardIterator __result = __first;
+      while (++__first != __last)
+ if (*__result < *__first)
+   __result = __first;
+      return __result;
+    }
+  template<typename _ForwardIterator, typename _Compare>
+    _ForwardIterator
+    max_element(_ForwardIterator __first, _ForwardIterator __last,
+  _Compare __comp)
+    {
+     
+     
+      ;
+      if (__first == __last) return __first;
+      _ForwardIterator __result = __first;
+      while (++__first != __last)
+ if (__comp(*__result, *__first))
+   __result = __first;
+      return __result;
+    }
+}
+       
+namespace std __attribute__ ((__visibility__ ("default"))) {
+  namespace rel_ops
+  {
+    template <class _Tp>
+      inline bool
+      operator!=(const _Tp& __x, const _Tp& __y)
+      { return !(__x == __y); }
+    template <class _Tp>
+      inline bool
+      operator>(const _Tp& __x, const _Tp& __y)
+      { return __y < __x; }
+    template <class _Tp>
+      inline bool
+      operator<=(const _Tp& __x, const _Tp& __y)
+      { return !(__y < __x); }
+    template <class _Tp>
+      inline bool
+      operator>=(const _Tp& __x, const _Tp& __y)
+      { return !(__x < __y); }
+  }
+}
+static __attribute__ ((__unused__)) inline PyObject*
+SWIG_From_unsigned_SS_long (unsigned long value)
+{
+  return (value > 9223372036854775807L) ?
+    PyLong_FromUnsignedLong(value) : PyInt_FromLong(static_cast< long >(value));
+}
+static __attribute__ ((__unused__)) inline PyObject *
+SWIG_From_unsigned_SS_int (unsigned int value)
+{
+  return SWIG_From_unsigned_SS_long (value);
+}
+namespace Xapian {
+    Query *get_py_query(PyObject *obj) {
+ PyObject * mythis = PyObject_GetAttrString(obj, "this");
+ if (!mythis)
+     return 0;
+ Query * retval = 0;
+ int res = SWIG_Python_ConvertPtrAndOwn(mythis, (void **)&retval, swig_types[40], 0, 0);
+ if (!(res >= 0)) {
+     retval = 0;
+ }
+ if ( --((PyObject*)(mythis))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(mythis)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(mythis))));
+ return retval;
+    }
+}
+static __attribute__ ((__unused__)) inline PyObject *
+SWIG_From_int (int value)
+{
+  return PyInt_FromLong (value);
+}
+PyObject *Xapian_MSet_items_get(Xapian::MSet *mset)
+{
+    PyObject *retval = PyList_New(mset->size());
+    if (retval == 0) {
+ return __null;
+    }
+    Py_ssize_t idx = 0;
+    for (Xapian::MSetIterator i = mset->begin(); i != mset->end(); ++i) {
+ PyObject *t = PyTuple_New(4);
+ if (!t) {
+     if ( --((PyObject*)(retval))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(retval)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(retval))));
+     return __null;
+ }
+ (((PyListObject *)(retval))->ob_item[idx++] = (t));
+ (((PyTupleObject *)(t))->ob_item[0] = PyInt_FromLong(*i));
+ (((PyTupleObject *)(t))->ob_item[1] = PyFloat_FromDouble(i.get_weight()));
+ (((PyTupleObject *)(t))->ob_item[2] = PyInt_FromLong(i.get_rank()));
+ (((PyTupleObject *)(t))->ob_item[3] = PyInt_FromLong(i.get_percent()));
+    }
+    return retval;
+}
+PyObject *Xapian_ESet_items_get(Xapian::ESet *eset)
+{
+    PyObject *retval = PyList_New(eset->size());
+    if (retval == 0) {
+ return __null;
+    }
+    Py_ssize_t idx = 0;
+    for (Xapian::ESetIterator i = eset->begin(); i != eset->end(); ++i) {
+ PyObject *t = PyTuple_New(2);
+ if (!t) {
+     if ( --((PyObject*)(retval))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(retval)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(retval))));
+     return __null;
+ }
+ (((PyListObject *)(retval))->ob_item[idx++] = (t));
+ PyObject * str = PyString_FromStringAndSize((*i).data(), (*i).size());
+ if (str == 0) {
+     if ( --((PyObject*)(retval))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(retval)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(retval))));
+     return __null;
+ }
+ (((PyTupleObject *)(t))->ob_item[0] = str);
+ (((PyTupleObject *)(t))->ob_item[1] = PyFloat_FromDouble(i.get_weight()));
+    }
+    return retval;
+}
+static __attribute__ ((__unused__)) int
+SWIG_AsPtr_std_string (PyObject * obj, std::string **val);
+static __attribute__ ((__unused__)) int
+SWIG_anystring_as_ptr(PyObject ** obj, std::string **val)
+{
+    if (((((((PyObject*)(*obj))->ob_type))->tp_flags & ((1L<<28))) != 0)) {
+ PyObject * strobj = PyUnicodeUCS4_EncodeUTF8((((PyUnicodeObject *)(*obj))->str), (((PyUnicodeObject *)(*obj))->length), "ignore");
+ if (strobj == __null) return (-1);
+ int res = SWIG_AsPtr_std_string(strobj, val);
+ if ( --((PyObject*)(strobj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(strobj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(strobj))));
+ return res;
+    } else {
+ return SWIG_AsPtr_std_string(*obj, val);
+    }
+}
+static __attribute__ ((__unused__)) swig_type_info*
+SWIG_pchar_descriptor(void)
+{
+  static int init = 0;
+  static swig_type_info* info = 0;
+  if (!init) {
+    info = SWIG_Python_TypeQuery("_p_char");
+    init = 1;
+  }
+  return info;
+}
+static __attribute__ ((__unused__)) inline PyObject *
+SWIG_FromCharPtrAndSize(const char* carray, size_t size)
+{
+  if (carray) {
+    if (size > 2147483647) {
+      swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+      return pchar_descriptor ?
+ SWIG_Python_NewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void();
+    } else {
+      return PyString_FromStringAndSize(carray, static_cast< int >(size));
+    }
+  } else {
+    return SWIG_Py_Void();
+  }
+}
+static __attribute__ ((__unused__)) inline PyObject *
+SWIG_FromCharPtr(const char *cptr)
+{
+  return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0));
+}
+static __attribute__ ((__unused__)) inline PyObject *
+SWIG_From_std_string (const std::string& s)
+{
+  if (s.size()) {
+    return SWIG_FromCharPtrAndSize(s.data(), s.size());
+  } else {
+    return SWIG_FromCharPtrAndSize(s.c_str(), 0);
+  }
+}
+static __attribute__ ((__unused__)) std::string Xapian_Error___str__(Xapian::Error const *self){
+ std::string desc(self->get_msg());
+ if (!self->get_context().empty()) {
+     desc += " (context: ";
+     desc += self->get_context();
+     desc += ')';
+ }
+ if (self->get_error_string()) {
+     desc += " (";
+     desc += self->get_error_string();
+     desc += ')';
+ }
+ return desc;
+    }
+static __attribute__ ((__unused__)) int
+SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
+{
+  if (((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<27))) != 0))
+  {
+    char *cstr; Py_ssize_t len;
+    PyString_AsStringAndSize(obj, &cstr, &len);
+    if (cptr) {
+      if (alloc) {
+ if (*alloc == ((0) | ((1 << 8) << 1)))
+   {
+     *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1)));
+     *alloc = ((0) | ((1 << 8) << 1));
+   }
+ else {
+   *cptr = cstr;
+   *alloc = ((0));
+ }
+      } else {
+ *cptr = SWIG_Python_str_AsChar(obj);
+      }
+    }
+    if (psize) *psize = len + 1;
+    return (0);
+  } else {
+    swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
+    if (pchar_descriptor) {
+      void* vptr = 0;
+      if (SWIG_Python_ConvertPtrAndOwn(obj, &vptr, pchar_descriptor, 0, 0) == (0)) {
+ if (cptr) *cptr = (char *) vptr;
+ if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0;
+ if (alloc) *alloc = ((0));
+ return (0);
+      }
+    }
+  }
+  return -5;
+}
+static __attribute__ ((__unused__)) int
+SWIG_AsVal_int (PyObject * obj, int *val)
+{
+  long v;
+  int res = SWIG_AsVal_long (obj, &v);
+  if ((res >= 0)) {
+    if ((v < (-2147483647 - 1) || v > 2147483647)) {
+      return -7;
+    } else {
+      if (val) *val = static_cast< int >(v);
+    }
+  }
+  return res;
+}
+namespace Xapian {
+__attribute__ ((visibility("default"))) void SetPythonException() {
+    try {
+ throw;
+    } catch (Swig::DirectorException &e) {
+    } catch (const Xapian::RangeError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[44]), SWIG_Python_NewPointerObj((new Xapian::RangeError(e)), swig_types[44], 0x1));
+    } catch (const Xapian::SerialisationError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[47]), SWIG_Python_NewPointerObj((new Xapian::SerialisationError(e)), swig_types[47], 0x1));
+    } catch (const Xapian::QueryParserError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[42]), SWIG_Python_NewPointerObj((new Xapian::QueryParserError(e)), swig_types[42], 0x1));
+    } catch (const Xapian::NetworkTimeoutError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[35]), SWIG_Python_NewPointerObj((new Xapian::NetworkTimeoutError(e)), swig_types[35], 0x1));
+    } catch (const Xapian::NetworkError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[34]), SWIG_Python_NewPointerObj((new Xapian::NetworkError(e)), swig_types[34], 0x1));
+    } catch (const Xapian::InternalError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[23]), SWIG_Python_NewPointerObj((new Xapian::InternalError(e)), swig_types[23], 0x1));
+    } catch (const Xapian::FeatureUnavailableError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[21]), SWIG_Python_NewPointerObj((new Xapian::FeatureUnavailableError(e)), swig_types[21], 0x1));
+    } catch (const Xapian::DocNotFoundError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[14]), SWIG_Python_NewPointerObj((new Xapian::DocNotFoundError(e)), swig_types[14], 0x1));
+    } catch (const Xapian::DatabaseVersionError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[11]), SWIG_Python_NewPointerObj((new Xapian::DatabaseVersionError(e)), swig_types[11], 0x1));
+    } catch (const Xapian::DatabaseOpeningError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[10]), SWIG_Python_NewPointerObj((new Xapian::DatabaseOpeningError(e)), swig_types[10], 0x1));
+    } catch (const Xapian::DatabaseModifiedError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[9]), SWIG_Python_NewPointerObj((new Xapian::DatabaseModifiedError(e)), swig_types[9], 0x1));
+    } catch (const Xapian::DatabaseLockError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[8]), SWIG_Python_NewPointerObj((new Xapian::DatabaseLockError(e)), swig_types[8], 0x1));
+    } catch (const Xapian::DatabaseCreateError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[6]), SWIG_Python_NewPointerObj((new Xapian::DatabaseCreateError(e)), swig_types[6], 0x1));
+    } catch (const Xapian::DatabaseCorruptError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[5]), SWIG_Python_NewPointerObj((new Xapian::DatabaseCorruptError(e)), swig_types[5], 0x1));
+    } catch (const Xapian::DatabaseError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[7]), SWIG_Python_NewPointerObj((new Xapian::DatabaseError(e)), swig_types[7], 0x1));
+    } catch (const Xapian::UnimplementedError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[57]), SWIG_Python_NewPointerObj((new Xapian::UnimplementedError(e)), swig_types[57], 0x1));
+    } catch (const Xapian::InvalidOperationError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[25]), SWIG_Python_NewPointerObj((new Xapian::InvalidOperationError(e)), swig_types[25], 0x1));
+    } catch (const Xapian::InvalidArgumentError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[24]), SWIG_Python_NewPointerObj((new Xapian::InvalidArgumentError(e)), swig_types[24], 0x1));
+    } catch (const Xapian::AssertionError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[0]), SWIG_Python_NewPointerObj((new Xapian::AssertionError(e)), swig_types[0], 0x1));
+    } catch (const Xapian::RuntimeError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[46]), SWIG_Python_NewPointerObj((new Xapian::RuntimeError(e)), swig_types[46], 0x1));
+    } catch (const Xapian::LogicError &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[27]), SWIG_Python_NewPointerObj((new Xapian::LogicError(e)), swig_types[27], 0x1));
+    } catch (const Xapian::Error &e) {
+ SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[19]), SWIG_Python_NewPointerObj((new Xapian::Error(e)), swig_types[19], 0x1));
+    } catch (const std::exception& e) {
+        SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-3), e.what());
+    } catch (...) {
+ SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-1), "unknown error in Xapian");
+    }
+}
+};
+static __attribute__ ((__unused__)) Xapian::termpos Xapian_PositionIterator_get_termpos(Xapian::PositionIterator const *self){
+     return *(*self);
+ }
+static __attribute__ ((__unused__)) void Xapian_PositionIterator_next(Xapian::PositionIterator *self){ ++(*self); }
+static __attribute__ ((__unused__)) bool Xapian_PositionIterator_equals(Xapian::PositionIterator const *self,Xapian::PositionIterator const &other){
+     return (*self) == other;
+ }
+static __attribute__ ((__unused__)) int
+SWIG_AsVal_unsigned_SS_int (PyObject * obj, unsigned int *val)
+{
+  unsigned long v;
+  int res = SWIG_AsVal_unsigned_SS_long (obj, &v);
+  if ((res >= 0)) {
+    if ((v > (2147483647 * 2U + 1U))) {
+      return -7;
+    } else {
+      if (val) *val = static_cast< unsigned int >(v);
+    }
+  }
+  return res;
+}
+static __attribute__ ((__unused__)) bool Xapian_PositionIterator___eq__(Xapian::PositionIterator *self,Xapian::PositionIterator const &other){
+     return (*self)==other;
+ }
+static __attribute__ ((__unused__)) bool Xapian_PositionIterator___ne__(Xapian::PositionIterator *self,Xapian::PositionIterator const &other){
+     return (*self)!=other;
+ }
+static __attribute__ ((__unused__)) bool Xapian_PostingIterator___eq__(Xapian::PostingIterator *self,Xapian::PostingIterator const &other){
+     return (*self)==other;
+ }
+static __attribute__ ((__unused__)) bool Xapian_PostingIterator___ne__(Xapian::PostingIterator *self,Xapian::PostingIterator const &other){
+     return (*self)!=other;
+ }
+static __attribute__ ((__unused__)) Xapian::docid Xapian_PostingIterator_get_docid(Xapian::PostingIterator const *self){
+ return *(*self);
+    }
+static __attribute__ ((__unused__)) void Xapian_PostingIterator_next(Xapian::PostingIterator *self){ ++(*self); }
+static __attribute__ ((__unused__)) bool Xapian_PostingIterator_equals(Xapian::PostingIterator const *self,Xapian::PostingIterator const &other){
+ return (*self) == other;
+    }
+static __attribute__ ((__unused__)) std::string Xapian_TermIterator_get_term(Xapian::TermIterator const *self){
+     return *(*self);
+ }
+static __attribute__ ((__unused__)) void Xapian_TermIterator_next(Xapian::TermIterator *self){ ++(*self); }
+static __attribute__ ((__unused__)) bool Xapian_TermIterator_equals(Xapian::TermIterator const *self,Xapian::TermIterator const &other){
+     return (*self) == other;
+ }
+static __attribute__ ((__unused__)) bool Xapian_TermIterator___eq__(Xapian::TermIterator *self,Xapian::TermIterator const &other){
+     return (*self)==other;
+ }
+static __attribute__ ((__unused__)) bool Xapian_TermIterator___ne__(Xapian::TermIterator *self,Xapian::TermIterator const &other){
+     return (*self)!=other;
+ }
+static __attribute__ ((__unused__)) std::string Xapian_ValueIterator_get_value(Xapian::ValueIterator const *self){
+     return *(*self);
+ }
+static __attribute__ ((__unused__)) void Xapian_ValueIterator_next(Xapian::ValueIterator *self){ ++(*self); }
+static __attribute__ ((__unused__)) bool Xapian_ValueIterator_equals(Xapian::ValueIterator const *self,Xapian::ValueIterator const &other){
+     return (*self) == other;
+ }
+static __attribute__ ((__unused__)) bool Xapian_ValueIterator___eq__(Xapian::ValueIterator *self,Xapian::ValueIterator const &other){
+     return (*self)==other;
+ }
+static __attribute__ ((__unused__)) bool Xapian_ValueIterator___ne__(Xapian::ValueIterator *self,Xapian::ValueIterator const &other){
+     return (*self)!=other;
+ }
+static __attribute__ ((__unused__)) int
+SWIG_AsVal_bool (PyObject *obj, bool *val)
+{
+  int r = PyObject_IsTrue(obj);
+  if (r == -1)
+    return (-1);
+  if (val) *val = r ? true : false;
+  return (0);
+}
+static __attribute__ ((__unused__)) int
+SWIG_AsPtr_std_string (PyObject * obj, std::string **val)
+{
+  char* buf = 0 ; size_t size = 0; int alloc = ((0));
+  if (((SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc)) >= 0)) {
+    if (buf) {
+      if (val) *val = new std::string(buf, size - 1);
+      if (alloc == ((0) | ((1 << 8) << 1))) delete[] buf;
+      return ((0) | ((1 << 8) << 1));
+    } else {
+      if (val) *val = 0;
+      return ((0));
+    }
+  } else {
+    static int init = 0;
+    static swig_type_info* descriptor = 0;
+    if (!init) {
+      descriptor = SWIG_Python_TypeQuery("std::string" " *");
+      init = 1;
+    }
+    if (descriptor) {
+      std::string *vptr;
+      int res = SWIG_Python_ConvertPtrAndOwn(obj, (void**)&vptr, descriptor, 0, 0);
+      if ((res >= 0) && val) *val = vptr;
+      return res;
+    }
+  }
+  return (-1);
+}
+static __attribute__ ((__unused__)) Xapian::MSetIterator Xapian_MSet_get_hit(Xapian::MSet const *self,Xapian::doccount i){
+     return ((*self)[i]);
+ }
+static __attribute__ ((__unused__)) int Xapian_MSet_get_document_percentage(Xapian::MSet const *self,Xapian::doccount i){
+     return (*self).convert_to_percent( ((*self)[i]) );
+ }
+static __attribute__ ((__unused__)) Xapian::Document const Xapian_MSet_get_document(Xapian::MSet const *self,Xapian::doccount i){
+     return ((*self)[i]).get_document();
+ }
+static __attribute__ ((__unused__)) Xapian::docid Xapian_MSet_get_docid(Xapian::MSet const *self,Xapian::doccount i){
+     return *((*self)[i]);
+ }
+static __attribute__ ((__unused__)) int Xapian_MSet___cmp__(Xapian::MSet *self,Xapian::MSet const &other){
+     if (self->get_max_possible() != other.get_max_possible()) {
+  return (self->get_max_possible() < other.get_max_possible())? -1 : 1;
+     }
+     if (self->size() != other.size()) {
+  return (self->size() < other.size())? -1 : 1;
+     }
+     for (size_t i=0; i<self->size(); ++i) {
+  if (*(*self)[i] != *other[i]) {
+      return (*(*self)[i] < *other[i])? -1 : 1;
+  }
+  if ((*self)[i].get_weight() != other[i].get_weight()) {
+      return ((*self)[i].get_weight() < other[i].get_weight())? -1 : 1;
+  }
+     }
+     return 0;
+ }
+static __attribute__ ((__unused__)) Xapian::docid Xapian_MSetIterator_get_docid(Xapian::MSetIterator const *self){
+     return *(*self);
+ }
+static __attribute__ ((__unused__)) void Xapian_MSetIterator_next(Xapian::MSetIterator *self){ ++(*self); }
+static __attribute__ ((__unused__)) void Xapian_MSetIterator_prev(Xapian::MSetIterator *self){ --(*self); }
+static __attribute__ ((__unused__)) bool Xapian_MSetIterator_equals(Xapian::MSetIterator const *self,Xapian::MSetIterator const &other){
+     return (*self) == other;
+ }
+static __attribute__ ((__unused__)) bool Xapian_MSetIterator___eq__(Xapian::MSetIterator *self,Xapian::MSetIterator const &other){
+     return (*self)==other;
+ }
+static __attribute__ ((__unused__)) bool Xapian_MSetIterator___ne__(Xapian::MSetIterator *self,Xapian::MSetIterator const &other){
+     return (*self)!=other;
+ }
+static __attribute__ ((__unused__)) std::string Xapian_ESetIterator_get_term(Xapian::ESetIterator const *self){
+     return *(*self);
+ }
+static __attribute__ ((__unused__)) void Xapian_ESetIterator_next(Xapian::ESetIterator *self){ ++(*self); }
+static __attribute__ ((__unused__)) void Xapian_ESetIterator_prev(Xapian::ESetIterator *self){ --(*self); }
+static __attribute__ ((__unused__)) bool Xapian_ESetIterator_equals(Xapian::ESetIterator const *self,Xapian::ESetIterator const &other){
+     return (*self) == other;
+ }
+static __attribute__ ((__unused__)) bool Xapian_ESetIterator___eq__(Xapian::ESetIterator *self,Xapian::ESetIterator const &other){
+     return (*self)==other;
+ }
+static __attribute__ ((__unused__)) bool Xapian_ESetIterator___ne__(Xapian::ESetIterator *self,Xapian::ESetIterator const &other){
+     return (*self)!=other;
+ }
+static __attribute__ ((__unused__)) std::pair< Xapian::TermIterator,Xapian::TermIterator > Xapian_Enquire_get_matching_terms(Xapian::Enquire const *self,Xapian::MSetIterator const &hit){
+     return make_pair(self->get_matching_terms_begin(hit),
+        self->get_matching_terms_end(hit));
+ }
+static __attribute__ ((__unused__)) inline PyObject *
+SWIG_From_size_t (size_t value)
+{
+  return SWIG_From_unsigned_SS_long (static_cast< unsigned long >(value));
+}
+static __attribute__ ((__unused__)) Xapian::Query *new_Xapian_Query__SWIG_13(Xapian::Query::op op,std::vector< Xapian::Query > const &subqs,Xapian::termcount param=0){
+  return new Xapian::Query(op, subqs.begin(), subqs.end(), param);
+     }
+class SwigDirector_PostingSource : public Xapian::PostingSource, public Swig::Director {
+public:
+    SwigDirector_PostingSource(PyObject *self);
+    virtual ~SwigDirector_PostingSource();
+    virtual Xapian::doccount get_termfreq_min() const;
+    virtual Xapian::doccount get_termfreq_est() const;
+    virtual Xapian::doccount get_termfreq_max() const;
+    virtual Xapian::weight get_weight() const;
+    virtual Xapian::docid get_docid() const;
+    virtual void next(Xapian::weight min_wt);
+    virtual void skip_to(Xapian::docid did, Xapian::weight min_wt);
+    virtual bool check(Xapian::docid did, Xapian::weight min_wt);
+    virtual bool at_end() const;
+    virtual Xapian::PostingSource *clone() const;
+    virtual std::string name() const;
+    virtual std::string serialise() const;
+    virtual Xapian::PostingSource *unserialise(std::string const &s) const;
+    virtual void init(Xapian::Database const &db);
+    virtual std::string get_description() const;
+public:
+    bool swig_get_inner(const char* name) const {
+      std::map<std::string, bool>::const_iterator iv = inner.find(name);
+      return (iv != inner.end() ? iv->second : false);
+    }
+    void swig_set_inner(const char* name, bool val) const
+    { inner[name] = val;}
+private:
+    mutable std::map<std::string, bool> inner;
+    PyObject *swig_get_method(size_t method_index, const char *method_name) const {
+      PyObject *method = vtable[method_index];
+      if (!method) {
+        swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
+        method = PyObject_GetAttr(swig_get_self(), name);
+        if (method == __null) {
+          std::string msg = "Method in class PostingSource doesn't exist, undefined ";
+          msg += method_name;
+          Swig::DirectorMethodException::raise(msg.c_str());
+        }
+        vtable[method_index] = method;
+      };
+      return method;
+    }
+private:
+    mutable swig::SwigVar_PyObject vtable[12];
+};
+class SwigDirector_MatchDecider : public Xapian::MatchDecider, public Swig::Director {
+public:
+    SwigDirector_MatchDecider(PyObject *self);
+    virtual bool operator ()(Xapian::Document const &doc) const;
+    virtual ~SwigDirector_MatchDecider();
+public:
+    bool swig_get_inner(const char* name) const {
+      std::map<std::string, bool>::const_iterator iv = inner.find(name);
+      return (iv != inner.end() ? iv->second : false);
+    }
+    void swig_set_inner(const char* name, bool val) const
+    { inner[name] = val;}
+private:
+    mutable std::map<std::string, bool> inner;
+    PyObject *swig_get_method(size_t method_index, const char *method_name) const {
+      PyObject *method = vtable[method_index];
+      if (!method) {
+        swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
+        method = PyObject_GetAttr(swig_get_self(), name);
+        if (method == __null) {
+          std::string msg = "Method in class MatchDecider doesn't exist, undefined ";
+          msg += method_name;
+          Swig::DirectorMethodException::raise(msg.c_str());
+        }
+        vtable[method_index] = method;
+      };
+      return method;
+    }
+private:
+    mutable swig::SwigVar_PyObject vtable[1];
+};
+class SwigDirector_ExpandDecider : public Xapian::ExpandDecider, public Swig::Director {
+public:
+    SwigDirector_ExpandDecider(PyObject *self);
+    virtual bool operator ()(std::string const &term) const;
+    virtual ~SwigDirector_ExpandDecider();
+public:
+    bool swig_get_inner(const char* name) const {
+      std::map<std::string, bool>::const_iterator iv = inner.find(name);
+      return (iv != inner.end() ? iv->second : false);
+    }
+    void swig_set_inner(const char* name, bool val) const
+    { inner[name] = val;}
+private:
+    mutable std::map<std::string, bool> inner;
+    PyObject *swig_get_method(size_t method_index, const char *method_name) const {
+      PyObject *method = vtable[method_index];
+      if (!method) {
+        swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
+        method = PyObject_GetAttr(swig_get_self(), name);
+        if (method == __null) {
+          std::string msg = "Method in class ExpandDecider doesn't exist, undefined ";
+          msg += method_name;
+          Swig::DirectorMethodException::raise(msg.c_str());
+        }
+        vtable[method_index] = method;
+      };
+      return method;
+    }
+private:
+    mutable swig::SwigVar_PyObject vtable[1];
+};
+class SwigDirector_MatchSpy : public Xapian::MatchSpy, public Swig::Director {
+public:
+    SwigDirector_MatchSpy(PyObject *self);
+    virtual ~SwigDirector_MatchSpy();
+    virtual void operator ()(Xapian::Document const &doc, Xapian::weight wt);
+    virtual Xapian::MatchSpy *clone() const;
+    virtual std::string name() const;
+    virtual std::string serialise() const;
+    virtual Xapian::MatchSpy *unserialise(std::string const &s, Xapian::Registry const &context) const;
+    virtual std::string serialise_results() const;
+    virtual void merge_results(std::string const &s);
+    virtual std::string get_description() const;
+public:
+    bool swig_get_inner(const char* name) const {
+      std::map<std::string, bool>::const_iterator iv = inner.find(name);
+      return (iv != inner.end() ? iv->second : false);
+    }
+    void swig_set_inner(const char* name, bool val) const
+    { inner[name] = val;}
+private:
+    mutable std::map<std::string, bool> inner;
+    PyObject *swig_get_method(size_t method_index, const char *method_name) const {
+      PyObject *method = vtable[method_index];
+      if (!method) {
+        swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
+        method = PyObject_GetAttr(swig_get_self(), name);
+        if (method == __null) {
+          std::string msg = "Method in class MatchSpy doesn't exist, undefined ";
+          msg += method_name;
+          Swig::DirectorMethodException::raise(msg.c_str());
+        }
+        vtable[method_index] = method;
+      };
+      return method;
+    }
+private:
+    mutable swig::SwigVar_PyObject vtable[4];
+};
+class SwigDirector_Stopper : public Xapian::Stopper, public Swig::Director {
+public:
+    SwigDirector_Stopper(PyObject *self);
+    virtual bool operator ()(std::string const &term) const;
+    virtual ~SwigDirector_Stopper();
+    virtual std::string get_description() const;
+public:
+    bool swig_get_inner(const char* name) const {
+      std::map<std::string, bool>::const_iterator iv = inner.find(name);
+      return (iv != inner.end() ? iv->second : false);
+    }
+    void swig_set_inner(const char* name, bool val) const
+    { inner[name] = val;}
+private:
+    mutable std::map<std::string, bool> inner;
+    PyObject *swig_get_method(size_t method_index, const char *method_name) const {
+      PyObject *method = vtable[method_index];
+      if (!method) {
+        swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
+        method = PyObject_GetAttr(swig_get_self(), name);
+        if (method == __null) {
+          std::string msg = "Method in class Stopper doesn't exist, undefined ";
+          msg += method_name;
+          Swig::DirectorMethodException::raise(msg.c_str());
+        }
+        vtable[method_index] = method;
+      };
+      return method;
+    }
+private:
+    mutable swig::SwigVar_PyObject vtable[2];
+};
+struct SwigDirector_ValueRangeProcessor : public Xapian::ValueRangeProcessor, public Swig::Director {
+public:
+    SwigDirector_ValueRangeProcessor(PyObject *self);
+    virtual ~SwigDirector_ValueRangeProcessor();
+    virtual Xapian::valueno operator ()(std::string &begin, std::string &end);
+public:
+    bool swig_get_inner(const char* name) const {
+      std::map<std::string, bool>::const_iterator iv = inner.find(name);
+      return (iv != inner.end() ? iv->second : false);
+    }
+    void swig_set_inner(const char* name, bool val) const
+    { inner[name] = val;}
+private:
+    mutable std::map<std::string, bool> inner;
+    PyObject *swig_get_method(size_t method_index, const char *method_name) const {
+      PyObject *method = vtable[method_index];
+      if (!method) {
+        swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
+        method = PyObject_GetAttr(swig_get_self(), name);
+        if (method == __null) {
+          std::string msg = "Method in class ValueRangeProcessor doesn't exist, undefined ";
+          msg += method_name;
+          Swig::DirectorMethodException::raise(msg.c_str());
+        }
+        vtable[method_index] = method;
+      };
+      return method;
+    }
+private:
+    mutable swig::SwigVar_PyObject vtable[1];
+};
+struct SwigDirector_StemImplementation : public Xapian::StemImplementation, public Swig::Director {
+public:
+    SwigDirector_StemImplementation(PyObject *self);
+    virtual ~SwigDirector_StemImplementation();
+    virtual std::string operator ()(std::string const &word);
+    virtual std::string get_description() const;
+public:
+    bool swig_get_inner(const char* name) const {
+      std::map<std::string, bool>::const_iterator iv = inner.find(name);
+      return (iv != inner.end() ? iv->second : false);
+    }
+    void swig_set_inner(const char* name, bool val) const
+    { inner[name] = val;}
+private:
+    mutable std::map<std::string, bool> inner;
+    PyObject *swig_get_method(size_t method_index, const char *method_name) const {
+      PyObject *method = vtable[method_index];
+      if (!method) {
+        swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
+        method = PyObject_GetAttr(swig_get_self(), name);
+        if (method == __null) {
+          std::string msg = "Method in class StemImplementation doesn't exist, undefined ";
+          msg += method_name;
+          Swig::DirectorMethodException::raise(msg.c_str());
+        }
+        vtable[method_index] = method;
+      };
+      return method;
+    }
+private:
+    mutable swig::SwigVar_PyObject vtable[2];
+};
+class SwigDirector_KeyMaker : public Xapian::KeyMaker, public Swig::Director {
+public:
+    SwigDirector_KeyMaker(PyObject *self);
+    virtual std::string operator ()(Xapian::Document const &doc) const;
+    virtual ~SwigDirector_KeyMaker();
+public:
+    bool swig_get_inner(const char* name) const {
+      std::map<std::string, bool>::const_iterator iv = inner.find(name);
+      return (iv != inner.end() ? iv->second : false);
+    }
+    void swig_set_inner(const char* name, bool val) const
+    { inner[name] = val;}
+private:
+    mutable std::map<std::string, bool> inner;
+    PyObject *swig_get_method(size_t method_index, const char *method_name) const {
+      PyObject *method = vtable[method_index];
+      if (!method) {
+        swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
+        method = PyObject_GetAttr(swig_get_self(), name);
+        if (method == __null) {
+          std::string msg = "Method in class KeyMaker doesn't exist, undefined ";
+          msg += method_name;
+          Swig::DirectorMethodException::raise(msg.c_str());
+        }
+        vtable[method_index] = method;
+      };
+      return method;
+    }
+private:
+    mutable swig::SwigVar_PyObject vtable[1];
+};
+class SwigDirector_Compactor : public Xapian::Compactor, public Swig::Director {
+public:
+    SwigDirector_Compactor(PyObject *self);
+    virtual ~SwigDirector_Compactor();
+    virtual void set_status(std::string const &table, std::string const &status);
+    virtual std::string resolve_duplicate_metadata(std::string const &key, size_t num_tags, std::string const tags[]);
+public:
+    bool swig_get_inner(const char* name) const {
+      std::map<std::string, bool>::const_iterator iv = inner.find(name);
+      return (iv != inner.end() ? iv->second : false);
+    }
+    void swig_set_inner(const char* name, bool val) const
+    { inner[name] = val;}
+private:
+    mutable std::map<std::string, bool> inner;
+    PyObject *swig_get_method(size_t method_index, const char *method_name) const {
+      PyObject *method = vtable[method_index];
+      if (!method) {
+        swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
+        method = PyObject_GetAttr(swig_get_self(), name);
+        if (method == __null) {
+          std::string msg = "Method in class Compactor doesn't exist, undefined ";
+          msg += method_name;
+          Swig::DirectorMethodException::raise(msg.c_str());
+        }
+        vtable[method_index] = method;
+      };
+      return method;
+    }
+private:
+    mutable swig::SwigVar_PyObject vtable[2];
+};
+SwigDirector_PostingSource::SwigDirector_PostingSource(PyObject *self): Xapian::PostingSource(), Swig::Director(self) {
+  ;
+}
+SwigDirector_PostingSource::~SwigDirector_PostingSource() {
+}
+Xapian::doccount SwigDirector_PostingSource::get_termfreq_min() const {
+  Xapian::doccount c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 0;
+    const char * const swig_method_name = "get_termfreq_min";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    unsigned int swig_val;
+    int swig_res = SWIG_AsVal_unsigned_SS_int(result, &swig_val);
+    if (!(swig_res >= 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((swig_res != (-1)) ? swig_res : -5)), "in output value of type '""Xapian::doccount""'");
+    }
+    c_result = static_cast< Xapian::doccount >(swig_val);
+  }
+  _swig_thread_block.end();
+  return (Xapian::doccount) c_result;
+}
+Xapian::doccount SwigDirector_PostingSource::get_termfreq_est() const {
+  Xapian::doccount c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 1;
+    const char * const swig_method_name = "get_termfreq_est";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    unsigned int swig_val;
+    int swig_res = SWIG_AsVal_unsigned_SS_int(result, &swig_val);
+    if (!(swig_res >= 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((swig_res != (-1)) ? swig_res : -5)), "in output value of type '""Xapian::doccount""'");
+    }
+    c_result = static_cast< Xapian::doccount >(swig_val);
+  }
+  _swig_thread_block.end();
+  return (Xapian::doccount) c_result;
+}
+Xapian::doccount SwigDirector_PostingSource::get_termfreq_max() const {
+  Xapian::doccount c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 2;
+    const char * const swig_method_name = "get_termfreq_max";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    unsigned int swig_val;
+    int swig_res = SWIG_AsVal_unsigned_SS_int(result, &swig_val);
+    if (!(swig_res >= 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((swig_res != (-1)) ? swig_res : -5)), "in output value of type '""Xapian::doccount""'");
+    }
+    c_result = static_cast< Xapian::doccount >(swig_val);
+  }
+  _swig_thread_block.end();
+  return (Xapian::doccount) c_result;
+}
+Xapian::weight SwigDirector_PostingSource::get_weight() const {
+  Xapian::weight c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 3;
+    const char * const swig_method_name = "get_weight";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    double swig_val;
+    int swig_res = SWIG_AsVal_double(result, &swig_val);
+    if (!(swig_res >= 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((swig_res != (-1)) ? swig_res : -5)), "in output value of type '""Xapian::weight""'");
+    }
+    c_result = static_cast< Xapian::weight >(swig_val);
+  }
+  _swig_thread_block.end();
+  return (Xapian::weight) c_result;
+}
+Xapian::docid SwigDirector_PostingSource::get_docid() const {
+  Xapian::docid c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 4;
+    const char * const swig_method_name = "get_docid";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    unsigned int swig_val;
+    int swig_res = SWIG_AsVal_unsigned_SS_int(result, &swig_val);
+    if (!(swig_res >= 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((swig_res != (-1)) ? swig_res : -5)), "in output value of type '""Xapian::docid""'");
+    }
+    c_result = static_cast< Xapian::docid >(swig_val);
+  }
+  _swig_thread_block.end();
+  return (Xapian::docid) c_result;
+}
+void SwigDirector_PostingSource::next(Xapian::weight min_wt) {
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = PyFloat_FromDouble(static_cast< double >(min_wt));
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 5;
+    const char * const swig_method_name = "next";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+  }
+  _swig_thread_block.end();
+}
+void SwigDirector_PostingSource::skip_to(Xapian::docid did, Xapian::weight min_wt) {
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(did));
+    swig::SwigVar_PyObject obj1;
+    obj1 = PyFloat_FromDouble(static_cast< double >(min_wt));
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 6;
+    const char * const swig_method_name = "skip_to";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0,(PyObject *)obj1, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+  }
+  _swig_thread_block.end();
+}
+bool SwigDirector_PostingSource::check(Xapian::docid did, Xapian::weight min_wt) {
+  bool c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(did));
+    swig::SwigVar_PyObject obj1;
+    obj1 = PyFloat_FromDouble(static_cast< double >(min_wt));
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 7;
+    const char * const swig_method_name = "check";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0,(PyObject *)obj1, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    bool swig_val;
+    int swig_res = SWIG_AsVal_bool(result, &swig_val);
+    if (!(swig_res >= 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((swig_res != (-1)) ? swig_res : -5)), "in output value of type '""bool""'");
+    }
+    c_result = static_cast< bool >(swig_val);
+  }
+  _swig_thread_block.end();
+  return (bool) c_result;
+}
+bool SwigDirector_PostingSource::at_end() const {
+  bool c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 8;
+    const char * const swig_method_name = "at_end";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    bool swig_val;
+    int swig_res = SWIG_AsVal_bool(result, &swig_val);
+    if (!(swig_res >= 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((swig_res != (-1)) ? swig_res : -5)), "in output value of type '""bool""'");
+    }
+    c_result = static_cast< bool >(swig_val);
+  }
+  _swig_thread_block.end();
+  return (bool) c_result;
+}
+Xapian::PostingSource *SwigDirector_PostingSource::clone() const {
+  return Xapian::PostingSource::clone();
+}
+std::string SwigDirector_PostingSource::name() const {
+  std::string c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 9;
+    const char * const swig_method_name = "name";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    std::string *swig_optr = 0;
+    int swig_ores;
+    {
+      PyObject * tmp = result;
+      ( ((PyObject*)(tmp))->ob_refcnt++);
+      swig_ores = SWIG_anystring_as_ptr(&tmp, &swig_optr);
+      if ( --((PyObject*)(tmp))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(tmp)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(tmp))));
+    }
+    if (!(swig_ores >= 0) || !swig_optr) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType((((swig_optr ? swig_ores : -5) != (-1)) ? (swig_optr ? swig_ores : -5) : -5)), "in output value of type '""std::string""'");
+    }
+    c_result = *swig_optr;
+    if (((swig_ores >= 0) && (swig_ores & ((1 << 8) << 1)))) delete swig_optr;
+  }
+  _swig_thread_block.end();
+  return (std::string) c_result;
+}
+std::string SwigDirector_PostingSource::serialise() const {
+  return Xapian::PostingSource::serialise();
+}
+Xapian::PostingSource *SwigDirector_PostingSource::unserialise(std::string const &s) const {
+  return Xapian::PostingSource::unserialise(s);
+}
+void SwigDirector_PostingSource::init(Xapian::Database const &db) {
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(&db)), swig_types[4], 0);
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 10;
+    const char * const swig_method_name = "init";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+  }
+  _swig_thread_block.end();
+}
+std::string SwigDirector_PostingSource::get_description() const {
+  std::string c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call PostingSource.__init__.");
+    }
+    const size_t swig_method_index = 11;
+    const char * const swig_method_name = "__str__";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    std::string *swig_optr = 0;
+    int swig_ores;
+    {
+      PyObject * tmp = result;
+      ( ((PyObject*)(tmp))->ob_refcnt++);
+      swig_ores = SWIG_anystring_as_ptr(&tmp, &swig_optr);
+      if ( --((PyObject*)(tmp))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(tmp)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(tmp))));
+    }
+    if (!(swig_ores >= 0) || !swig_optr) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType((((swig_optr ? swig_ores : -5) != (-1)) ? (swig_optr ? swig_ores : -5) : -5)), "in output value of type '""std::string""'");
+    }
+    c_result = *swig_optr;
+    if (((swig_ores >= 0) && (swig_ores & ((1 << 8) << 1)))) delete swig_optr;
+  }
+  _swig_thread_block.end();
+  return (std::string) c_result;
+}
+SwigDirector_MatchDecider::SwigDirector_MatchDecider(PyObject *self): Xapian::MatchDecider(), Swig::Director(self) {
+  ;
+}
+bool SwigDirector_MatchDecider::operator ()(Xapian::Document const &doc) const {
+  bool c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(&doc)), swig_types[15], 0);
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call MatchDecider.__init__.");
+    }
+    const size_t swig_method_index = 0;
+    const char * const swig_method_name = "__call__";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    bool swig_val;
+    int swig_res = SWIG_AsVal_bool(result, &swig_val);
+    if (!(swig_res >= 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((swig_res != (-1)) ? swig_res : -5)), "in output value of type '""bool""'");
+    }
+    c_result = static_cast< bool >(swig_val);
+  }
+  _swig_thread_block.end();
+  return (bool) c_result;
+}
+SwigDirector_MatchDecider::~SwigDirector_MatchDecider() {
+}
+SwigDirector_ExpandDecider::SwigDirector_ExpandDecider(PyObject *self): Xapian::ExpandDecider(), Swig::Director(self) {
+  ;
+}
+bool SwigDirector_ExpandDecider::operator ()(std::string const &term) const {
+  bool c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_From_std_string(static_cast< std::string >(term));
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call ExpandDecider.__init__.");
+    }
+    const size_t swig_method_index = 0;
+    const char * const swig_method_name = "__call__";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    bool swig_val;
+    int swig_res = SWIG_AsVal_bool(result, &swig_val);
+    if (!(swig_res >= 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((swig_res != (-1)) ? swig_res : -5)), "in output value of type '""bool""'");
+    }
+    c_result = static_cast< bool >(swig_val);
+  }
+  _swig_thread_block.end();
+  return (bool) c_result;
+}
+SwigDirector_ExpandDecider::~SwigDirector_ExpandDecider() {
+}
+SwigDirector_MatchSpy::SwigDirector_MatchSpy(PyObject *self): Xapian::MatchSpy(), Swig::Director(self) {
+  ;
+}
+SwigDirector_MatchSpy::~SwigDirector_MatchSpy() {
+}
+void SwigDirector_MatchSpy::operator ()(Xapian::Document const &doc, Xapian::weight wt) {
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(&doc)), swig_types[15], 0);
+    swig::SwigVar_PyObject obj1;
+    obj1 = PyFloat_FromDouble(static_cast< double >(wt));
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call MatchSpy.__init__.");
+    }
+    const size_t swig_method_index = 0;
+    const char * const swig_method_name = "__call__";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0,(PyObject *)obj1, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+  }
+  _swig_thread_block.end();
+}
+Xapian::MatchSpy *SwigDirector_MatchSpy::clone() const {
+  return Xapian::MatchSpy::clone();
+}
+std::string SwigDirector_MatchSpy::name() const {
+  std::string c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call MatchSpy.__init__.");
+    }
+    const size_t swig_method_index = 1;
+    const char * const swig_method_name = "name";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    std::string *swig_optr = 0;
+    int swig_ores;
+    {
+      PyObject * tmp = result;
+      ( ((PyObject*)(tmp))->ob_refcnt++);
+      swig_ores = SWIG_anystring_as_ptr(&tmp, &swig_optr);
+      if ( --((PyObject*)(tmp))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(tmp)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(tmp))));
+    }
+    if (!(swig_ores >= 0) || !swig_optr) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType((((swig_optr ? swig_ores : -5) != (-1)) ? (swig_optr ? swig_ores : -5) : -5)), "in output value of type '""std::string""'");
+    }
+    c_result = *swig_optr;
+    if (((swig_ores >= 0) && (swig_ores & ((1 << 8) << 1)))) delete swig_optr;
+  }
+  _swig_thread_block.end();
+  return (std::string) c_result;
+}
+std::string SwigDirector_MatchSpy::serialise() const {
+  return Xapian::MatchSpy::serialise();
+}
+Xapian::MatchSpy *SwigDirector_MatchSpy::unserialise(std::string const &s, Xapian::Registry const &context) const {
+  return Xapian::MatchSpy::unserialise(s,context);
+}
+std::string SwigDirector_MatchSpy::serialise_results() const {
+  return Xapian::MatchSpy::serialise_results();
+}
+void SwigDirector_MatchSpy::merge_results(std::string const &s) {
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_From_std_string(static_cast< std::string >(s));
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call MatchSpy.__init__.");
+    }
+    const size_t swig_method_index = 2;
+    const char * const swig_method_name = "merge_results";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+  }
+  _swig_thread_block.end();
+}
+std::string SwigDirector_MatchSpy::get_description() const {
+  std::string c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call MatchSpy.__init__.");
+    }
+    const size_t swig_method_index = 3;
+    const char * const swig_method_name = "__str__";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    std::string *swig_optr = 0;
+    int swig_ores;
+    {
+      PyObject * tmp = result;
+      ( ((PyObject*)(tmp))->ob_refcnt++);
+      swig_ores = SWIG_anystring_as_ptr(&tmp, &swig_optr);
+      if ( --((PyObject*)(tmp))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(tmp)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(tmp))));
+    }
+    if (!(swig_ores >= 0) || !swig_optr) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType((((swig_optr ? swig_ores : -5) != (-1)) ? (swig_optr ? swig_ores : -5) : -5)), "in output value of type '""std::string""'");
+    }
+    c_result = *swig_optr;
+    if (((swig_ores >= 0) && (swig_ores & ((1 << 8) << 1)))) delete swig_optr;
+  }
+  _swig_thread_block.end();
+  return (std::string) c_result;
+}
+SwigDirector_Stopper::SwigDirector_Stopper(PyObject *self): Xapian::Stopper(), Swig::Director(self) {
+  ;
+}
+bool SwigDirector_Stopper::operator ()(std::string const &term) const {
+  bool c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_From_std_string(static_cast< std::string >(term));
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call Stopper.__init__.");
+    }
+    const size_t swig_method_index = 0;
+    const char * const swig_method_name = "__call__";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    bool swig_val;
+    int swig_res = SWIG_AsVal_bool(result, &swig_val);
+    if (!(swig_res >= 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((swig_res != (-1)) ? swig_res : -5)), "in output value of type '""bool""'");
+    }
+    c_result = static_cast< bool >(swig_val);
+  }
+  _swig_thread_block.end();
+  return (bool) c_result;
+}
+SwigDirector_Stopper::~SwigDirector_Stopper() {
+}
+std::string SwigDirector_Stopper::get_description() const {
+  std::string c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call Stopper.__init__.");
+    }
+    const size_t swig_method_index = 1;
+    const char * const swig_method_name = "__str__";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    std::string *swig_optr = 0;
+    int swig_ores;
+    {
+      PyObject * tmp = result;
+      ( ((PyObject*)(tmp))->ob_refcnt++);
+      swig_ores = SWIG_anystring_as_ptr(&tmp, &swig_optr);
+      if ( --((PyObject*)(tmp))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(tmp)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(tmp))));
+    }
+    if (!(swig_ores >= 0) || !swig_optr) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType((((swig_optr ? swig_ores : -5) != (-1)) ? (swig_optr ? swig_ores : -5) : -5)), "in output value of type '""std::string""'");
+    }
+    c_result = *swig_optr;
+    if (((swig_ores >= 0) && (swig_ores & ((1 << 8) << 1)))) delete swig_optr;
+  }
+  _swig_thread_block.end();
+  return (std::string) c_result;
+}
+SwigDirector_ValueRangeProcessor::SwigDirector_ValueRangeProcessor(PyObject *self): Xapian::ValueRangeProcessor(), Swig::Director(self) {
+  ;
+}
+SwigDirector_ValueRangeProcessor::~SwigDirector_ValueRangeProcessor() {
+}
+Xapian::valueno SwigDirector_ValueRangeProcessor::operator ()(std::string &begin, std::string &end) {
+  Xapian::valueno c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_From_std_string(static_cast< std::string >(begin));
+    swig::SwigVar_PyObject obj1;
+    obj1 = SWIG_From_std_string(static_cast< std::string >(end));
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call ValueRangeProcessor.__init__.");
+    }
+    const size_t swig_method_index = 0;
+    const char * const swig_method_name = "__call__";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0,(PyObject *)obj1, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    if (!((((((PyObject*)(result))->ob_type))->tp_flags & ((1L<<26))) != 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((-5 != (-1)) ? -5 : -5)), "in output value of type '""(Xapian::valueno, std::string, std::string)""'");
+    }
+    if (PyTuple_Size(result) != 3) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((-4 != (-1)) ? -4 : -5)), "in output value of type '""(Xapian::valueno, std::string, std::string)""'");
+    }
+    unsigned int swig_val;
+    int swig_res = SWIG_AsVal_unsigned_SS_int((((PyTupleObject *)((PyObject *)result))->ob_item[0]), &swig_val);
+    if (!(swig_res >= 0)) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType(((swig_res != (-1)) ? swig_res : -5)), "in output value of type '""(Xapian::valueno, std::string, std::string)""'");
+    }
+    c_result = static_cast< Xapian::valueno >(swig_val);
+    std::string *ptr = (std::string *)0;
+    swig_res = SWIG_AsPtr_std_string((((PyTupleObject *)((PyObject *)result))->ob_item[1]), &ptr);
+    if (!(swig_res >= 0) || !ptr) {
+      delete ptr;
+      ptr = (std::string *)0;
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType((((ptr ? swig_res : -5) != (-1)) ? (ptr ? swig_res : -5) : -5)), "in output value of type '""(Xapian::valueno, std::string, std::string)""'");
+    }
+    begin = *ptr;
+    delete ptr;
+    ptr = (std::string *)0;
+    swig_res = SWIG_AsPtr_std_string((((PyTupleObject *)((PyObject *)result))->ob_item[2]), &ptr);
+    if (!(swig_res >= 0) || !ptr) {
+      delete ptr;
+      ptr = (std::string *)0;
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType((((ptr ? swig_res : -5) != (-1)) ? (ptr ? swig_res : -5) : -5)), "in output value of type '""(Xapian::valueno, std::string, std::string)""'");
+    }
+    end = *ptr;
+    delete ptr;
+    ptr = (std::string *)0;
+  }
+  _swig_thread_block.end();
+  return (Xapian::valueno) c_result;
+}
+SwigDirector_StemImplementation::SwigDirector_StemImplementation(PyObject *self): Xapian::StemImplementation(), Swig::Director(self) {
+  ;
+}
+SwigDirector_StemImplementation::~SwigDirector_StemImplementation() {
+}
+std::string SwigDirector_StemImplementation::operator ()(std::string const &word) {
+  std::string c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_From_std_string(static_cast< std::string >(word));
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call StemImplementation.__init__.");
+    }
+    const size_t swig_method_index = 0;
+    const char * const swig_method_name = "__call__";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    std::string *swig_optr = 0;
+    int swig_ores;
+    {
+      PyObject * tmp = result;
+      ( ((PyObject*)(tmp))->ob_refcnt++);
+      swig_ores = SWIG_anystring_as_ptr(&tmp, &swig_optr);
+      if ( --((PyObject*)(tmp))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(tmp)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(tmp))));
+    }
+    if (!(swig_ores >= 0) || !swig_optr) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType((((swig_optr ? swig_ores : -5) != (-1)) ? (swig_optr ? swig_ores : -5) : -5)), "in output value of type '""std::string""'");
+    }
+    c_result = *swig_optr;
+    if (((swig_ores >= 0) && (swig_ores & ((1 << 8) << 1)))) delete swig_optr;
+  }
+  _swig_thread_block.end();
+  return (std::string) c_result;
+}
+std::string SwigDirector_StemImplementation::get_description() const {
+  std::string c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call StemImplementation.__init__.");
+    }
+    const size_t swig_method_index = 1;
+    const char * const swig_method_name = "__str__";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject args = PyTuple_New(0);
+    swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject*) args, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    std::string *swig_optr = 0;
+    int swig_ores;
+    {
+      PyObject * tmp = result;
+      ( ((PyObject*)(tmp))->ob_refcnt++);
+      swig_ores = SWIG_anystring_as_ptr(&tmp, &swig_optr);
+      if ( --((PyObject*)(tmp))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(tmp)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(tmp))));
+    }
+    if (!(swig_ores >= 0) || !swig_optr) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType((((swig_optr ? swig_ores : -5) != (-1)) ? (swig_optr ? swig_ores : -5) : -5)), "in output value of type '""std::string""'");
+    }
+    c_result = *swig_optr;
+    if (((swig_ores >= 0) && (swig_ores & ((1 << 8) << 1)))) delete swig_optr;
+  }
+  _swig_thread_block.end();
+  return (std::string) c_result;
+}
+SwigDirector_KeyMaker::SwigDirector_KeyMaker(PyObject *self): Xapian::KeyMaker(), Swig::Director(self) {
+  ;
+}
+std::string SwigDirector_KeyMaker::operator ()(Xapian::Document const &doc) const {
+  std::string c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(&doc)), swig_types[15], 0);
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call KeyMaker.__init__.");
+    }
+    const size_t swig_method_index = 0;
+    const char * const swig_method_name = "__call__";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    std::string *swig_optr = 0;
+    int swig_ores;
+    {
+      PyObject * tmp = result;
+      ( ((PyObject*)(tmp))->ob_refcnt++);
+      swig_ores = SWIG_anystring_as_ptr(&tmp, &swig_optr);
+      if ( --((PyObject*)(tmp))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(tmp)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(tmp))));
+    }
+    if (!(swig_ores >= 0) || !swig_optr) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType((((swig_optr ? swig_ores : -5) != (-1)) ? (swig_optr ? swig_ores : -5) : -5)), "in output value of type '""std::string""'");
+    }
+    c_result = *swig_optr;
+    if (((swig_ores >= 0) && (swig_ores & ((1 << 8) << 1)))) delete swig_optr;
+  }
+  _swig_thread_block.end();
+  return (std::string) c_result;
+}
+SwigDirector_KeyMaker::~SwigDirector_KeyMaker() {
+}
+SwigDirector_Compactor::SwigDirector_Compactor(PyObject *self): Xapian::Compactor(), Swig::Director(self) {
+  ;
+}
+SwigDirector_Compactor::~SwigDirector_Compactor() {
+}
+void SwigDirector_Compactor::set_status(std::string const &table, std::string const &status) {
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_From_std_string(static_cast< std::string >(table));
+    swig::SwigVar_PyObject obj1;
+    obj1 = SWIG_From_std_string(static_cast< std::string >(status));
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call Compactor.__init__.");
+    }
+    const size_t swig_method_index = 0;
+    const char * const swig_method_name = "set_status";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0,(PyObject *)obj1, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+  }
+  _swig_thread_block.end();
+}
+std::string SwigDirector_Compactor::resolve_duplicate_metadata(std::string const &key, size_t num_tags, std::string const tags[]) {
+  std::string c_result;
+  SWIG_Python_Thread_Block _swig_thread_block;
+  {
+    swig::SwigVar_PyObject obj0;
+    obj0 = SWIG_From_std_string(static_cast< std::string >(key));
+    swig::SwigVar_PyObject obj1;
+    {
+      PyObject * result = PyList_New(num_tags);
+      if (result == 0) {
+        return __null;
+      }
+      for (size_t i = 0; i != num_tags; ++i) {
+        PyObject * str = PyString_FromStringAndSize(tags[i].data(), tags[i].size());
+        if (str == 0) {
+          if ( --((PyObject*)(result))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(result)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(result))));
+          return __null;
+        }
+        (((PyListObject *)(result))->ob_item[i] = (str));
+      }
+      obj1 = result;
+    }
+    if (!swig_get_self()) {
+      Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call Compactor.__init__.");
+    }
+    const size_t swig_method_index = 1;
+    const char * const swig_method_name = "resolve_duplicate_metadata";
+    PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+    swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0,(PyObject *)obj1, __null);
+    if (result == __null) {
+      PyObject *error = PyErr_Occurred();
+      {
+        if (error != __null) {
+          throw Swig::DirectorMethodException();
+        }
+      }
+    }
+    std::string *swig_optr = 0;
+    int swig_ores;
+    {
+      PyObject * tmp = result;
+      ( ((PyObject*)(tmp))->ob_refcnt++);
+      swig_ores = SWIG_anystring_as_ptr(&tmp, &swig_optr);
+      if ( --((PyObject*)(tmp))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(tmp)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(tmp))));
+    }
+    if (!(swig_ores >= 0) || !swig_optr) {
+      Swig::DirectorTypeMismatchException::raise(SWIG_Python_ErrorType((((swig_optr ? swig_ores : -5) != (-1)) ? (swig_optr ? swig_ores : -5) : -5)), "in output value of type '""std::string""'");
+    }
+    c_result = *swig_optr;
+    if (((swig_ores >= 0) && (swig_ores & ((1 << 8) << 1)))) delete swig_optr;
+  }
+  _swig_thread_block.end();
+  return (std::string) c_result;
+}
+extern "C" {
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_SwigPyIterator(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_SwigPyIterator" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    delete arg1;
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_value(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  PyObject *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator_value" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (PyObject *)((swig::SwigPyIterator const *)arg1)->value();
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = result;
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_incr__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  swig::SwigPyIterator *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "SwigPyIterator_incr" "', argument " "2"" of type '" "size_t""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< size_t >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (swig::SwigPyIterator *)(arg1)->incr(arg2);
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[79], 0 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_incr__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  swig::SwigPyIterator *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (swig::SwigPyIterator *)(arg1)->incr();
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[79], 0 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_incr(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"SwigPyIterator_incr",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_SwigPyIterator_incr__SWIG_1(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_SwigPyIterator_incr__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SwigPyIterator_incr'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    incr(swig::SwigPyIterator *,size_t)\n"
+    "    incr(swig::SwigPyIterator *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_decr__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  swig::SwigPyIterator *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "SwigPyIterator_decr" "', argument " "2"" of type '" "size_t""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< size_t >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (swig::SwigPyIterator *)(arg1)->decr(arg2);
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[79], 0 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_decr__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  swig::SwigPyIterator *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (swig::SwigPyIterator *)(arg1)->decr();
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[79], 0 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_decr(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"SwigPyIterator_decr",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_SwigPyIterator_decr__SWIG_1(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_SwigPyIterator_decr__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'SwigPyIterator_decr'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    decr(swig::SwigPyIterator *,size_t)\n"
+    "    decr(swig::SwigPyIterator *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_distance(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  swig::SwigPyIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  ptrdiff_t result;
+  if (!SWIG_Python_UnpackTuple(args,"SwigPyIterator_distance",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator_distance" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[79], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = ((swig::SwigPyIterator const *)arg1)->distance((swig::SwigPyIterator const &)*arg2);
+    }
+    catch(std::invalid_argument &_e) {
+      SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[76]), SWIG_Python_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))), swig_types[76], 0x1)); goto fail;
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_equal(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  swig::SwigPyIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"SwigPyIterator_equal",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator_equal" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[79], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (bool)((swig::SwigPyIterator const *)arg1)->equal((swig::SwigPyIterator const &)*arg2);
+    }
+    catch(std::invalid_argument &_e) {
+      SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(swig_types[76]), SWIG_Python_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))), swig_types[76], 0x1)); goto fail;
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_copy(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  swig::SwigPyIterator *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator_copy" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->copy();
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[79], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_next(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  PyObject *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator_next" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (PyObject *)(arg1)->next();
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = result;
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator___next__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  PyObject *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator___next__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (PyObject *)(arg1)->__next__();
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = result;
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_previous(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  PyObject *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator_previous" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (PyObject *)(arg1)->previous();
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = result;
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator_advance(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  ptrdiff_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  ptrdiff_t val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  swig::SwigPyIterator *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"SwigPyIterator_advance",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator_advance" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  ecode2 = SWIG_AsVal_ptrdiff_t(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "SwigPyIterator_advance" "', argument " "2"" of type '" "ptrdiff_t""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< ptrdiff_t >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (swig::SwigPyIterator *)(arg1)->advance(arg2);
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[79], 0 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator___eq__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  swig::SwigPyIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"SwigPyIterator___eq__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator___eq__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[79], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)((swig::SwigPyIterator const *)arg1)->operator ==((swig::SwigPyIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator___ne__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  swig::SwigPyIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"SwigPyIterator___ne__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator___ne__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[79], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)((swig::SwigPyIterator const *)arg1)->operator !=((swig::SwigPyIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator___iadd__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  ptrdiff_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  ptrdiff_t val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  swig::SwigPyIterator *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"SwigPyIterator___iadd__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator___iadd__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  ecode2 = SWIG_AsVal_ptrdiff_t(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "SwigPyIterator___iadd__" "', argument " "2"" of type '" "ptrdiff_t""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< ptrdiff_t >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (swig::SwigPyIterator *) &(arg1)->operator +=(arg2);
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[79], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator___isub__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  ptrdiff_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  ptrdiff_t val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  swig::SwigPyIterator *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"SwigPyIterator___isub__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator___isub__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  ecode2 = SWIG_AsVal_ptrdiff_t(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "SwigPyIterator___isub__" "', argument " "2"" of type '" "ptrdiff_t""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< ptrdiff_t >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (swig::SwigPyIterator *) &(arg1)->operator -=(arg2);
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[79], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator___add__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  ptrdiff_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  ptrdiff_t val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  swig::SwigPyIterator *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"SwigPyIterator___add__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator___add__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  ecode2 = SWIG_AsVal_ptrdiff_t(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "SwigPyIterator___add__" "', argument " "2"" of type '" "ptrdiff_t""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< ptrdiff_t >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator +(arg2);
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[79], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator___sub____SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  ptrdiff_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  ptrdiff_t val2 ;
+  int ecode2 = 0 ;
+  swig::SwigPyIterator *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  ecode2 = SWIG_AsVal_ptrdiff_t(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "ptrdiff_t""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< ptrdiff_t >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    try {
+      result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator -(arg2);
+    }
+    catch(swig::stop_iteration &_e) {
+      {
+        (void)_e;
+        SWIG_Python_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void());
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[79], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator___sub____SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ;
+  swig::SwigPyIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  ptrdiff_t result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[79], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[79], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = ((swig::SwigPyIterator const *)arg1)->operator -((swig::SwigPyIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SwigPyIterator___sub__(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"SwigPyIterator___sub__",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    int _v = 0;
+    {
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[1], 0, swig_types[79], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_1;
+    return _wrap_SwigPyIterator___sub____SWIG_1(self, argc, argv);
+  }
+check_1:
+  if (argc == 2) {
+    return _wrap_SwigPyIterator___sub____SWIG_0(self, argc, argv);
+  }
+fail:
+  ( ((PyObject*)((&_Py_NotImplementedStruct)))->ob_refcnt++);
+  return (&_Py_NotImplementedStruct);
+}
+static __attribute__ ((__unused__)) PyObject *SwigPyIterator_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[79], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Error_get_type(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Error *arg1 = (Xapian::Error *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  char *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[19], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Error_get_type" "', argument " "1"" of type '" "Xapian::Error const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Error * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (char *)((Xapian::Error const *)arg1)->get_type();
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_FromCharPtr((const char *)result);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Error_get_msg(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Error *arg1 = (Xapian::Error *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[19], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Error_get_msg" "', argument " "1"" of type '" "Xapian::Error const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Error * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (std::string *) &((Xapian::Error const *)arg1)->get_msg();
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(*result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Error_get_context(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Error *arg1 = (Xapian::Error *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[19], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Error_get_context" "', argument " "1"" of type '" "Xapian::Error const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Error * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (std::string *) &((Xapian::Error const *)arg1)->get_context();
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(*result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Error_get_error_string(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Error *arg1 = (Xapian::Error *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  char *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[19], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Error_get_error_string" "', argument " "1"" of type '" "Xapian::Error const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Error * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (char *)((Xapian::Error const *)arg1)->get_error_string();
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_FromCharPtr((const char *)result);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Error___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Error *arg1 = (Xapian::Error *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[19], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Error___str__" "', argument " "1"" of type '" "Xapian::Error const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Error * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = Xapian_Error___str__((Xapian::Error const *)arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_Error(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Error *arg1 = (Xapian::Error *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[19], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_Error" "', argument " "1"" of type '" "Xapian::Error *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Error * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *Error_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[19], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_LogicError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::LogicError *arg1 = (Xapian::LogicError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[27], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_LogicError" "', argument " "1"" of type '" "Xapian::LogicError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::LogicError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *LogicError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[27], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_RuntimeError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::RuntimeError *arg1 = (Xapian::RuntimeError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[46], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_RuntimeError" "', argument " "1"" of type '" "Xapian::RuntimeError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RuntimeError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *RuntimeError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[46], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_AssertionError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::AssertionError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_AssertionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_AssertionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_AssertionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_AssertionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_AssertionError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::AssertionError *)new Xapian::AssertionError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[0], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_AssertionError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::AssertionError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_AssertionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_AssertionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_AssertionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_AssertionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_AssertionError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::AssertionError *)new Xapian::AssertionError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[0], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_AssertionError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::AssertionError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_AssertionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_AssertionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_AssertionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_AssertionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::AssertionError *)new Xapian::AssertionError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[0], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_AssertionError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::AssertionError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_AssertionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_AssertionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::AssertionError *)new Xapian::AssertionError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[0], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_AssertionError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::AssertionError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_AssertionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_AssertionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_AssertionError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::AssertionError *)new Xapian::AssertionError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[0], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_AssertionError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_AssertionError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_AssertionError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_AssertionError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_AssertionError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_AssertionError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_AssertionError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_AssertionError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::AssertionError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::AssertionError(std::string const &,std::string const &,int)\n"
+    "    Xapian::AssertionError(std::string const &,std::string const &)\n"
+    "    Xapian::AssertionError(std::string const &)\n"
+    "    Xapian::AssertionError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_AssertionError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::AssertionError *arg1 = (Xapian::AssertionError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[0], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_AssertionError" "', argument " "1"" of type '" "Xapian::AssertionError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::AssertionError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *AssertionError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[0], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *AssertionError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidArgumentError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::InvalidArgumentError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InvalidArgumentError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidArgumentError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_InvalidArgumentError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidArgumentError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_InvalidArgumentError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InvalidArgumentError *)new Xapian::InvalidArgumentError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[24], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidArgumentError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::InvalidArgumentError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InvalidArgumentError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidArgumentError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_InvalidArgumentError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidArgumentError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_InvalidArgumentError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InvalidArgumentError *)new Xapian::InvalidArgumentError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[24], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidArgumentError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::InvalidArgumentError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InvalidArgumentError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidArgumentError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_InvalidArgumentError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidArgumentError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InvalidArgumentError *)new Xapian::InvalidArgumentError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[24], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidArgumentError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::InvalidArgumentError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InvalidArgumentError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidArgumentError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InvalidArgumentError *)new Xapian::InvalidArgumentError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[24], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidArgumentError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::InvalidArgumentError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InvalidArgumentError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidArgumentError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_InvalidArgumentError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InvalidArgumentError *)new Xapian::InvalidArgumentError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[24], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidArgumentError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_InvalidArgumentError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_InvalidArgumentError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_InvalidArgumentError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_InvalidArgumentError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_InvalidArgumentError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_InvalidArgumentError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_InvalidArgumentError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::InvalidArgumentError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::InvalidArgumentError(std::string const &,std::string const &,int)\n"
+    "    Xapian::InvalidArgumentError(std::string const &,std::string const &)\n"
+    "    Xapian::InvalidArgumentError(std::string const &)\n"
+    "    Xapian::InvalidArgumentError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_InvalidArgumentError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::InvalidArgumentError *arg1 = (Xapian::InvalidArgumentError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[24], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_InvalidArgumentError" "', argument " "1"" of type '" "Xapian::InvalidArgumentError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::InvalidArgumentError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *InvalidArgumentError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[24], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *InvalidArgumentError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidOperationError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::InvalidOperationError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InvalidOperationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidOperationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_InvalidOperationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidOperationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_InvalidOperationError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InvalidOperationError *)new Xapian::InvalidOperationError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[25], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidOperationError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::InvalidOperationError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InvalidOperationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidOperationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_InvalidOperationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidOperationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_InvalidOperationError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InvalidOperationError *)new Xapian::InvalidOperationError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[25], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidOperationError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::InvalidOperationError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InvalidOperationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidOperationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_InvalidOperationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidOperationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InvalidOperationError *)new Xapian::InvalidOperationError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[25], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidOperationError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::InvalidOperationError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InvalidOperationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidOperationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InvalidOperationError *)new Xapian::InvalidOperationError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[25], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidOperationError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::InvalidOperationError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InvalidOperationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InvalidOperationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_InvalidOperationError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InvalidOperationError *)new Xapian::InvalidOperationError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[25], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InvalidOperationError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_InvalidOperationError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_InvalidOperationError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_InvalidOperationError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_InvalidOperationError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_InvalidOperationError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_InvalidOperationError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_InvalidOperationError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::InvalidOperationError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::InvalidOperationError(std::string const &,std::string const &,int)\n"
+    "    Xapian::InvalidOperationError(std::string const &,std::string const &)\n"
+    "    Xapian::InvalidOperationError(std::string const &)\n"
+    "    Xapian::InvalidOperationError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_InvalidOperationError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::InvalidOperationError *arg1 = (Xapian::InvalidOperationError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[25], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_InvalidOperationError" "', argument " "1"" of type '" "Xapian::InvalidOperationError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::InvalidOperationError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *InvalidOperationError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[25], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *InvalidOperationError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_UnimplementedError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::UnimplementedError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_UnimplementedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_UnimplementedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_UnimplementedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_UnimplementedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_UnimplementedError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::UnimplementedError *)new Xapian::UnimplementedError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[57], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_UnimplementedError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::UnimplementedError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_UnimplementedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_UnimplementedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_UnimplementedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_UnimplementedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_UnimplementedError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::UnimplementedError *)new Xapian::UnimplementedError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[57], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_UnimplementedError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::UnimplementedError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_UnimplementedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_UnimplementedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_UnimplementedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_UnimplementedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::UnimplementedError *)new Xapian::UnimplementedError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[57], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_UnimplementedError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::UnimplementedError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_UnimplementedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_UnimplementedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::UnimplementedError *)new Xapian::UnimplementedError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[57], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_UnimplementedError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::UnimplementedError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_UnimplementedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_UnimplementedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_UnimplementedError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::UnimplementedError *)new Xapian::UnimplementedError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[57], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_UnimplementedError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_UnimplementedError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_UnimplementedError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_UnimplementedError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_UnimplementedError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_UnimplementedError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_UnimplementedError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_UnimplementedError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::UnimplementedError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::UnimplementedError(std::string const &,std::string const &,int)\n"
+    "    Xapian::UnimplementedError(std::string const &,std::string const &)\n"
+    "    Xapian::UnimplementedError(std::string const &)\n"
+    "    Xapian::UnimplementedError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_UnimplementedError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::UnimplementedError *arg1 = (Xapian::UnimplementedError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[57], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_UnimplementedError" "', argument " "1"" of type '" "Xapian::UnimplementedError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::UnimplementedError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *UnimplementedError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[57], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *UnimplementedError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::DatabaseError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_DatabaseError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseError *)new Xapian::DatabaseError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[7], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::DatabaseError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DatabaseError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseError *)new Xapian::DatabaseError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[7], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::DatabaseError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseError *)new Xapian::DatabaseError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[7], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::DatabaseError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseError *)new Xapian::DatabaseError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[7], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::DatabaseError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DatabaseError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseError *)new Xapian::DatabaseError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[7], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_DatabaseError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_DatabaseError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_DatabaseError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_DatabaseError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_DatabaseError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_DatabaseError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_DatabaseError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::DatabaseError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::DatabaseError(std::string const &,std::string const &,int)\n"
+    "    Xapian::DatabaseError(std::string const &,std::string const &)\n"
+    "    Xapian::DatabaseError(std::string const &)\n"
+    "    Xapian::DatabaseError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_DatabaseError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::DatabaseError *arg1 = (Xapian::DatabaseError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[7], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_DatabaseError" "', argument " "1"" of type '" "Xapian::DatabaseError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::DatabaseError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[7], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCorruptError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::DatabaseCorruptError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseCorruptError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCorruptError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseCorruptError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCorruptError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_DatabaseCorruptError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseCorruptError *)new Xapian::DatabaseCorruptError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[5], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCorruptError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::DatabaseCorruptError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseCorruptError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCorruptError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseCorruptError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCorruptError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DatabaseCorruptError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseCorruptError *)new Xapian::DatabaseCorruptError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[5], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCorruptError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::DatabaseCorruptError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseCorruptError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCorruptError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseCorruptError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCorruptError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseCorruptError *)new Xapian::DatabaseCorruptError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[5], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCorruptError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::DatabaseCorruptError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseCorruptError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCorruptError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseCorruptError *)new Xapian::DatabaseCorruptError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[5], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCorruptError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::DatabaseCorruptError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseCorruptError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCorruptError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DatabaseCorruptError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseCorruptError *)new Xapian::DatabaseCorruptError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[5], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCorruptError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_DatabaseCorruptError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_DatabaseCorruptError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_DatabaseCorruptError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_DatabaseCorruptError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_DatabaseCorruptError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_DatabaseCorruptError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_DatabaseCorruptError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::DatabaseCorruptError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::DatabaseCorruptError(std::string const &,std::string const &,int)\n"
+    "    Xapian::DatabaseCorruptError(std::string const &,std::string const &)\n"
+    "    Xapian::DatabaseCorruptError(std::string const &)\n"
+    "    Xapian::DatabaseCorruptError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_DatabaseCorruptError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::DatabaseCorruptError *arg1 = (Xapian::DatabaseCorruptError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[5], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_DatabaseCorruptError" "', argument " "1"" of type '" "Xapian::DatabaseCorruptError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::DatabaseCorruptError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseCorruptError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[5], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseCorruptError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCreateError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::DatabaseCreateError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseCreateError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCreateError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseCreateError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCreateError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_DatabaseCreateError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseCreateError *)new Xapian::DatabaseCreateError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[6], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCreateError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::DatabaseCreateError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseCreateError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCreateError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseCreateError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCreateError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DatabaseCreateError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseCreateError *)new Xapian::DatabaseCreateError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[6], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCreateError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::DatabaseCreateError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseCreateError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCreateError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseCreateError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCreateError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseCreateError *)new Xapian::DatabaseCreateError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[6], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCreateError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::DatabaseCreateError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseCreateError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCreateError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseCreateError *)new Xapian::DatabaseCreateError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[6], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCreateError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::DatabaseCreateError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseCreateError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseCreateError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DatabaseCreateError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseCreateError *)new Xapian::DatabaseCreateError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[6], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseCreateError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_DatabaseCreateError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_DatabaseCreateError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_DatabaseCreateError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_DatabaseCreateError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_DatabaseCreateError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_DatabaseCreateError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_DatabaseCreateError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::DatabaseCreateError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::DatabaseCreateError(std::string const &,std::string const &,int)\n"
+    "    Xapian::DatabaseCreateError(std::string const &,std::string const &)\n"
+    "    Xapian::DatabaseCreateError(std::string const &)\n"
+    "    Xapian::DatabaseCreateError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_DatabaseCreateError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::DatabaseCreateError *arg1 = (Xapian::DatabaseCreateError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[6], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_DatabaseCreateError" "', argument " "1"" of type '" "Xapian::DatabaseCreateError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::DatabaseCreateError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseCreateError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[6], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseCreateError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseLockError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::DatabaseLockError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseLockError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseLockError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseLockError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseLockError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_DatabaseLockError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseLockError *)new Xapian::DatabaseLockError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[8], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseLockError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::DatabaseLockError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseLockError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseLockError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseLockError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseLockError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DatabaseLockError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseLockError *)new Xapian::DatabaseLockError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[8], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseLockError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::DatabaseLockError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseLockError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseLockError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseLockError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseLockError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseLockError *)new Xapian::DatabaseLockError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[8], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseLockError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::DatabaseLockError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseLockError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseLockError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseLockError *)new Xapian::DatabaseLockError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[8], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseLockError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::DatabaseLockError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseLockError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseLockError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DatabaseLockError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseLockError *)new Xapian::DatabaseLockError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[8], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseLockError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_DatabaseLockError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_DatabaseLockError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_DatabaseLockError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_DatabaseLockError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_DatabaseLockError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_DatabaseLockError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_DatabaseLockError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::DatabaseLockError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::DatabaseLockError(std::string const &,std::string const &,int)\n"
+    "    Xapian::DatabaseLockError(std::string const &,std::string const &)\n"
+    "    Xapian::DatabaseLockError(std::string const &)\n"
+    "    Xapian::DatabaseLockError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_DatabaseLockError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::DatabaseLockError *arg1 = (Xapian::DatabaseLockError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[8], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_DatabaseLockError" "', argument " "1"" of type '" "Xapian::DatabaseLockError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::DatabaseLockError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseLockError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[8], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseLockError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseModifiedError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::DatabaseModifiedError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseModifiedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseModifiedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseModifiedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseModifiedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_DatabaseModifiedError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseModifiedError *)new Xapian::DatabaseModifiedError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[9], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseModifiedError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::DatabaseModifiedError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseModifiedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseModifiedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseModifiedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseModifiedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DatabaseModifiedError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseModifiedError *)new Xapian::DatabaseModifiedError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[9], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseModifiedError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::DatabaseModifiedError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseModifiedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseModifiedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseModifiedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseModifiedError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseModifiedError *)new Xapian::DatabaseModifiedError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[9], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseModifiedError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::DatabaseModifiedError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseModifiedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseModifiedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseModifiedError *)new Xapian::DatabaseModifiedError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[9], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseModifiedError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::DatabaseModifiedError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseModifiedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseModifiedError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DatabaseModifiedError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseModifiedError *)new Xapian::DatabaseModifiedError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[9], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseModifiedError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_DatabaseModifiedError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_DatabaseModifiedError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_DatabaseModifiedError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_DatabaseModifiedError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_DatabaseModifiedError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_DatabaseModifiedError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_DatabaseModifiedError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::DatabaseModifiedError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::DatabaseModifiedError(std::string const &,std::string const &,int)\n"
+    "    Xapian::DatabaseModifiedError(std::string const &,std::string const &)\n"
+    "    Xapian::DatabaseModifiedError(std::string const &)\n"
+    "    Xapian::DatabaseModifiedError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_DatabaseModifiedError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::DatabaseModifiedError *arg1 = (Xapian::DatabaseModifiedError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[9], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_DatabaseModifiedError" "', argument " "1"" of type '" "Xapian::DatabaseModifiedError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::DatabaseModifiedError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseModifiedError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[9], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseModifiedError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseOpeningError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::DatabaseOpeningError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseOpeningError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseOpeningError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseOpeningError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseOpeningError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_DatabaseOpeningError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseOpeningError *)new Xapian::DatabaseOpeningError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[10], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseOpeningError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::DatabaseOpeningError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseOpeningError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseOpeningError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseOpeningError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseOpeningError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DatabaseOpeningError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseOpeningError *)new Xapian::DatabaseOpeningError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[10], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseOpeningError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::DatabaseOpeningError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseOpeningError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseOpeningError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseOpeningError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseOpeningError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseOpeningError *)new Xapian::DatabaseOpeningError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[10], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseOpeningError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::DatabaseOpeningError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseOpeningError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseOpeningError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseOpeningError *)new Xapian::DatabaseOpeningError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[10], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseOpeningError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::DatabaseOpeningError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseOpeningError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseOpeningError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DatabaseOpeningError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseOpeningError *)new Xapian::DatabaseOpeningError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[10], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseOpeningError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_DatabaseOpeningError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_DatabaseOpeningError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_DatabaseOpeningError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_DatabaseOpeningError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_DatabaseOpeningError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_DatabaseOpeningError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_DatabaseOpeningError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::DatabaseOpeningError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::DatabaseOpeningError(std::string const &,std::string const &,int)\n"
+    "    Xapian::DatabaseOpeningError(std::string const &,std::string const &)\n"
+    "    Xapian::DatabaseOpeningError(std::string const &)\n"
+    "    Xapian::DatabaseOpeningError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_DatabaseOpeningError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::DatabaseOpeningError *arg1 = (Xapian::DatabaseOpeningError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[10], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_DatabaseOpeningError" "', argument " "1"" of type '" "Xapian::DatabaseOpeningError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::DatabaseOpeningError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseOpeningError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[10], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseOpeningError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseVersionError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::DatabaseVersionError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseVersionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseVersionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseVersionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseVersionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_DatabaseVersionError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseVersionError *)new Xapian::DatabaseVersionError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[11], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseVersionError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::DatabaseVersionError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseVersionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseVersionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseVersionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseVersionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DatabaseVersionError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseVersionError *)new Xapian::DatabaseVersionError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[11], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseVersionError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::DatabaseVersionError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseVersionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseVersionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DatabaseVersionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseVersionError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseVersionError *)new Xapian::DatabaseVersionError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[11], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseVersionError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::DatabaseVersionError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseVersionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseVersionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseVersionError *)new Xapian::DatabaseVersionError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[11], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseVersionError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::DatabaseVersionError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DatabaseVersionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DatabaseVersionError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DatabaseVersionError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DatabaseVersionError *)new Xapian::DatabaseVersionError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[11], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DatabaseVersionError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_DatabaseVersionError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_DatabaseVersionError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_DatabaseVersionError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_DatabaseVersionError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_DatabaseVersionError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_DatabaseVersionError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_DatabaseVersionError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::DatabaseVersionError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::DatabaseVersionError(std::string const &,std::string const &,int)\n"
+    "    Xapian::DatabaseVersionError(std::string const &,std::string const &)\n"
+    "    Xapian::DatabaseVersionError(std::string const &)\n"
+    "    Xapian::DatabaseVersionError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_DatabaseVersionError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::DatabaseVersionError *arg1 = (Xapian::DatabaseVersionError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[11], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_DatabaseVersionError" "', argument " "1"" of type '" "Xapian::DatabaseVersionError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::DatabaseVersionError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseVersionError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[11], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *DatabaseVersionError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DocNotFoundError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::DocNotFoundError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DocNotFoundError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DocNotFoundError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DocNotFoundError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DocNotFoundError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_DocNotFoundError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DocNotFoundError *)new Xapian::DocNotFoundError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[14], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DocNotFoundError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::DocNotFoundError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DocNotFoundError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DocNotFoundError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DocNotFoundError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DocNotFoundError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DocNotFoundError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DocNotFoundError *)new Xapian::DocNotFoundError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[14], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DocNotFoundError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::DocNotFoundError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DocNotFoundError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DocNotFoundError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DocNotFoundError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DocNotFoundError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DocNotFoundError *)new Xapian::DocNotFoundError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[14], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DocNotFoundError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::DocNotFoundError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DocNotFoundError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DocNotFoundError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DocNotFoundError *)new Xapian::DocNotFoundError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[14], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DocNotFoundError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::DocNotFoundError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_DocNotFoundError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DocNotFoundError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DocNotFoundError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::DocNotFoundError *)new Xapian::DocNotFoundError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[14], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DocNotFoundError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_DocNotFoundError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_DocNotFoundError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_DocNotFoundError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_DocNotFoundError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_DocNotFoundError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_DocNotFoundError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_DocNotFoundError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::DocNotFoundError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::DocNotFoundError(std::string const &,std::string const &,int)\n"
+    "    Xapian::DocNotFoundError(std::string const &,std::string const &)\n"
+    "    Xapian::DocNotFoundError(std::string const &)\n"
+    "    Xapian::DocNotFoundError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_DocNotFoundError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::DocNotFoundError *arg1 = (Xapian::DocNotFoundError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[14], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_DocNotFoundError" "', argument " "1"" of type '" "Xapian::DocNotFoundError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::DocNotFoundError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *DocNotFoundError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[14], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *DocNotFoundError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_FeatureUnavailableError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::FeatureUnavailableError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_FeatureUnavailableError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_FeatureUnavailableError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_FeatureUnavailableError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_FeatureUnavailableError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_FeatureUnavailableError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::FeatureUnavailableError *)new Xapian::FeatureUnavailableError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[21], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_FeatureUnavailableError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::FeatureUnavailableError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_FeatureUnavailableError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_FeatureUnavailableError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_FeatureUnavailableError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_FeatureUnavailableError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_FeatureUnavailableError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::FeatureUnavailableError *)new Xapian::FeatureUnavailableError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[21], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_FeatureUnavailableError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::FeatureUnavailableError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_FeatureUnavailableError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_FeatureUnavailableError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_FeatureUnavailableError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_FeatureUnavailableError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::FeatureUnavailableError *)new Xapian::FeatureUnavailableError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[21], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_FeatureUnavailableError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::FeatureUnavailableError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_FeatureUnavailableError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_FeatureUnavailableError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::FeatureUnavailableError *)new Xapian::FeatureUnavailableError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[21], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_FeatureUnavailableError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::FeatureUnavailableError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_FeatureUnavailableError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_FeatureUnavailableError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_FeatureUnavailableError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::FeatureUnavailableError *)new Xapian::FeatureUnavailableError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[21], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_FeatureUnavailableError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_FeatureUnavailableError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_FeatureUnavailableError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_FeatureUnavailableError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_FeatureUnavailableError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_FeatureUnavailableError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_FeatureUnavailableError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_FeatureUnavailableError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::FeatureUnavailableError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::FeatureUnavailableError(std::string const &,std::string const &,int)\n"
+    "    Xapian::FeatureUnavailableError(std::string const &,std::string const &)\n"
+    "    Xapian::FeatureUnavailableError(std::string const &)\n"
+    "    Xapian::FeatureUnavailableError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_FeatureUnavailableError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::FeatureUnavailableError *arg1 = (Xapian::FeatureUnavailableError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[21], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_FeatureUnavailableError" "', argument " "1"" of type '" "Xapian::FeatureUnavailableError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::FeatureUnavailableError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *FeatureUnavailableError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[21], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *FeatureUnavailableError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InternalError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::InternalError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InternalError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InternalError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_InternalError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InternalError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_InternalError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InternalError *)new Xapian::InternalError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[23], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InternalError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::InternalError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InternalError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InternalError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_InternalError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InternalError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_InternalError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InternalError *)new Xapian::InternalError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[23], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InternalError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::InternalError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InternalError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InternalError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_InternalError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InternalError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InternalError *)new Xapian::InternalError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[23], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InternalError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::InternalError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InternalError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InternalError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InternalError *)new Xapian::InternalError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[23], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InternalError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::InternalError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_InternalError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_InternalError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_InternalError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::InternalError *)new Xapian::InternalError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[23], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_InternalError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_InternalError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_InternalError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_InternalError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_InternalError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_InternalError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_InternalError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_InternalError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::InternalError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::InternalError(std::string const &,std::string const &,int)\n"
+    "    Xapian::InternalError(std::string const &,std::string const &)\n"
+    "    Xapian::InternalError(std::string const &)\n"
+    "    Xapian::InternalError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_InternalError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::InternalError *arg1 = (Xapian::InternalError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[23], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_InternalError" "', argument " "1"" of type '" "Xapian::InternalError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::InternalError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *InternalError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[23], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *InternalError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::NetworkError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_NetworkError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_NetworkError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_NetworkError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::NetworkError *)new Xapian::NetworkError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[34], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::NetworkError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_NetworkError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_NetworkError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_NetworkError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::NetworkError *)new Xapian::NetworkError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[34], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::NetworkError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_NetworkError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_NetworkError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::NetworkError *)new Xapian::NetworkError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[34], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::NetworkError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_NetworkError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::NetworkError *)new Xapian::NetworkError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[34], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::NetworkError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_NetworkError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_NetworkError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::NetworkError *)new Xapian::NetworkError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[34], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_NetworkError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_NetworkError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_NetworkError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_NetworkError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_NetworkError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_NetworkError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_NetworkError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::NetworkError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::NetworkError(std::string const &,std::string const &,int)\n"
+    "    Xapian::NetworkError(std::string const &,std::string const &)\n"
+    "    Xapian::NetworkError(std::string const &)\n"
+    "    Xapian::NetworkError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_NetworkError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::NetworkError *arg1 = (Xapian::NetworkError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[34], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_NetworkError" "', argument " "1"" of type '" "Xapian::NetworkError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::NetworkError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *NetworkError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[34], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *NetworkError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkTimeoutError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::NetworkTimeoutError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_NetworkTimeoutError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkTimeoutError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_NetworkTimeoutError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkTimeoutError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_NetworkTimeoutError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::NetworkTimeoutError *)new Xapian::NetworkTimeoutError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[35], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkTimeoutError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::NetworkTimeoutError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_NetworkTimeoutError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkTimeoutError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_NetworkTimeoutError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkTimeoutError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_NetworkTimeoutError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::NetworkTimeoutError *)new Xapian::NetworkTimeoutError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[35], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkTimeoutError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::NetworkTimeoutError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_NetworkTimeoutError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkTimeoutError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_NetworkTimeoutError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkTimeoutError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::NetworkTimeoutError *)new Xapian::NetworkTimeoutError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[35], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkTimeoutError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::NetworkTimeoutError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_NetworkTimeoutError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkTimeoutError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::NetworkTimeoutError *)new Xapian::NetworkTimeoutError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[35], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkTimeoutError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::NetworkTimeoutError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_NetworkTimeoutError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NetworkTimeoutError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_NetworkTimeoutError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::NetworkTimeoutError *)new Xapian::NetworkTimeoutError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[35], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NetworkTimeoutError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_NetworkTimeoutError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_NetworkTimeoutError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_NetworkTimeoutError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_NetworkTimeoutError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_NetworkTimeoutError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_NetworkTimeoutError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_NetworkTimeoutError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::NetworkTimeoutError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::NetworkTimeoutError(std::string const &,std::string const &,int)\n"
+    "    Xapian::NetworkTimeoutError(std::string const &,std::string const &)\n"
+    "    Xapian::NetworkTimeoutError(std::string const &)\n"
+    "    Xapian::NetworkTimeoutError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_NetworkTimeoutError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::NetworkTimeoutError *arg1 = (Xapian::NetworkTimeoutError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[35], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_NetworkTimeoutError" "', argument " "1"" of type '" "Xapian::NetworkTimeoutError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::NetworkTimeoutError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *NetworkTimeoutError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[35], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *NetworkTimeoutError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_QueryParserError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::QueryParserError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_QueryParserError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_QueryParserError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_QueryParserError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_QueryParserError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_QueryParserError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::QueryParserError *)new Xapian::QueryParserError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[42], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_QueryParserError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::QueryParserError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_QueryParserError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_QueryParserError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_QueryParserError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_QueryParserError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_QueryParserError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::QueryParserError *)new Xapian::QueryParserError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[42], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_QueryParserError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::QueryParserError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_QueryParserError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_QueryParserError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_QueryParserError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_QueryParserError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::QueryParserError *)new Xapian::QueryParserError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[42], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_QueryParserError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::QueryParserError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_QueryParserError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_QueryParserError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::QueryParserError *)new Xapian::QueryParserError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[42], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_QueryParserError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::QueryParserError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_QueryParserError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_QueryParserError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_QueryParserError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::QueryParserError *)new Xapian::QueryParserError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[42], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_QueryParserError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_QueryParserError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_QueryParserError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_QueryParserError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_QueryParserError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_QueryParserError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_QueryParserError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_QueryParserError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::QueryParserError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::QueryParserError(std::string const &,std::string const &,int)\n"
+    "    Xapian::QueryParserError(std::string const &,std::string const &)\n"
+    "    Xapian::QueryParserError(std::string const &)\n"
+    "    Xapian::QueryParserError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_QueryParserError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParserError *arg1 = (Xapian::QueryParserError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[42], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_QueryParserError" "', argument " "1"" of type '" "Xapian::QueryParserError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParserError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *QueryParserError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[42], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *QueryParserError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_SerialisationError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::SerialisationError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_SerialisationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_SerialisationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_SerialisationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_SerialisationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_SerialisationError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::SerialisationError *)new Xapian::SerialisationError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[47], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_SerialisationError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::SerialisationError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_SerialisationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_SerialisationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_SerialisationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_SerialisationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_SerialisationError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::SerialisationError *)new Xapian::SerialisationError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[47], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_SerialisationError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::SerialisationError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_SerialisationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_SerialisationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_SerialisationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_SerialisationError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::SerialisationError *)new Xapian::SerialisationError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[47], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_SerialisationError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::SerialisationError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_SerialisationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_SerialisationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::SerialisationError *)new Xapian::SerialisationError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[47], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_SerialisationError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::SerialisationError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_SerialisationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_SerialisationError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_SerialisationError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::SerialisationError *)new Xapian::SerialisationError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[47], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_SerialisationError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_SerialisationError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_SerialisationError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_SerialisationError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_SerialisationError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_SerialisationError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_SerialisationError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_SerialisationError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::SerialisationError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::SerialisationError(std::string const &,std::string const &,int)\n"
+    "    Xapian::SerialisationError(std::string const &,std::string const &)\n"
+    "    Xapian::SerialisationError(std::string const &)\n"
+    "    Xapian::SerialisationError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_SerialisationError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::SerialisationError *arg1 = (Xapian::SerialisationError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[47], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_SerialisationError" "', argument " "1"" of type '" "Xapian::SerialisationError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::SerialisationError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *SerialisationError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[47], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *SerialisationError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_RangeError__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  char *arg3 = (char *) 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int res3 ;
+  char *buf3 = 0 ;
+  int alloc3 = 0 ;
+  Xapian::RangeError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_RangeError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_RangeError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_RangeError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_RangeError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, __null, &alloc3);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_RangeError" "', argument " "3"" of type '" "char const *""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< char * >(buf3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::RangeError *)new Xapian::RangeError((std::string const &)*arg1,(std::string const &)*arg2,(char const *)arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[44], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (alloc3 == ((0) | ((1 << 8) << 1))) delete[] buf3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_RangeError__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::RangeError *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_RangeError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_RangeError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_RangeError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_RangeError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_RangeError" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::RangeError *)new Xapian::RangeError((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[44], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_RangeError__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::RangeError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_RangeError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_RangeError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_RangeError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_RangeError" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::RangeError *)new Xapian::RangeError((std::string const &)*arg1,(std::string const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[44], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_RangeError__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::RangeError *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_RangeError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_RangeError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::RangeError *)new Xapian::RangeError((std::string const &)*arg1);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[44], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_RangeError__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::RangeError *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_RangeError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_RangeError" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_RangeError" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (Xapian::RangeError *)new Xapian::RangeError((std::string const &)*arg1,arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[44], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_RangeError(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_RangeError",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_RangeError__SWIG_3(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_RangeError__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_RangeError__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_RangeError__SWIG_1(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_RangeError__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_RangeError'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::RangeError(std::string const &,std::string const &,char const *)\n"
+    "    Xapian::RangeError(std::string const &,std::string const &,int)\n"
+    "    Xapian::RangeError(std::string const &,std::string const &)\n"
+    "    Xapian::RangeError(std::string const &)\n"
+    "    Xapian::RangeError(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_RangeError(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::RangeError *arg1 = (Xapian::RangeError *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[44], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_RangeError" "', argument " "1"" of type '" "Xapian::RangeError *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RangeError * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *RangeError_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[44], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *RangeError_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_version_string(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  char *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"version_string",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (char *)Xapian::version_string();
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_FromCharPtr((const char *)result);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_major_version(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  int result;
+  if (!SWIG_Python_UnpackTuple(args,"major_version",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (int)Xapian::major_version();
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_minor_version(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  int result;
+  if (!SWIG_Python_UnpackTuple(args,"minor_version",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (int)Xapian::minor_version();
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_revision(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  int result;
+  if (!SWIG_Python_UnpackTuple(args,"revision",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (int)Xapian::revision();
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_PositionIterator__SWIG_0(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::PositionIterator *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::PositionIterator *)new Xapian::PositionIterator();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[37], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_PositionIterator__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::PositionIterator *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::PositionIterator *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[37], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_PositionIterator" "', argument " "1"" of type '" "Xapian::PositionIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_PositionIterator" "', argument " "1"" of type '" "Xapian::PositionIterator const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PositionIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::PositionIterator *)new Xapian::PositionIterator((Xapian::PositionIterator const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[37], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_PositionIterator(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_PositionIterator",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_PositionIterator__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_PositionIterator__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_PositionIterator'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::PositionIterator()\n"
+    "    Xapian::PositionIterator(Xapian::PositionIterator const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_PositionIterator(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PositionIterator *arg1 = (Xapian::PositionIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[37], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_PositionIterator" "', argument " "1"" of type '" "Xapian::PositionIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PositionIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PositionIterator_get_termpos(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PositionIterator *arg1 = (Xapian::PositionIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termpos result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[37], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PositionIterator_get_termpos" "', argument " "1"" of type '" "Xapian::PositionIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PositionIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termpos)Xapian_PositionIterator_get_termpos((Xapian::PositionIterator const *)arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PositionIterator_next(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PositionIterator *arg1 = (Xapian::PositionIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[37], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PositionIterator_next" "', argument " "1"" of type '" "Xapian::PositionIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PositionIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        Xapian_PositionIterator_next(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PositionIterator_equals(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PositionIterator *arg1 = (Xapian::PositionIterator *) 0 ;
+  Xapian::PositionIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"PositionIterator_equals",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[37], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PositionIterator_equals" "', argument " "1"" of type '" "Xapian::PositionIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PositionIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[37], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "PositionIterator_equals" "', argument " "2"" of type '" "Xapian::PositionIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "PositionIterator_equals" "', argument " "2"" of type '" "Xapian::PositionIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::PositionIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)Xapian_PositionIterator_equals((Xapian::PositionIterator const *)arg1,(Xapian::PositionIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PositionIterator_skip_to(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PositionIterator *arg1 = (Xapian::PositionIterator *) 0 ;
+  Xapian::termpos arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"PositionIterator_skip_to",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[37], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PositionIterator_skip_to" "', argument " "1"" of type '" "Xapian::PositionIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PositionIterator * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "PositionIterator_skip_to" "', argument " "2"" of type '" "Xapian::termpos""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termpos >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->skip_to(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PositionIterator___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PositionIterator *arg1 = (Xapian::PositionIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[37], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PositionIterator___str__" "', argument " "1"" of type '" "Xapian::PositionIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PositionIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::PositionIterator const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PositionIterator___eq__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PositionIterator *arg1 = (Xapian::PositionIterator *) 0 ;
+  Xapian::PositionIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"PositionIterator___eq__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[37], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PositionIterator___eq__" "', argument " "1"" of type '" "Xapian::PositionIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PositionIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[37], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "PositionIterator___eq__" "', argument " "2"" of type '" "Xapian::PositionIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "PositionIterator___eq__" "', argument " "2"" of type '" "Xapian::PositionIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::PositionIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_PositionIterator___eq__(arg1,(Xapian::PositionIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PositionIterator___ne__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PositionIterator *arg1 = (Xapian::PositionIterator *) 0 ;
+  Xapian::PositionIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"PositionIterator___ne__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[37], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PositionIterator___ne__" "', argument " "1"" of type '" "Xapian::PositionIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PositionIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[37], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "PositionIterator___ne__" "', argument " "2"" of type '" "Xapian::PositionIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "PositionIterator___ne__" "', argument " "2"" of type '" "Xapian::PositionIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::PositionIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_PositionIterator___ne__(arg1,(Xapian::PositionIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *PositionIterator_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[37], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *PositionIterator_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_PostingIterator__SWIG_0(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::PostingIterator *)new Xapian::PostingIterator();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[38], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_PostingIterator(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_PostingIterator" "', argument " "1"" of type '" "Xapian::PostingIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_PostingIterator__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::PostingIterator *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_PostingIterator" "', argument " "1"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_PostingIterator" "', argument " "1"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::PostingIterator *)new Xapian::PostingIterator((Xapian::PostingIterator const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[38], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_PostingIterator(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_PostingIterator",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_PostingIterator__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_PostingIterator__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_PostingIterator'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::PostingIterator()\n"
+    "    Xapian::PostingIterator(Xapian::PostingIterator const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingIterator_skip_to(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"PostingIterator_skip_to",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingIterator_skip_to" "', argument " "1"" of type '" "Xapian::PostingIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "PostingIterator_skip_to" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->skip_to(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingIterator_get_doclength(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termcount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingIterator_get_doclength" "', argument " "1"" of type '" "Xapian::PostingIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::PostingIterator const *)arg1)->get_doclength();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingIterator_get_wdf(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termcount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingIterator_get_wdf" "', argument " "1"" of type '" "Xapian::PostingIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::PostingIterator const *)arg1)->get_wdf();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingIterator_positionlist_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::PositionIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingIterator_positionlist_begin" "', argument " "1"" of type '" "Xapian::PostingIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::PostingIterator const *)arg1)->positionlist_begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::PositionIterator(static_cast< const Xapian::PositionIterator& >(result))), swig_types[37], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingIterator_positionlist_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::PositionIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingIterator_positionlist_end" "', argument " "1"" of type '" "Xapian::PostingIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::PostingIterator const *)arg1)->positionlist_end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::PositionIterator(static_cast< const Xapian::PositionIterator& >(result))), swig_types[37], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingIterator___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingIterator___str__" "', argument " "1"" of type '" "Xapian::PostingIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::PostingIterator const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingIterator___eq__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  Xapian::PostingIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"PostingIterator___eq__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingIterator___eq__" "', argument " "1"" of type '" "Xapian::PostingIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[38], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "PostingIterator___eq__" "', argument " "2"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "PostingIterator___eq__" "', argument " "2"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::PostingIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_PostingIterator___eq__(arg1,(Xapian::PostingIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingIterator___ne__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  Xapian::PostingIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"PostingIterator___ne__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingIterator___ne__" "', argument " "1"" of type '" "Xapian::PostingIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[38], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "PostingIterator___ne__" "', argument " "2"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "PostingIterator___ne__" "', argument " "2"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::PostingIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_PostingIterator___ne__(arg1,(Xapian::PostingIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingIterator_get_docid(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::docid result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingIterator_get_docid" "', argument " "1"" of type '" "Xapian::PostingIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::docid)Xapian_PostingIterator_get_docid((Xapian::PostingIterator const *)arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingIterator_next(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingIterator_next" "', argument " "1"" of type '" "Xapian::PostingIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        Xapian_PostingIterator_next(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingIterator_equals(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = (Xapian::PostingIterator *) 0 ;
+  Xapian::PostingIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"PostingIterator_equals",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingIterator_equals" "', argument " "1"" of type '" "Xapian::PostingIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[38], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "PostingIterator_equals" "', argument " "2"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "PostingIterator_equals" "', argument " "2"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::PostingIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)Xapian_PostingIterator_equals((Xapian::PostingIterator const *)arg1,(Xapian::PostingIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *PostingIterator_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[38], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *PostingIterator_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap___eq__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = 0 ;
+  Xapian::PostingIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"__eq__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "__eq__" "', argument " "1"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "__eq__" "', argument " "1"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[38], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "__eq__" "', argument " "2"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "__eq__" "', argument " "2"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::PostingIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)Xapian::operator ==((Xapian::PostingIterator const &)*arg1,(Xapian::PostingIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap___ne__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingIterator *arg1 = 0 ;
+  Xapian::PostingIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"__ne__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[38], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "__ne__" "', argument " "1"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "__ne__" "', argument " "1"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[38], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "__ne__" "', argument " "2"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "__ne__" "', argument " "2"" of type '" "Xapian::PostingIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::PostingIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)Xapian::operator !=((Xapian::PostingIterator const &)*arg1,(Xapian::PostingIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_TermIterator__SWIG_0(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::TermIterator *)new Xapian::TermIterator();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[55], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_TermIterator__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::TermIterator *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_TermIterator" "', argument " "1"" of type '" "Xapian::TermIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_TermIterator" "', argument " "1"" of type '" "Xapian::TermIterator const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::TermIterator *)new Xapian::TermIterator((Xapian::TermIterator const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[55], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_TermIterator(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_TermIterator",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_TermIterator__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_TermIterator__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_TermIterator'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::TermIterator()\n"
+    "    Xapian::TermIterator(Xapian::TermIterator const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_TermIterator(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_TermIterator" "', argument " "1"" of type '" "Xapian::TermIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermIterator_get_term(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermIterator_get_term" "', argument " "1"" of type '" "Xapian::TermIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian_TermIterator_get_term((Xapian::TermIterator const *)arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermIterator_next(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermIterator_next" "', argument " "1"" of type '" "Xapian::TermIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        Xapian_TermIterator_next(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermIterator_equals(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  Xapian::TermIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"TermIterator_equals",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermIterator_equals" "', argument " "1"" of type '" "Xapian::TermIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[55], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermIterator_equals" "', argument " "2"" of type '" "Xapian::TermIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermIterator_equals" "', argument " "2"" of type '" "Xapian::TermIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::TermIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)Xapian_TermIterator_equals((Xapian::TermIterator const *)arg1,(Xapian::TermIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermIterator_skip_to(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"TermIterator_skip_to",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermIterator_skip_to" "', argument " "1"" of type '" "Xapian::TermIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermIterator_skip_to" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermIterator_skip_to" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->skip_to((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermIterator_get_wdf(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termcount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermIterator_get_wdf" "', argument " "1"" of type '" "Xapian::TermIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::TermIterator const *)arg1)->get_wdf();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermIterator_get_termfreq(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermIterator_get_termfreq" "', argument " "1"" of type '" "Xapian::TermIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::TermIterator const *)arg1)->get_termfreq();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermIterator_positionlist_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::PositionIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermIterator_positionlist_begin" "', argument " "1"" of type '" "Xapian::TermIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (arg1)->positionlist_begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::PositionIterator(static_cast< const Xapian::PositionIterator& >(result))), swig_types[37], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermIterator_positionlist_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::PositionIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermIterator_positionlist_end" "', argument " "1"" of type '" "Xapian::TermIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (arg1)->positionlist_end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::PositionIterator(static_cast< const Xapian::PositionIterator& >(result))), swig_types[37], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermIterator___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermIterator___str__" "', argument " "1"" of type '" "Xapian::TermIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::TermIterator const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermIterator___eq__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  Xapian::TermIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"TermIterator___eq__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermIterator___eq__" "', argument " "1"" of type '" "Xapian::TermIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[55], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermIterator___eq__" "', argument " "2"" of type '" "Xapian::TermIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermIterator___eq__" "', argument " "2"" of type '" "Xapian::TermIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::TermIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_TermIterator___eq__(arg1,(Xapian::TermIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermIterator___ne__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermIterator *arg1 = (Xapian::TermIterator *) 0 ;
+  Xapian::TermIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"TermIterator___ne__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[55], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermIterator___ne__" "', argument " "1"" of type '" "Xapian::TermIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[55], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermIterator___ne__" "', argument " "2"" of type '" "Xapian::TermIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermIterator___ne__" "', argument " "2"" of type '" "Xapian::TermIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::TermIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_TermIterator___ne__(arg1,(Xapian::TermIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *TermIterator_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[55], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *TermIterator_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ValueIterator__SWIG_0(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ValueIterator *)new Xapian::ValueIterator();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[59], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ValueIterator__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::ValueIterator *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_ValueIterator" "', argument " "1"" of type '" "Xapian::ValueIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_ValueIterator" "', argument " "1"" of type '" "Xapian::ValueIterator const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ValueIterator *)new Xapian::ValueIterator((Xapian::ValueIterator const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[59], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ValueIterator(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_ValueIterator",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_ValueIterator__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_ValueIterator__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_ValueIterator'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::ValueIterator()\n"
+    "    Xapian::ValueIterator(Xapian::ValueIterator const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_ValueIterator(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = (Xapian::ValueIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_ValueIterator" "', argument " "1"" of type '" "Xapian::ValueIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueIterator_get_value(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = (Xapian::ValueIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueIterator_get_value" "', argument " "1"" of type '" "Xapian::ValueIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian_ValueIterator_get_value((Xapian::ValueIterator const *)arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueIterator_next(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = (Xapian::ValueIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueIterator_next" "', argument " "1"" of type '" "Xapian::ValueIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        Xapian_ValueIterator_next(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueIterator_equals(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = (Xapian::ValueIterator *) 0 ;
+  Xapian::ValueIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"ValueIterator_equals",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueIterator_equals" "', argument " "1"" of type '" "Xapian::ValueIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[59], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "ValueIterator_equals" "', argument " "2"" of type '" "Xapian::ValueIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "ValueIterator_equals" "', argument " "2"" of type '" "Xapian::ValueIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::ValueIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)Xapian_ValueIterator_equals((Xapian::ValueIterator const *)arg1,(Xapian::ValueIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueIterator_get_docid(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = (Xapian::ValueIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::docid result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueIterator_get_docid" "', argument " "1"" of type '" "Xapian::ValueIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::docid)((Xapian::ValueIterator const *)arg1)->get_docid();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueIterator_get_valueno(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = (Xapian::ValueIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::valueno result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueIterator_get_valueno" "', argument " "1"" of type '" "Xapian::ValueIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::valueno)((Xapian::ValueIterator const *)arg1)->get_valueno();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueIterator_skip_to(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = (Xapian::ValueIterator *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"ValueIterator_skip_to",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueIterator_skip_to" "', argument " "1"" of type '" "Xapian::ValueIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "ValueIterator_skip_to" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->skip_to(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueIterator_check(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = (Xapian::ValueIterator *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"ValueIterator_check",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueIterator_check" "', argument " "1"" of type '" "Xapian::ValueIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "ValueIterator_check" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)(arg1)->check(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueIterator___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = (Xapian::ValueIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueIterator___str__" "', argument " "1"" of type '" "Xapian::ValueIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::ValueIterator const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueIterator___eq__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = (Xapian::ValueIterator *) 0 ;
+  Xapian::ValueIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"ValueIterator___eq__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueIterator___eq__" "', argument " "1"" of type '" "Xapian::ValueIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[59], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "ValueIterator___eq__" "', argument " "2"" of type '" "Xapian::ValueIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "ValueIterator___eq__" "', argument " "2"" of type '" "Xapian::ValueIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::ValueIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_ValueIterator___eq__(arg1,(Xapian::ValueIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueIterator___ne__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueIterator *arg1 = (Xapian::ValueIterator *) 0 ;
+  Xapian::ValueIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"ValueIterator___ne__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[59], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueIterator___ne__" "', argument " "1"" of type '" "Xapian::ValueIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[59], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "ValueIterator___ne__" "', argument " "2"" of type '" "Xapian::ValueIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "ValueIterator___ne__" "', argument " "2"" of type '" "Xapian::ValueIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::ValueIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_ValueIterator___ne__(arg1,(Xapian::ValueIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *ValueIterator_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[59], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *ValueIterator_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Document__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::Document *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Document" "', argument " "1"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Document" "', argument " "1"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Document *)new Xapian::Document((Xapian::Document const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[15], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Document__SWIG_1(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::Document *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Document *)new Xapian::Document();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[15], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Document(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_Document",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_Document__SWIG_1(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_Document__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_Document'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::Document(Xapian::Document const &)\n"
+    "    Xapian::Document()\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_Document(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_Document" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_get_value(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  std::string result;
+  if (!SWIG_Python_UnpackTuple(args,"Document_get_value",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_get_value" "', argument " "1"" of type '" "Xapian::Document const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Document_get_value" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Document const *)arg1)->get_value(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_add_value(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  Xapian::valueno arg2 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  int res3 = ((0)) ;
+  PyObject *swig_obj[3] ;
+  if (!SWIG_Python_UnpackTuple(args,"Document_add_value",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_add_value" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Document_add_value" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "Document_add_value" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Document_add_value" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_value(arg2,(std::string const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_remove_value(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Document_remove_value",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_remove_value" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Document_remove_value" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->remove_value(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_clear_values(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_clear_values" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->clear_values();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_get_data(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_get_data" "', argument " "1"" of type '" "Xapian::Document const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Document const *)arg1)->get_data();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_set_data(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Document_set_data",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_set_data" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Document_set_data" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Document_set_data" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_data((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_add_posting__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::termpos arg3 ;
+  Xapian::termcount arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  unsigned int val4 ;
+  int ecode4 = 0 ;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_add_posting" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Document_add_posting" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Document_add_posting" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Document_add_posting" "', argument " "3"" of type '" "Xapian::termpos""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termpos >(val3);
+  ecode4 = SWIG_AsVal_unsigned_SS_int(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "Document_add_posting" "', argument " "4"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< Xapian::termcount >(val4);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_posting((std::string const &)*arg2,arg3,arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_add_posting__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::termpos arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_add_posting" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Document_add_posting" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Document_add_posting" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Document_add_posting" "', argument " "3"" of type '" "Xapian::termpos""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termpos >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_posting((std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_add_posting(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Document_add_posting",0,4,argv))) goto fail;
+  --argc;
+  if (argc == 3) {
+    return _wrap_Document_add_posting__SWIG_1(self, argc, argv);
+  }
+  if (argc == 4) {
+    return _wrap_Document_add_posting__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Document_add_posting'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    add_posting(Xapian::Document *,std::string const &,Xapian::termpos,Xapian::termcount)\n"
+    "    add_posting(Xapian::Document *,std::string const &,Xapian::termpos)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_add_term__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::termcount arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_add_term" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Document_add_term" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Document_add_term" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Document_add_term" "', argument " "3"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termcount >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_term((std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_add_term__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_add_term" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Document_add_term" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Document_add_term" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_term((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_add_term(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Document_add_term",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_Document_add_term__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_Document_add_term__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Document_add_term'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    add_term(Xapian::Document *,std::string const &,Xapian::termcount)\n"
+    "    add_term(Xapian::Document *,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_add_boolean_term(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Document_add_boolean_term",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_add_boolean_term" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Document_add_boolean_term" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Document_add_boolean_term" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_boolean_term((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_remove_posting__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::termpos arg3 ;
+  Xapian::termcount arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  unsigned int val4 ;
+  int ecode4 = 0 ;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_remove_posting" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Document_remove_posting" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Document_remove_posting" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Document_remove_posting" "', argument " "3"" of type '" "Xapian::termpos""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termpos >(val3);
+  ecode4 = SWIG_AsVal_unsigned_SS_int(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "Document_remove_posting" "', argument " "4"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< Xapian::termcount >(val4);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->remove_posting((std::string const &)*arg2,arg3,arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_remove_posting__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::termpos arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_remove_posting" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Document_remove_posting" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Document_remove_posting" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Document_remove_posting" "', argument " "3"" of type '" "Xapian::termpos""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termpos >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->remove_posting((std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_remove_posting(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Document_remove_posting",0,4,argv))) goto fail;
+  --argc;
+  if (argc == 3) {
+    return _wrap_Document_remove_posting__SWIG_1(self, argc, argv);
+  }
+  if (argc == 4) {
+    return _wrap_Document_remove_posting__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Document_remove_posting'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    remove_posting(Xapian::Document *,std::string const &,Xapian::termpos,Xapian::termcount)\n"
+    "    remove_posting(Xapian::Document *,std::string const &,Xapian::termpos)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_remove_term(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Document_remove_term",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_remove_term" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Document_remove_term" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Document_remove_term" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->remove_term((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_clear_terms(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_clear_terms" "', argument " "1"" of type '" "Xapian::Document *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->clear_terms();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_termlist_count(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termcount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_termlist_count" "', argument " "1"" of type '" "Xapian::Document const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::Document const *)arg1)->termlist_count();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_termlist_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::TermIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_termlist_begin" "', argument " "1"" of type '" "Xapian::Document const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Document const *)arg1)->termlist_begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_termlist_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::TermIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_termlist_end" "', argument " "1"" of type '" "Xapian::Document const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Document const *)arg1)->termlist_end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_values_count(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termcount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_values_count" "', argument " "1"" of type '" "Xapian::Document const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::Document const *)arg1)->values_count();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_values_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::ValueIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_values_begin" "', argument " "1"" of type '" "Xapian::Document const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Document const *)arg1)->values_begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ValueIterator(static_cast< const Xapian::ValueIterator& >(result))), swig_types[59], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_values_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::ValueIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_values_end" "', argument " "1"" of type '" "Xapian::Document const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Document const *)arg1)->values_end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ValueIterator(static_cast< const Xapian::ValueIterator& >(result))), swig_types[59], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_get_docid(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::docid result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_get_docid" "', argument " "1"" of type '" "Xapian::Document const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::docid)((Xapian::Document const *)arg1)->get_docid();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_serialise(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_serialise" "', argument " "1"" of type '" "Xapian::Document const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Document const *)arg1)->serialise();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document_unserialise(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  PyObject *swig_obj[1] ;
+  Xapian::Document result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document_unserialise" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Document_unserialise" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Document::unserialise((std::string const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Document(static_cast< const Xapian::Document& >(result))), swig_types[15], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Document___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Document *arg1 = (Xapian::Document *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[15], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Document___str__" "', argument " "1"" of type '" "Xapian::Document const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Document * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Document const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *Document_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[15], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *Document_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_PostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::PostingSource *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  arg1 = swig_obj[0];
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        if ( arg1 != (&_Py_NoneStruct) ) {
+          result = (Xapian::PostingSource *)new SwigDirector_PostingSource(arg1);
+        } else {
+          SWIG_Python_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor");
+          goto fail;
+        }
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[39], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_PostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_PostingSource" "', argument " "1"" of type '" "Xapian::PostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_get_termfreq_min(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_get_termfreq_min" "', argument " "1"" of type '" "Xapian::PostingSource const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::PostingSource::get_termfreq_min");
+        } else {
+          result = (Xapian::doccount)((Xapian::PostingSource const *)arg1)->get_termfreq_min();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_get_termfreq_est(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_get_termfreq_est" "', argument " "1"" of type '" "Xapian::PostingSource const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::PostingSource::get_termfreq_est");
+        } else {
+          result = (Xapian::doccount)((Xapian::PostingSource const *)arg1)->get_termfreq_est();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_get_termfreq_max(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_get_termfreq_max" "', argument " "1"" of type '" "Xapian::PostingSource const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::PostingSource::get_termfreq_max");
+        } else {
+          result = (Xapian::doccount)((Xapian::PostingSource const *)arg1)->get_termfreq_max();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_get_maxweight(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::weight result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_get_maxweight" "', argument " "1"" of type '" "Xapian::PostingSource const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::weight)((Xapian::PostingSource const *)arg1)->get_maxweight();
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_get_weight(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  Xapian::weight result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_get_weight" "', argument " "1"" of type '" "Xapian::PostingSource const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          result = (Xapian::weight)((Xapian::PostingSource const *)arg1)->Xapian::PostingSource::get_weight();
+        } else {
+          result = (Xapian::weight)((Xapian::PostingSource const *)arg1)->get_weight();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_get_docid(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  Xapian::docid result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_get_docid" "', argument " "1"" of type '" "Xapian::PostingSource const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::PostingSource::get_docid");
+        } else {
+          result = (Xapian::docid)((Xapian::PostingSource const *)arg1)->get_docid();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_next(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  Xapian::weight arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  if (!SWIG_Python_UnpackTuple(args,"PostingSource_next",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_next" "', argument " "1"" of type '" "Xapian::PostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "PostingSource_next" "', argument " "2"" of type '" "Xapian::weight""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::weight >(val2);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::PostingSource::next");
+        } else {
+          (arg1)->next(arg2);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_skip_to(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  Xapian::docid arg2 ;
+  Xapian::weight arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject *swig_obj[3] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  if (!SWIG_Python_UnpackTuple(args,"PostingSource_skip_to",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_skip_to" "', argument " "1"" of type '" "Xapian::PostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "PostingSource_skip_to" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "PostingSource_skip_to" "', argument " "3"" of type '" "Xapian::weight""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::weight >(val3);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          (arg1)->Xapian::PostingSource::skip_to(arg2,arg3);
+        } else {
+          (arg1)->skip_to(arg2,arg3);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_check(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  Xapian::docid arg2 ;
+  Xapian::weight arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject *swig_obj[3] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"PostingSource_check",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_check" "', argument " "1"" of type '" "Xapian::PostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "PostingSource_check" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "PostingSource_check" "', argument " "3"" of type '" "Xapian::weight""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::weight >(val3);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          result = (bool)(arg1)->Xapian::PostingSource::check(arg2,arg3);
+        } else {
+          result = (bool)(arg1)->check(arg2,arg3);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_at_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  bool result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_at_end" "', argument " "1"" of type '" "Xapian::PostingSource const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::PostingSource::at_end");
+        } else {
+          result = (bool)((Xapian::PostingSource const *)arg1)->at_end();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_name(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_name" "', argument " "1"" of type '" "Xapian::PostingSource const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          result = ((Xapian::PostingSource const *)arg1)->Xapian::PostingSource::name();
+        } else {
+          result = ((Xapian::PostingSource const *)arg1)->name();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource_init(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  Xapian::Database *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  if (!SWIG_Python_UnpackTuple(args,"PostingSource_init",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource_init" "', argument " "1"" of type '" "Xapian::PostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[4], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "PostingSource_init" "', argument " "2"" of type '" "Xapian::Database const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "PostingSource_init" "', argument " "2"" of type '" "Xapian::Database const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Database * >(argp2);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::PostingSource::init");
+        } else {
+          (arg1)->init((Xapian::Database const &)*arg2);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_PostingSource___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "PostingSource___str__" "', argument " "1"" of type '" "Xapian::PostingSource const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          result = ((Xapian::PostingSource const *)arg1)->Xapian::PostingSource::get_description();
+        } else {
+          result = ((Xapian::PostingSource const *)arg1)->get_description();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_disown_PostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "disown_PostingSource" "', argument " "1"" of type '" "Xapian::PostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      Swig::Director *director = dynamic_cast<Swig::Director *>(arg1);
+      if (director) director->swig_disown();
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *PostingSource_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[39], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *PostingSource_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ValuePostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::ValuePostingSource *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_ValuePostingSource" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ValuePostingSource *)new Xapian::ValuePostingSource(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[61], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_ValuePostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValuePostingSource *arg1 = (Xapian::ValuePostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[61], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_ValuePostingSource" "', argument " "1"" of type '" "Xapian::ValuePostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValuePostingSource * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *ValuePostingSource_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[61], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *ValuePostingSource_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ValueWeightPostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::ValueWeightPostingSource *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_ValueWeightPostingSource" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ValueWeightPostingSource *)new Xapian::ValueWeightPostingSource(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[64], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_ValueWeightPostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueWeightPostingSource *arg1 = (Xapian::ValueWeightPostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[64], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_ValueWeightPostingSource" "', argument " "1"" of type '" "Xapian::ValueWeightPostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueWeightPostingSource * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *ValueWeightPostingSource_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[64], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *ValueWeightPostingSource_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DecreasingValueWeightPostingSource__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  Xapian::docid arg2 ;
+  Xapian::docid arg3 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  Xapian::DecreasingValueWeightPostingSource *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_DecreasingValueWeightPostingSource" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DecreasingValueWeightPostingSource" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DecreasingValueWeightPostingSource" "', argument " "3"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::docid >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::DecreasingValueWeightPostingSource *)new Xapian::DecreasingValueWeightPostingSource(arg1,arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[13], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DecreasingValueWeightPostingSource__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  Xapian::docid arg2 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  Xapian::DecreasingValueWeightPostingSource *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_DecreasingValueWeightPostingSource" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DecreasingValueWeightPostingSource" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::DecreasingValueWeightPostingSource *)new Xapian::DecreasingValueWeightPostingSource(arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[13], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DecreasingValueWeightPostingSource__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  Xapian::DecreasingValueWeightPostingSource *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_DecreasingValueWeightPostingSource" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::DecreasingValueWeightPostingSource *)new Xapian::DecreasingValueWeightPostingSource(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[13], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DecreasingValueWeightPostingSource(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_DecreasingValueWeightPostingSource",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_DecreasingValueWeightPostingSource__SWIG_2(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_new_DecreasingValueWeightPostingSource__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_new_DecreasingValueWeightPostingSource__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_DecreasingValueWeightPostingSource'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::DecreasingValueWeightPostingSource(Xapian::valueno,Xapian::docid,Xapian::docid)\n"
+    "    Xapian::DecreasingValueWeightPostingSource(Xapian::valueno,Xapian::docid)\n"
+    "    Xapian::DecreasingValueWeightPostingSource(Xapian::valueno)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_DecreasingValueWeightPostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::DecreasingValueWeightPostingSource *arg1 = (Xapian::DecreasingValueWeightPostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[13], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_DecreasingValueWeightPostingSource" "', argument " "1"" of type '" "Xapian::DecreasingValueWeightPostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::DecreasingValueWeightPostingSource * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *DecreasingValueWeightPostingSource_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[13], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *DecreasingValueWeightPostingSource_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ValueMapPostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::ValueMapPostingSource *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_ValueMapPostingSource" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ValueMapPostingSource *)new Xapian::ValueMapPostingSource(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[60], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueMapPostingSource_add_mapping(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueMapPostingSource *arg1 = (Xapian::ValueMapPostingSource *) 0 ;
+  std::string *arg2 = 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject *swig_obj[3] ;
+  if (!SWIG_Python_UnpackTuple(args,"ValueMapPostingSource_add_mapping",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[60], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueMapPostingSource_add_mapping" "', argument " "1"" of type '" "Xapian::ValueMapPostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueMapPostingSource * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "ValueMapPostingSource_add_mapping" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "ValueMapPostingSource_add_mapping" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "ValueMapPostingSource_add_mapping" "', argument " "3"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< double >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_mapping((std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueMapPostingSource_clear_mappings(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueMapPostingSource *arg1 = (Xapian::ValueMapPostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[60], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueMapPostingSource_clear_mappings" "', argument " "1"" of type '" "Xapian::ValueMapPostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueMapPostingSource * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->clear_mappings();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueMapPostingSource_set_default_weight(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueMapPostingSource *arg1 = (Xapian::ValueMapPostingSource *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"ValueMapPostingSource_set_default_weight",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[60], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueMapPostingSource_set_default_weight" "', argument " "1"" of type '" "Xapian::ValueMapPostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueMapPostingSource * >(argp1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "ValueMapPostingSource_set_default_weight" "', argument " "2"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< double >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_default_weight(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_ValueMapPostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueMapPostingSource *arg1 = (Xapian::ValueMapPostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[60], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_ValueMapPostingSource" "', argument " "1"" of type '" "Xapian::ValueMapPostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueMapPostingSource * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *ValueMapPostingSource_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[60], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *ValueMapPostingSource_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_FixedWeightPostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::weight arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::FixedWeightPostingSource *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_FixedWeightPostingSource" "', argument " "1"" of type '" "Xapian::weight""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::weight >(val1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::FixedWeightPostingSource *)new Xapian::FixedWeightPostingSource(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[22], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_FixedWeightPostingSource(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::FixedWeightPostingSource *arg1 = (Xapian::FixedWeightPostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[22], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_FixedWeightPostingSource" "', argument " "1"" of type '" "Xapian::FixedWeightPostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::FixedWeightPostingSource * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *FixedWeightPostingSource_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[22], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *FixedWeightPostingSource_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_MSet__SWIG_0(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::MSet *)new Xapian::MSet();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[28], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_MSet__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::MSet *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_MSet" "', argument " "1"" of type '" "Xapian::MSet const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_MSet" "', argument " "1"" of type '" "Xapian::MSet const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::MSet *)new Xapian::MSet((Xapian::MSet const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[28], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_MSet(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_MSet",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_MSet__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_MSet__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_MSet'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::MSet()\n"
+    "    Xapian::MSet(Xapian::MSet const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_MSet(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_MSet" "', argument " "1"" of type '" "Xapian::MSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_fetch__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  Xapian::MSetIterator *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_fetch" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "MSet_fetch" "', argument " "2"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "MSet_fetch" "', argument " "2"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  res3 = SWIG_Python_ConvertPtrAndOwn(swig_obj[2], &argp3, swig_types[29], 0, 0);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "MSet_fetch" "', argument " "3"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  if (!argp3) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "MSet_fetch" "', argument " "3"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< Xapian::MSetIterator * >(argp3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        ((Xapian::MSet const *)arg1)->fetch(*arg2,*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_fetch__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_fetch" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "MSet_fetch" "', argument " "2"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "MSet_fetch" "', argument " "2"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        ((Xapian::MSet const *)arg1)->fetch(*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_fetch__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_fetch" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        ((Xapian::MSet const *)arg1)->fetch();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_fetch(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"MSet_fetch",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_MSet_fetch__SWIG_2(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_MSet_fetch__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_MSet_fetch__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'MSet_fetch'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    fetch(Xapian::MSet const *,Xapian::MSetIterator &,Xapian::MSetIterator &)\n"
+    "    fetch(Xapian::MSet const *,Xapian::MSetIterator &)\n"
+    "    fetch(Xapian::MSet const *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_convert_to_percent__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  Xapian::weight arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  Xapian::percent result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_convert_to_percent" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "MSet_convert_to_percent" "', argument " "2"" of type '" "Xapian::weight""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::weight >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::percent)((Xapian::MSet const *)arg1)->convert_to_percent(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_convert_to_percent__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  Xapian::percent result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_convert_to_percent" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "MSet_convert_to_percent" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "MSet_convert_to_percent" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::percent)((Xapian::MSet const *)arg1)->convert_to_percent((Xapian::MSetIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_convert_to_percent(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"MSet_convert_to_percent",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    int _v = 0;
+    {
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[1], 0, swig_types[29], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_1;
+    return _wrap_MSet_convert_to_percent__SWIG_1(self, argc, argv);
+  }
+check_1:
+  if (argc == 2) {
+    return _wrap_MSet_convert_to_percent__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'MSet_convert_to_percent'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    convert_to_percent(Xapian::MSet const *,Xapian::weight)\n"
+    "    convert_to_percent(Xapian::MSet const *,Xapian::MSetIterator const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_termfreq(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  std::string arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::doccount result;
+  if (!SWIG_Python_UnpackTuple(args,"MSet_get_termfreq",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_termfreq" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    int res = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res >= 0) || !ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType((((ptr ? res : -5) != (-1)) ? (ptr ? res : -5) : -5)), "in method '" "MSet_get_termfreq" "', argument " "2"" of type '" "std::string""'"); goto fail; } while(0);
+    }
+    arg2 = *ptr;
+    if (((res >= 0) && (res & ((1 << 8) << 1)))) delete ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::MSet const *)arg1)->get_termfreq(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_termweight(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  std::string arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::weight result;
+  if (!SWIG_Python_UnpackTuple(args,"MSet_get_termweight",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_termweight" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    int res = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res >= 0) || !ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType((((ptr ? res : -5) != (-1)) ? (ptr ? res : -5) : -5)), "in method '" "MSet_get_termweight" "', argument " "2"" of type '" "std::string""'"); goto fail; } while(0);
+    }
+    arg2 = *ptr;
+    if (((res >= 0) && (res & ((1 << 8) << 1)))) delete ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::weight)((Xapian::MSet const *)arg1)->get_termweight(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_firstitem(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_firstitem" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::MSet const *)arg1)->get_firstitem();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_matches_lower_bound(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_matches_lower_bound" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::MSet const *)arg1)->get_matches_lower_bound();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_matches_estimated(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_matches_estimated" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::MSet const *)arg1)->get_matches_estimated();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_matches_upper_bound(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_matches_upper_bound" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::MSet const *)arg1)->get_matches_upper_bound();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_uncollapsed_matches_lower_bound(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_uncollapsed_matches_lower_bound" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::MSet const *)arg1)->get_uncollapsed_matches_lower_bound();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_uncollapsed_matches_estimated(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_uncollapsed_matches_estimated" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::MSet const *)arg1)->get_uncollapsed_matches_estimated();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_uncollapsed_matches_upper_bound(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_uncollapsed_matches_upper_bound" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::MSet const *)arg1)->get_uncollapsed_matches_upper_bound();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_max_possible(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::weight result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_max_possible" "', argument " "1"" of type '" "Xapian::MSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::weight)(arg1)->get_max_possible();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_max_attained(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::weight result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_max_attained" "', argument " "1"" of type '" "Xapian::MSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::weight)(arg1)->get_max_attained();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_size(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_size" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::MSet const *)arg1)->size();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_empty(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  bool result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_empty" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)((Xapian::MSet const *)arg1)->empty();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::MSetIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_begin" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::MSet const *)arg1)->begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::MSetIterator(static_cast< const Xapian::MSetIterator& >(result))), swig_types[29], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::MSetIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_end" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::MSet const *)arg1)->end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::MSetIterator(static_cast< const Xapian::MSetIterator& >(result))), swig_types[29], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_back(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::MSetIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_back" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::MSet const *)arg1)->back();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::MSetIterator(static_cast< const Xapian::MSetIterator& >(result))), swig_types[29], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet__get_hit_internal(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  Xapian::doccount arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::MSetIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"MSet__get_hit_internal",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet__get_hit_internal" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "MSet__get_hit_internal" "', argument " "2"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::doccount >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian_MSet_get_hit((Xapian::MSet const *)arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::MSetIterator(static_cast< const Xapian::MSetIterator& >(result))), swig_types[29], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_document_percentage(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  Xapian::doccount arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  int result;
+  if (!SWIG_Python_UnpackTuple(args,"MSet_get_document_percentage",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_document_percentage" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "MSet_get_document_percentage" "', argument " "2"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::doccount >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (int)Xapian_MSet_get_document_percentage((Xapian::MSet const *)arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_document(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  Xapian::doccount arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::Document result;
+  if (!SWIG_Python_UnpackTuple(args,"MSet_get_document",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_document" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "MSet_get_document" "', argument " "2"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::doccount >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian_MSet_get_document((Xapian::MSet const *)arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Document(static_cast< const Xapian::Document& >(result))), swig_types[15], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_get_docid(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  Xapian::doccount arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::docid result;
+  if (!SWIG_Python_UnpackTuple(args,"MSet_get_docid",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_get_docid" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "MSet_get_docid" "', argument " "2"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::doccount >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::docid)Xapian_MSet_get_docid((Xapian::MSet const *)arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet___str__" "', argument " "1"" of type '" "Xapian::MSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::MSet const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet_items_get(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  PyObject *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet_items_get" "', argument " "1"" of type '" "Xapian::MSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  result = (PyObject *)Xapian_MSet_items_get(arg1);
+  resultobj = result;
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSet___cmp__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSet *arg1 = (Xapian::MSet *) 0 ;
+  Xapian::MSet *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  int result;
+  if (!SWIG_Python_UnpackTuple(args,"MSet___cmp__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[28], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSet___cmp__" "', argument " "1"" of type '" "Xapian::MSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSet * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[28], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "MSet___cmp__" "', argument " "2"" of type '" "Xapian::MSet const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "MSet___cmp__" "', argument " "2"" of type '" "Xapian::MSet const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSet * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (int)Xapian_MSet___cmp__(arg1,(Xapian::MSet const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *MSet_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[28], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *MSet_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_MSetIterator__SWIG_0(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::MSetIterator *)new Xapian::MSetIterator();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[29], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_MSetIterator__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::MSetIterator *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_MSetIterator" "', argument " "1"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_MSetIterator" "', argument " "1"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::MSetIterator *)new Xapian::MSetIterator((Xapian::MSetIterator const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[29], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_MSetIterator(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_MSetIterator",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_MSetIterator__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_MSetIterator__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_MSetIterator'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::MSetIterator()\n"
+    "    Xapian::MSetIterator(Xapian::MSetIterator const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_MSetIterator(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_MSetIterator" "', argument " "1"" of type '" "Xapian::MSetIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator_get_docid(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::docid result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator_get_docid" "', argument " "1"" of type '" "Xapian::MSetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::docid)Xapian_MSetIterator_get_docid((Xapian::MSetIterator const *)arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator_next(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator_next" "', argument " "1"" of type '" "Xapian::MSetIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        Xapian_MSetIterator_next(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator_prev(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator_prev" "', argument " "1"" of type '" "Xapian::MSetIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        Xapian_MSetIterator_prev(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator_equals(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"MSetIterator_equals",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator_equals" "', argument " "1"" of type '" "Xapian::MSetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "MSetIterator_equals" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "MSetIterator_equals" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)Xapian_MSetIterator_equals((Xapian::MSetIterator const *)arg1,(Xapian::MSetIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator_get_document(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::Document result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator_get_document" "', argument " "1"" of type '" "Xapian::MSetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::MSetIterator const *)arg1)->get_document();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Document(static_cast< const Xapian::Document& >(result))), swig_types[15], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator_get_rank(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator_get_rank" "', argument " "1"" of type '" "Xapian::MSetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::MSetIterator const *)arg1)->get_rank();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator_get_weight(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::weight result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator_get_weight" "', argument " "1"" of type '" "Xapian::MSetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::weight)((Xapian::MSetIterator const *)arg1)->get_weight();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator_get_collapse_key(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator_get_collapse_key" "', argument " "1"" of type '" "Xapian::MSetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::MSetIterator const *)arg1)->get_collapse_key();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator_get_collapse_count(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator_get_collapse_count" "', argument " "1"" of type '" "Xapian::MSetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::MSetIterator const *)arg1)->get_collapse_count();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator_get_percent(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::percent result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator_get_percent" "', argument " "1"" of type '" "Xapian::MSetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::percent)((Xapian::MSetIterator const *)arg1)->get_percent();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator___str__" "', argument " "1"" of type '" "Xapian::MSetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::MSetIterator const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator___eq__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"MSetIterator___eq__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator___eq__" "', argument " "1"" of type '" "Xapian::MSetIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "MSetIterator___eq__" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "MSetIterator___eq__" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_MSetIterator___eq__(arg1,(Xapian::MSetIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MSetIterator___ne__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MSetIterator *arg1 = (Xapian::MSetIterator *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"MSetIterator___ne__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[29], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MSetIterator___ne__" "', argument " "1"" of type '" "Xapian::MSetIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MSetIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "MSetIterator___ne__" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "MSetIterator___ne__" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_MSetIterator___ne__(arg1,(Xapian::MSetIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *MSetIterator_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[29], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *MSetIterator_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ESet__SWIG_0(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::ESet *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ESet *)new Xapian::ESet();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[16], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ESet__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::ESet *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::ESet *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[16], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_ESet" "', argument " "1"" of type '" "Xapian::ESet const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_ESet" "', argument " "1"" of type '" "Xapian::ESet const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ESet *)new Xapian::ESet((Xapian::ESet const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[16], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ESet(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_ESet",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_ESet__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_ESet__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_ESet'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::ESet()\n"
+    "    Xapian::ESet(Xapian::ESet const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_ESet(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESet *arg1 = (Xapian::ESet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[16], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_ESet" "', argument " "1"" of type '" "Xapian::ESet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESet_get_ebound(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESet *arg1 = (Xapian::ESet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termcount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[16], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESet_get_ebound" "', argument " "1"" of type '" "Xapian::ESet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::ESet const *)arg1)->get_ebound();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESet_size(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESet *arg1 = (Xapian::ESet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termcount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[16], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESet_size" "', argument " "1"" of type '" "Xapian::ESet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::ESet const *)arg1)->size();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESet_empty(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESet *arg1 = (Xapian::ESet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  bool result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[16], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESet_empty" "', argument " "1"" of type '" "Xapian::ESet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)((Xapian::ESet const *)arg1)->empty();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESet_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESet *arg1 = (Xapian::ESet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::ESetIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[16], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESet_begin" "', argument " "1"" of type '" "Xapian::ESet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::ESet const *)arg1)->begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ESetIterator(static_cast< const Xapian::ESetIterator& >(result))), swig_types[17], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESet_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESet *arg1 = (Xapian::ESet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::ESetIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[16], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESet_end" "', argument " "1"" of type '" "Xapian::ESet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::ESet const *)arg1)->end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ESetIterator(static_cast< const Xapian::ESetIterator& >(result))), swig_types[17], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESet_back(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESet *arg1 = (Xapian::ESet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::ESetIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[16], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESet_back" "', argument " "1"" of type '" "Xapian::ESet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::ESet const *)arg1)->back();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ESetIterator(static_cast< const Xapian::ESetIterator& >(result))), swig_types[17], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESet___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESet *arg1 = (Xapian::ESet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[16], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESet___str__" "', argument " "1"" of type '" "Xapian::ESet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::ESet const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESet_items_get(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESet *arg1 = (Xapian::ESet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  PyObject *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[16], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESet_items_get" "', argument " "1"" of type '" "Xapian::ESet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESet * >(argp1);
+  result = (PyObject *)Xapian_ESet_items_get(arg1);
+  resultobj = result;
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *ESet_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[16], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *ESet_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ESetIterator__SWIG_0(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::ESetIterator *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ESetIterator *)new Xapian::ESetIterator();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[17], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ESetIterator__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::ESetIterator *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::ESetIterator *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[17], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_ESetIterator" "', argument " "1"" of type '" "Xapian::ESetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_ESetIterator" "', argument " "1"" of type '" "Xapian::ESetIterator const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ESetIterator *)new Xapian::ESetIterator((Xapian::ESetIterator const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[17], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ESetIterator(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_ESetIterator",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_ESetIterator__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_ESetIterator__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_ESetIterator'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::ESetIterator()\n"
+    "    Xapian::ESetIterator(Xapian::ESetIterator const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_ESetIterator(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESetIterator *arg1 = (Xapian::ESetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[17], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_ESetIterator" "', argument " "1"" of type '" "Xapian::ESetIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESetIterator_get_term(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESetIterator *arg1 = (Xapian::ESetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[17], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESetIterator_get_term" "', argument " "1"" of type '" "Xapian::ESetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian_ESetIterator_get_term((Xapian::ESetIterator const *)arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESetIterator_next(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESetIterator *arg1 = (Xapian::ESetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[17], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESetIterator_next" "', argument " "1"" of type '" "Xapian::ESetIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        Xapian_ESetIterator_next(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESetIterator_prev(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESetIterator *arg1 = (Xapian::ESetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[17], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESetIterator_prev" "', argument " "1"" of type '" "Xapian::ESetIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        Xapian_ESetIterator_prev(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESetIterator_equals(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESetIterator *arg1 = (Xapian::ESetIterator *) 0 ;
+  Xapian::ESetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"ESetIterator_equals",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[17], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESetIterator_equals" "', argument " "1"" of type '" "Xapian::ESetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESetIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[17], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "ESetIterator_equals" "', argument " "2"" of type '" "Xapian::ESetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "ESetIterator_equals" "', argument " "2"" of type '" "Xapian::ESetIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::ESetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)Xapian_ESetIterator_equals((Xapian::ESetIterator const *)arg1,(Xapian::ESetIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESetIterator_get_weight(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESetIterator *arg1 = (Xapian::ESetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::weight result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[17], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESetIterator_get_weight" "', argument " "1"" of type '" "Xapian::ESetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::weight)((Xapian::ESetIterator const *)arg1)->get_weight();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESetIterator___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESetIterator *arg1 = (Xapian::ESetIterator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[17], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESetIterator___str__" "', argument " "1"" of type '" "Xapian::ESetIterator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESetIterator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::ESetIterator const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESetIterator___eq__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESetIterator *arg1 = (Xapian::ESetIterator *) 0 ;
+  Xapian::ESetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"ESetIterator___eq__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[17], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESetIterator___eq__" "', argument " "1"" of type '" "Xapian::ESetIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESetIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[17], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "ESetIterator___eq__" "', argument " "2"" of type '" "Xapian::ESetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "ESetIterator___eq__" "', argument " "2"" of type '" "Xapian::ESetIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::ESetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_ESetIterator___eq__(arg1,(Xapian::ESetIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ESetIterator___ne__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ESetIterator *arg1 = (Xapian::ESetIterator *) 0 ;
+  Xapian::ESetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"ESetIterator___ne__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[17], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ESetIterator___ne__" "', argument " "1"" of type '" "Xapian::ESetIterator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ESetIterator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[17], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "ESetIterator___ne__" "', argument " "2"" of type '" "Xapian::ESetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "ESetIterator___ne__" "', argument " "2"" of type '" "Xapian::ESetIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::ESetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    result = (bool)Xapian_ESetIterator___ne__(arg1,(Xapian::ESetIterator const &)*arg2);
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *ESetIterator_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[17], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *ESetIterator_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_RSet__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::RSet *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[43], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_RSet" "', argument " "1"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_RSet" "', argument " "1"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::RSet *)new Xapian::RSet((Xapian::RSet const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[43], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_RSet__SWIG_1(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::RSet *)new Xapian::RSet();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[43], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_RSet(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_RSet",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_RSet__SWIG_1(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_RSet__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_RSet'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::RSet(Xapian::RSet const &)\n"
+    "    Xapian::RSet()\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_RSet(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *arg1 = (Xapian::RSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[43], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_RSet" "', argument " "1"" of type '" "Xapian::RSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet_size(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *arg1 = (Xapian::RSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[43], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "RSet_size" "', argument " "1"" of type '" "Xapian::RSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::RSet const *)arg1)->size();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet_empty(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *arg1 = (Xapian::RSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  bool result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[43], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "RSet_empty" "', argument " "1"" of type '" "Xapian::RSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)((Xapian::RSet const *)arg1)->empty();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet_add_document__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *arg1 = (Xapian::RSet *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[43], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "RSet_add_document" "', argument " "1"" of type '" "Xapian::RSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RSet * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "RSet_add_document" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_document(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet_add_document__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *arg1 = (Xapian::RSet *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[43], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "RSet_add_document" "', argument " "1"" of type '" "Xapian::RSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RSet * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "RSet_add_document" "', argument " "2"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "RSet_add_document" "', argument " "2"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_document(*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet_add_document(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"RSet_add_document",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    int _v = 0;
+    {
+      void *vptr = 0;
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[1], &vptr, swig_types[29], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_1;
+    return _wrap_RSet_add_document__SWIG_1(self, argc, argv);
+  }
+check_1:
+  if (argc == 2) {
+    return _wrap_RSet_add_document__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'RSet_add_document'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    add_document(Xapian::RSet *,Xapian::docid)\n"
+    "    add_document(Xapian::RSet *,Xapian::MSetIterator &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet_remove_document__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *arg1 = (Xapian::RSet *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[43], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "RSet_remove_document" "', argument " "1"" of type '" "Xapian::RSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RSet * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "RSet_remove_document" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->remove_document(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet_remove_document__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *arg1 = (Xapian::RSet *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[43], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "RSet_remove_document" "', argument " "1"" of type '" "Xapian::RSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RSet * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "RSet_remove_document" "', argument " "2"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "RSet_remove_document" "', argument " "2"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->remove_document(*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet_remove_document(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"RSet_remove_document",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    int _v = 0;
+    {
+      void *vptr = 0;
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[1], &vptr, swig_types[29], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_1;
+    return _wrap_RSet_remove_document__SWIG_1(self, argc, argv);
+  }
+check_1:
+  if (argc == 2) {
+    return _wrap_RSet_remove_document__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'RSet_remove_document'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    remove_document(Xapian::RSet *,Xapian::docid)\n"
+    "    remove_document(Xapian::RSet *,Xapian::MSetIterator &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet_contains__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *arg1 = (Xapian::RSet *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  bool result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[43], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "RSet_contains" "', argument " "1"" of type '" "Xapian::RSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RSet * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "RSet_contains" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)(arg1)->contains(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet_contains__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *arg1 = (Xapian::RSet *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[43], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "RSet_contains" "', argument " "1"" of type '" "Xapian::RSet *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RSet * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "RSet_contains" "', argument " "2"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "RSet_contains" "', argument " "2"" of type '" "Xapian::MSetIterator &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)(arg1)->contains(*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet_contains(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"RSet_contains",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    int _v = 0;
+    {
+      void *vptr = 0;
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[1], &vptr, swig_types[29], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_1;
+    return _wrap_RSet_contains__SWIG_1(self, argc, argv);
+  }
+check_1:
+  if (argc == 2) {
+    return _wrap_RSet_contains__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'RSet_contains'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    contains(Xapian::RSet *,Xapian::docid)\n"
+    "    contains(Xapian::RSet *,Xapian::MSetIterator &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_RSet___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::RSet *arg1 = (Xapian::RSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[43], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "RSet___str__" "', argument " "1"" of type '" "Xapian::RSet const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::RSet * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::RSet const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *RSet_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[43], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *RSet_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MatchDecider___call__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MatchDecider *arg1 = (Xapian::MatchDecider *) 0 ;
+  Xapian::Document *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"MatchDecider___call__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[30], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MatchDecider___call__" "', argument " "1"" of type '" "Xapian::MatchDecider const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MatchDecider * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[15], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "MatchDecider___call__" "', argument " "2"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "MatchDecider___call__" "', argument " "2"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Document * >(argp2);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::MatchDecider::operator ()");
+        } else {
+          result = (bool)((Xapian::MatchDecider const *)arg1)->operator ()((Xapian::Document const &)*arg2);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_MatchDecider(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MatchDecider *arg1 = (Xapian::MatchDecider *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[30], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_MatchDecider" "', argument " "1"" of type '" "Xapian::MatchDecider *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MatchDecider * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_MatchDecider(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::MatchDecider *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  arg1 = swig_obj[0];
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        if ( arg1 != (&_Py_NoneStruct) ) {
+          result = (Xapian::MatchDecider *)new SwigDirector_MatchDecider(arg1);
+        } else {
+          SWIG_Python_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor");
+          goto fail;
+        }
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[30], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_disown_MatchDecider(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MatchDecider *arg1 = (Xapian::MatchDecider *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[30], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "disown_MatchDecider" "', argument " "1"" of type '" "Xapian::MatchDecider *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MatchDecider * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      Swig::Director *director = dynamic_cast<Swig::Director *>(arg1);
+      if (director) director->swig_disown();
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *MatchDecider_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[30], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *MatchDecider_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ExpandDecider___call__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ExpandDecider *arg1 = (Xapian::ExpandDecider *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"ExpandDecider___call__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[20], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ExpandDecider___call__" "', argument " "1"" of type '" "Xapian::ExpandDecider const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ExpandDecider * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "ExpandDecider___call__" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "ExpandDecider___call__" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::ExpandDecider::operator ()");
+        } else {
+          result = (bool)((Xapian::ExpandDecider const *)arg1)->operator ()((std::string const &)*arg2);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_ExpandDecider(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ExpandDecider *arg1 = (Xapian::ExpandDecider *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[20], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_ExpandDecider" "', argument " "1"" of type '" "Xapian::ExpandDecider *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ExpandDecider * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ExpandDecider(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::ExpandDecider *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  arg1 = swig_obj[0];
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        if ( arg1 != (&_Py_NoneStruct) ) {
+          result = (Xapian::ExpandDecider *)new SwigDirector_ExpandDecider(arg1);
+        } else {
+          SWIG_Python_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor");
+          goto fail;
+        }
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[20], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_disown_ExpandDecider(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ExpandDecider *arg1 = (Xapian::ExpandDecider *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[20], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "disown_ExpandDecider" "', argument " "1"" of type '" "Xapian::ExpandDecider *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ExpandDecider * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      Swig::Director *director = dynamic_cast<Swig::Director *>(arg1);
+      if (director) director->swig_disown();
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *ExpandDecider_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[20], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *ExpandDecider_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Enquire(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::Enquire *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Enquire" "', argument " "1"" of type '" "Xapian::Database const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Enquire" "', argument " "1"" of type '" "Xapian::Database const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Enquire *)new Xapian::Enquire((Xapian::Database const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[18], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_Enquire(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_Enquire" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_query__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::Query *arg2 = 0 ;
+  Xapian::termcount arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_query" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[40], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_set_query" "', argument " "2"" of type '" "Xapian::Query const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Enquire_set_query" "', argument " "2"" of type '" "Xapian::Query const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Query * >(argp2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_set_query" "', argument " "3"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termcount >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_query((Xapian::Query const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_query__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::Query *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_query" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[40], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_set_query" "', argument " "2"" of type '" "Xapian::Query const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Enquire_set_query" "', argument " "2"" of type '" "Xapian::Query const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Query * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_query((Xapian::Query const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_query(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_set_query",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_Enquire_set_query__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_Enquire_set_query__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_set_query'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_query(Xapian::Enquire *,Xapian::Query const &,Xapian::termcount)\n"
+    "    set_query(Xapian::Enquire *,Xapian::Query const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_query(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::Query *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_query" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *) &(arg1)->get_query();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], 0 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_add_matchspy(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::MatchSpy *arg2 = (Xapian::MatchSpy *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Enquire_add_matchspy",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_add_matchspy" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[31], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_add_matchspy" "', argument " "2"" of type '" "Xapian::MatchSpy *""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MatchSpy * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_matchspy(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_clear_matchspies(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_clear_matchspies" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->clear_matchspies();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_weighting_scheme(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::Weight *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Enquire_set_weighting_scheme",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_weighting_scheme" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[65], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_set_weighting_scheme" "', argument " "2"" of type '" "Xapian::Weight const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Enquire_set_weighting_scheme" "', argument " "2"" of type '" "Xapian::Weight const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Weight * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_weighting_scheme((Xapian::Weight const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_collapse_key__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::valueno arg2 ;
+  Xapian::doccount arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_collapse_key" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_set_collapse_key" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_set_collapse_key" "', argument " "3"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::doccount >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_collapse_key(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_collapse_key__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_collapse_key" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_set_collapse_key" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_collapse_key(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_collapse_key(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_set_collapse_key",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_Enquire_set_collapse_key__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_Enquire_set_collapse_key__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_set_collapse_key'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_collapse_key(Xapian::Enquire *,Xapian::valueno,Xapian::doccount)\n"
+    "    set_collapse_key(Xapian::Enquire *,Xapian::valueno)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_docid_order(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::Enquire::docid_order arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Enquire_set_docid_order",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_docid_order" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_set_docid_order" "', argument " "2"" of type '" "Xapian::Enquire::docid_order""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::Enquire::docid_order >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_docid_order(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_cutoff__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  int arg2 ;
+  Xapian::weight arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_cutoff" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_set_cutoff" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_set_cutoff" "', argument " "3"" of type '" "Xapian::weight""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::weight >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_cutoff(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_cutoff__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  int arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_cutoff" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_set_cutoff" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_cutoff(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_cutoff(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_set_cutoff",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_Enquire_set_cutoff__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_Enquire_set_cutoff__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_set_cutoff'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_cutoff(Xapian::Enquire *,int,Xapian::weight)\n"
+    "    set_cutoff(Xapian::Enquire *,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_relevance(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_relevance" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_relevance();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_value__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::valueno arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_value" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_set_sort_by_value" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_set_sort_by_value" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_value(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_value__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_value" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_set_sort_by_value" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_value(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_set_sort_by_value",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_Enquire_set_sort_by_value__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_Enquire_set_sort_by_value__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_set_sort_by_value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_sort_by_value(Xapian::Enquire *,Xapian::valueno,bool)\n"
+    "    set_sort_by_value(Xapian::Enquire *,Xapian::valueno)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_value_then_relevance__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::valueno arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_value_then_relevance" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_set_sort_by_value_then_relevance" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_set_sort_by_value_then_relevance" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_value_then_relevance(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_value_then_relevance__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_value_then_relevance" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_set_sort_by_value_then_relevance" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_value_then_relevance(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_value_then_relevance(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_set_sort_by_value_then_relevance",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_Enquire_set_sort_by_value_then_relevance__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_Enquire_set_sort_by_value_then_relevance__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_set_sort_by_value_then_relevance'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_sort_by_value_then_relevance(Xapian::Enquire *,Xapian::valueno,bool)\n"
+    "    set_sort_by_value_then_relevance(Xapian::Enquire *,Xapian::valueno)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_relevance_then_value__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::valueno arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_relevance_then_value" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_set_sort_by_relevance_then_value" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_set_sort_by_relevance_then_value" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_relevance_then_value(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_relevance_then_value__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_relevance_then_value" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_set_sort_by_relevance_then_value" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_relevance_then_value(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_relevance_then_value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_set_sort_by_relevance_then_value",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_Enquire_set_sort_by_relevance_then_value__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_Enquire_set_sort_by_relevance_then_value__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_set_sort_by_relevance_then_value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_sort_by_relevance_then_value(Xapian::Enquire *,Xapian::valueno,bool)\n"
+    "    set_sort_by_relevance_then_value(Xapian::Enquire *,Xapian::valueno)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_key__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::KeyMaker *arg2 = (Xapian::KeyMaker *) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_key" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[26], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_set_sort_by_key" "', argument " "2"" of type '" "Xapian::KeyMaker *""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::KeyMaker * >(argp2);
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_set_sort_by_key" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_key(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_key__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::Sorter *arg2 = (Xapian::Sorter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_key" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[49], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_set_sort_by_key" "', argument " "2"" of type '" "Xapian::Sorter *""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Sorter * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_key(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_key(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_set_sort_by_key",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_Enquire_set_sort_by_key__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_Enquire_set_sort_by_key__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_set_sort_by_key'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_sort_by_key(Xapian::Enquire *,Xapian::KeyMaker *,bool)\n"
+    "    set_sort_by_key(Xapian::Enquire *,Xapian::Sorter *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_key_then_relevance__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::KeyMaker *arg2 = (Xapian::KeyMaker *) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_key_then_relevance" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[26], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_set_sort_by_key_then_relevance" "', argument " "2"" of type '" "Xapian::KeyMaker *""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::KeyMaker * >(argp2);
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_set_sort_by_key_then_relevance" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_key_then_relevance(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_key_then_relevance__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::Sorter *arg2 = (Xapian::Sorter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_key_then_relevance" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[49], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_set_sort_by_key_then_relevance" "', argument " "2"" of type '" "Xapian::Sorter *""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Sorter * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_key_then_relevance(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_key_then_relevance(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_set_sort_by_key_then_relevance",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_Enquire_set_sort_by_key_then_relevance__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_Enquire_set_sort_by_key_then_relevance__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_set_sort_by_key_then_relevance'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_sort_by_key_then_relevance(Xapian::Enquire *,Xapian::KeyMaker *,bool)\n"
+    "    set_sort_by_key_then_relevance(Xapian::Enquire *,Xapian::Sorter *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_relevance_then_key__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::KeyMaker *arg2 = (Xapian::KeyMaker *) 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_relevance_then_key" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[26], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_set_sort_by_relevance_then_key" "', argument " "2"" of type '" "Xapian::KeyMaker *""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::KeyMaker * >(argp2);
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_set_sort_by_relevance_then_key" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_relevance_then_key(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_relevance_then_key__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::Sorter *arg2 = (Xapian::Sorter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_set_sort_by_relevance_then_key" "', argument " "1"" of type '" "Xapian::Enquire *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[49], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_set_sort_by_relevance_then_key" "', argument " "2"" of type '" "Xapian::Sorter *""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Sorter * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_sort_by_relevance_then_key(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_set_sort_by_relevance_then_key(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_set_sort_by_relevance_then_key",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_Enquire_set_sort_by_relevance_then_key__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_Enquire_set_sort_by_relevance_then_key__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_set_sort_by_relevance_then_key'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_sort_by_relevance_then_key(Xapian::Enquire *,Xapian::KeyMaker *,bool)\n"
+    "    set_sort_by_relevance_then_key(Xapian::Enquire *,Xapian::Sorter *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_mset__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::doccount arg2 ;
+  Xapian::doccount arg3 ;
+  Xapian::doccount arg4 ;
+  Xapian::RSet *arg5 = (Xapian::RSet *) 0 ;
+  Xapian::MatchDecider *arg6 = (Xapian::MatchDecider *) 0 ;
+  Xapian::MatchDecider *arg7 = (Xapian::MatchDecider *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  unsigned int val4 ;
+  int ecode4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  void *argp7 = 0 ;
+  int res7 = 0 ;
+  Xapian::MSet result;
+  if ((nobjs < 7) || (nobjs > 7)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_mset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_mset" "', argument " "2"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::doccount >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_get_mset" "', argument " "3"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::doccount >(val3);
+  ecode4 = SWIG_AsVal_unsigned_SS_int(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "Enquire_get_mset" "', argument " "4"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< Xapian::doccount >(val4);
+  res5 = SWIG_Python_ConvertPtrAndOwn(swig_obj[4], &argp5, swig_types[43], 0 | 0, 0);
+  if (!(res5 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res5 != (-1)) ? res5 : -5)), "in method '" "Enquire_get_mset" "', argument " "5"" of type '" "Xapian::RSet const *""'"); goto fail; } while(0);
+  }
+  arg5 = reinterpret_cast< Xapian::RSet * >(argp5);
+  res6 = SWIG_Python_ConvertPtrAndOwn(swig_obj[5], &argp6, swig_types[30], 0 | 0, 0);
+  if (!(res6 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res6 != (-1)) ? res6 : -5)), "in method '" "Enquire_get_mset" "', argument " "6"" of type '" "Xapian::MatchDecider const *""'"); goto fail; } while(0);
+  }
+  arg6 = reinterpret_cast< Xapian::MatchDecider * >(argp6);
+  res7 = SWIG_Python_ConvertPtrAndOwn(swig_obj[6], &argp7, swig_types[30], 0 | 0, 0);
+  if (!(res7 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res7 != (-1)) ? res7 : -5)), "in method '" "Enquire_get_mset" "', argument " "7"" of type '" "Xapian::MatchDecider const *""'"); goto fail; } while(0);
+  }
+  arg7 = reinterpret_cast< Xapian::MatchDecider * >(argp7);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_mset(arg2,arg3,arg4,(Xapian::RSet const *)arg5,(Xapian::MatchDecider const *)arg6,(Xapian::MatchDecider const *)arg7);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::MSet(static_cast< const Xapian::MSet& >(result))), swig_types[28], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_mset__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::doccount arg2 ;
+  Xapian::doccount arg3 ;
+  Xapian::doccount arg4 ;
+  Xapian::RSet *arg5 = (Xapian::RSet *) 0 ;
+  Xapian::MatchDecider *arg6 = (Xapian::MatchDecider *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  unsigned int val4 ;
+  int ecode4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  Xapian::MSet result;
+  if ((nobjs < 6) || (nobjs > 6)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_mset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_mset" "', argument " "2"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::doccount >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_get_mset" "', argument " "3"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::doccount >(val3);
+  ecode4 = SWIG_AsVal_unsigned_SS_int(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "Enquire_get_mset" "', argument " "4"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< Xapian::doccount >(val4);
+  res5 = SWIG_Python_ConvertPtrAndOwn(swig_obj[4], &argp5, swig_types[43], 0 | 0, 0);
+  if (!(res5 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res5 != (-1)) ? res5 : -5)), "in method '" "Enquire_get_mset" "', argument " "5"" of type '" "Xapian::RSet const *""'"); goto fail; } while(0);
+  }
+  arg5 = reinterpret_cast< Xapian::RSet * >(argp5);
+  res6 = SWIG_Python_ConvertPtrAndOwn(swig_obj[5], &argp6, swig_types[30], 0 | 0, 0);
+  if (!(res6 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res6 != (-1)) ? res6 : -5)), "in method '" "Enquire_get_mset" "', argument " "6"" of type '" "Xapian::MatchDecider const *""'"); goto fail; } while(0);
+  }
+  arg6 = reinterpret_cast< Xapian::MatchDecider * >(argp6);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_mset(arg2,arg3,arg4,(Xapian::RSet const *)arg5,(Xapian::MatchDecider const *)arg6);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::MSet(static_cast< const Xapian::MSet& >(result))), swig_types[28], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_mset__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::doccount arg2 ;
+  Xapian::doccount arg3 ;
+  Xapian::doccount arg4 ;
+  Xapian::RSet *arg5 = (Xapian::RSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  unsigned int val4 ;
+  int ecode4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  Xapian::MSet result;
+  if ((nobjs < 5) || (nobjs > 5)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_mset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_mset" "', argument " "2"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::doccount >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_get_mset" "', argument " "3"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::doccount >(val3);
+  ecode4 = SWIG_AsVal_unsigned_SS_int(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "Enquire_get_mset" "', argument " "4"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< Xapian::doccount >(val4);
+  res5 = SWIG_Python_ConvertPtrAndOwn(swig_obj[4], &argp5, swig_types[43], 0 | 0, 0);
+  if (!(res5 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res5 != (-1)) ? res5 : -5)), "in method '" "Enquire_get_mset" "', argument " "5"" of type '" "Xapian::RSet const *""'"); goto fail; } while(0);
+  }
+  arg5 = reinterpret_cast< Xapian::RSet * >(argp5);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_mset(arg2,arg3,arg4,(Xapian::RSet const *)arg5);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::MSet(static_cast< const Xapian::MSet& >(result))), swig_types[28], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_mset__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::doccount arg2 ;
+  Xapian::doccount arg3 ;
+  Xapian::doccount arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  unsigned int val4 ;
+  int ecode4 = 0 ;
+  Xapian::MSet result;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_mset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_mset" "', argument " "2"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::doccount >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_get_mset" "', argument " "3"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::doccount >(val3);
+  ecode4 = SWIG_AsVal_unsigned_SS_int(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "Enquire_get_mset" "', argument " "4"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< Xapian::doccount >(val4);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_mset(arg2,arg3,arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::MSet(static_cast< const Xapian::MSet& >(result))), swig_types[28], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_mset__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::doccount arg2 ;
+  Xapian::doccount arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  Xapian::MSet result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_mset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_mset" "', argument " "2"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::doccount >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_get_mset" "', argument " "3"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::doccount >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_mset(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::MSet(static_cast< const Xapian::MSet& >(result))), swig_types[28], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_mset__SWIG_5(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::doccount arg2 ;
+  Xapian::doccount arg3 ;
+  Xapian::RSet *arg4 = (Xapian::RSet *) 0 ;
+  Xapian::MatchDecider *arg5 = (Xapian::MatchDecider *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  void *argp5 = 0 ;
+  int res5 = 0 ;
+  Xapian::MSet result;
+  if ((nobjs < 5) || (nobjs > 5)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_mset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_mset" "', argument " "2"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::doccount >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_get_mset" "', argument " "3"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::doccount >(val3);
+  res4 = SWIG_Python_ConvertPtrAndOwn(swig_obj[3], &argp4, swig_types[43], 0 | 0, 0);
+  if (!(res4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res4 != (-1)) ? res4 : -5)), "in method '" "Enquire_get_mset" "', argument " "4"" of type '" "Xapian::RSet const *""'"); goto fail; } while(0);
+  }
+  arg4 = reinterpret_cast< Xapian::RSet * >(argp4);
+  res5 = SWIG_Python_ConvertPtrAndOwn(swig_obj[4], &argp5, swig_types[30], 0 | 0, 0);
+  if (!(res5 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res5 != (-1)) ? res5 : -5)), "in method '" "Enquire_get_mset" "', argument " "5"" of type '" "Xapian::MatchDecider const *""'"); goto fail; } while(0);
+  }
+  arg5 = reinterpret_cast< Xapian::MatchDecider * >(argp5);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_mset(arg2,arg3,(Xapian::RSet const *)arg4,(Xapian::MatchDecider const *)arg5);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::MSet(static_cast< const Xapian::MSet& >(result))), swig_types[28], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_mset__SWIG_6(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::doccount arg2 ;
+  Xapian::doccount arg3 ;
+  Xapian::RSet *arg4 = (Xapian::RSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  Xapian::MSet result;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_mset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_mset" "', argument " "2"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::doccount >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Enquire_get_mset" "', argument " "3"" of type '" "Xapian::doccount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::doccount >(val3);
+  res4 = SWIG_Python_ConvertPtrAndOwn(swig_obj[3], &argp4, swig_types[43], 0 | 0, 0);
+  if (!(res4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res4 != (-1)) ? res4 : -5)), "in method '" "Enquire_get_mset" "', argument " "4"" of type '" "Xapian::RSet const *""'"); goto fail; } while(0);
+  }
+  arg4 = reinterpret_cast< Xapian::RSet * >(argp4);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_mset(arg2,arg3,(Xapian::RSet const *)arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::MSet(static_cast< const Xapian::MSet& >(result))), swig_types[28], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_mset(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[8];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_get_mset",0,7,argv))) goto fail;
+  --argc;
+  if (argc == 3) {
+    return _wrap_Enquire_get_mset__SWIG_4(self, argc, argv);
+  }
+  if (argc == 4) {
+    int _v = 0;
+    {
+      void *vptr = 0;
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[3], &vptr, swig_types[43], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_2;
+    return _wrap_Enquire_get_mset__SWIG_6(self, argc, argv);
+  }
+check_2:
+  if (argc == 4) {
+    return _wrap_Enquire_get_mset__SWIG_3(self, argc, argv);
+  }
+  if (argc == 5) {
+    int _v = 0;
+    {
+      void *vptr = 0;
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[3], &vptr, swig_types[43], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_4;
+    {
+      void *vptr = 0;
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[4], &vptr, swig_types[30], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_4;
+    return _wrap_Enquire_get_mset__SWIG_5(self, argc, argv);
+  }
+check_4:
+  if (argc == 5) {
+    return _wrap_Enquire_get_mset__SWIG_2(self, argc, argv);
+  }
+  if (argc == 6) {
+    return _wrap_Enquire_get_mset__SWIG_1(self, argc, argv);
+  }
+  if (argc == 7) {
+    return _wrap_Enquire_get_mset__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_get_mset'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    get_mset(Xapian::Enquire const *,Xapian::doccount,Xapian::doccount,Xapian::doccount,Xapian::RSet const *,Xapian::MatchDecider const *,Xapian::MatchDecider const *)\n"
+    "    get_mset(Xapian::Enquire const *,Xapian::doccount,Xapian::doccount,Xapian::doccount,Xapian::RSet const *,Xapian::MatchDecider const *)\n"
+    "    get_mset(Xapian::Enquire const *,Xapian::doccount,Xapian::doccount,Xapian::doccount,Xapian::RSet const *)\n"
+    "    get_mset(Xapian::Enquire const *,Xapian::doccount,Xapian::doccount,Xapian::doccount)\n"
+    "    get_mset(Xapian::Enquire const *,Xapian::doccount,Xapian::doccount)\n"
+    "    get_mset(Xapian::Enquire const *,Xapian::doccount,Xapian::doccount,Xapian::RSet const *,Xapian::MatchDecider const *)\n"
+    "    get_mset(Xapian::Enquire const *,Xapian::doccount,Xapian::doccount,Xapian::RSet const *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_eset__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::termcount arg2 ;
+  Xapian::RSet *arg3 = 0 ;
+  int arg4 ;
+  double arg5 ;
+  Xapian::ExpandDecider *arg6 = (Xapian::ExpandDecider *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  void *argp6 = 0 ;
+  int res6 = 0 ;
+  Xapian::ESet result;
+  if ((nobjs < 6) || (nobjs > 6)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_eset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_eset" "', argument " "2"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termcount >(val2);
+  res3 = SWIG_Python_ConvertPtrAndOwn(swig_obj[2], &argp3, swig_types[43], 0 | 0, 0);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "Enquire_get_eset" "', argument " "3"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  if (!argp3) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Enquire_get_eset" "', argument " "3"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< Xapian::RSet * >(argp3);
+  ecode4 = SWIG_AsVal_int(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "Enquire_get_eset" "', argument " "4"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_double(swig_obj[4], &val5);
+  if (!(ecode5 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode5 != (-1)) ? ecode5 : -5)), "in method '" "Enquire_get_eset" "', argument " "5"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg5 = static_cast< double >(val5);
+  res6 = SWIG_Python_ConvertPtrAndOwn(swig_obj[5], &argp6, swig_types[20], 0 | 0, 0);
+  if (!(res6 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res6 != (-1)) ? res6 : -5)), "in method '" "Enquire_get_eset" "', argument " "6"" of type '" "Xapian::ExpandDecider const *""'"); goto fail; } while(0);
+  }
+  arg6 = reinterpret_cast< Xapian::ExpandDecider * >(argp6);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_eset(arg2,(Xapian::RSet const &)*arg3,arg4,arg5,(Xapian::ExpandDecider const *)arg6);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ESet(static_cast< const Xapian::ESet& >(result))), swig_types[16], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_eset__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::termcount arg2 ;
+  Xapian::RSet *arg3 = 0 ;
+  int arg4 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  Xapian::ESet result;
+  if ((nobjs < 5) || (nobjs > 5)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_eset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_eset" "', argument " "2"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termcount >(val2);
+  res3 = SWIG_Python_ConvertPtrAndOwn(swig_obj[2], &argp3, swig_types[43], 0 | 0, 0);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "Enquire_get_eset" "', argument " "3"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  if (!argp3) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Enquire_get_eset" "', argument " "3"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< Xapian::RSet * >(argp3);
+  ecode4 = SWIG_AsVal_int(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "Enquire_get_eset" "', argument " "4"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< int >(val4);
+  ecode5 = SWIG_AsVal_double(swig_obj[4], &val5);
+  if (!(ecode5 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode5 != (-1)) ? ecode5 : -5)), "in method '" "Enquire_get_eset" "', argument " "5"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg5 = static_cast< double >(val5);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_eset(arg2,(Xapian::RSet const &)*arg3,arg4,arg5);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ESet(static_cast< const Xapian::ESet& >(result))), swig_types[16], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_eset__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::termcount arg2 ;
+  Xapian::RSet *arg3 = 0 ;
+  int arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  Xapian::ESet result;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_eset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_eset" "', argument " "2"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termcount >(val2);
+  res3 = SWIG_Python_ConvertPtrAndOwn(swig_obj[2], &argp3, swig_types[43], 0 | 0, 0);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "Enquire_get_eset" "', argument " "3"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  if (!argp3) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Enquire_get_eset" "', argument " "3"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< Xapian::RSet * >(argp3);
+  ecode4 = SWIG_AsVal_int(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "Enquire_get_eset" "', argument " "4"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< int >(val4);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_eset(arg2,(Xapian::RSet const &)*arg3,arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ESet(static_cast< const Xapian::ESet& >(result))), swig_types[16], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_eset__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::termcount arg2 ;
+  Xapian::RSet *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  Xapian::ESet result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_eset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_eset" "', argument " "2"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termcount >(val2);
+  res3 = SWIG_Python_ConvertPtrAndOwn(swig_obj[2], &argp3, swig_types[43], 0 | 0, 0);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "Enquire_get_eset" "', argument " "3"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  if (!argp3) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Enquire_get_eset" "', argument " "3"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< Xapian::RSet * >(argp3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_eset(arg2,(Xapian::RSet const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ESet(static_cast< const Xapian::ESet& >(result))), swig_types[16], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_eset__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::termcount arg2 ;
+  Xapian::RSet *arg3 = 0 ;
+  Xapian::ExpandDecider *arg4 = (Xapian::ExpandDecider *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  Xapian::ESet result;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_eset" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_eset" "', argument " "2"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termcount >(val2);
+  res3 = SWIG_Python_ConvertPtrAndOwn(swig_obj[2], &argp3, swig_types[43], 0 | 0, 0);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "Enquire_get_eset" "', argument " "3"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  if (!argp3) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Enquire_get_eset" "', argument " "3"" of type '" "Xapian::RSet const &""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< Xapian::RSet * >(argp3);
+  res4 = SWIG_Python_ConvertPtrAndOwn(swig_obj[3], &argp4, swig_types[20], 0 | 0, 0);
+  if (!(res4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res4 != (-1)) ? res4 : -5)), "in method '" "Enquire_get_eset" "', argument " "4"" of type '" "Xapian::ExpandDecider const *""'"); goto fail; } while(0);
+  }
+  arg4 = reinterpret_cast< Xapian::ExpandDecider * >(argp4);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_eset(arg2,(Xapian::RSet const &)*arg3,(Xapian::ExpandDecider const *)arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ESet(static_cast< const Xapian::ESet& >(result))), swig_types[16], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_eset(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[7];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_get_eset",0,6,argv))) goto fail;
+  --argc;
+  if (argc == 3) {
+    return _wrap_Enquire_get_eset__SWIG_3(self, argc, argv);
+  }
+  if (argc == 4) {
+    int _v = 0;
+    {
+      void *vptr = 0;
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[3], &vptr, swig_types[20], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_2;
+    return _wrap_Enquire_get_eset__SWIG_4(self, argc, argv);
+  }
+check_2:
+  if (argc == 4) {
+    return _wrap_Enquire_get_eset__SWIG_2(self, argc, argv);
+  }
+  if (argc == 5) {
+    return _wrap_Enquire_get_eset__SWIG_1(self, argc, argv);
+  }
+  if (argc == 6) {
+    return _wrap_Enquire_get_eset__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_get_eset'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    get_eset(Xapian::Enquire const *,Xapian::termcount,Xapian::RSet const &,int,double,Xapian::ExpandDecider const *)\n"
+    "    get_eset(Xapian::Enquire const *,Xapian::termcount,Xapian::RSet const &,int,double)\n"
+    "    get_eset(Xapian::Enquire const *,Xapian::termcount,Xapian::RSet const &,int)\n"
+    "    get_eset(Xapian::Enquire const *,Xapian::termcount,Xapian::RSet const &)\n"
+    "    get_eset(Xapian::Enquire const *,Xapian::termcount,Xapian::RSet const &,Xapian::ExpandDecider const *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_matching_terms_begin__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  Xapian::TermIterator result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_matching_terms_begin" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_matching_terms_begin" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_matching_terms_begin(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_matching_terms_end__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  Xapian::TermIterator result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_matching_terms_end" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Enquire_get_matching_terms_end" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_matching_terms_end(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_matching_terms_begin__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  Xapian::TermIterator result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_matching_terms_begin" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_get_matching_terms_begin" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Enquire_get_matching_terms_begin" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_matching_terms_begin((Xapian::MSetIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_matching_terms_begin(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_get_matching_terms_begin",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    int _v = 0;
+    {
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[1], 0, swig_types[29], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_1;
+    return _wrap_Enquire_get_matching_terms_begin__SWIG_1(self, argc, argv);
+  }
+check_1:
+  if (argc == 2) {
+    return _wrap_Enquire_get_matching_terms_begin__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_get_matching_terms_begin'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    get_matching_terms_begin(Xapian::Enquire const *,Xapian::docid)\n"
+    "    get_matching_terms_begin(Xapian::Enquire const *,Xapian::MSetIterator const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_matching_terms_end__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  Xapian::TermIterator result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_matching_terms_end" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_get_matching_terms_end" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Enquire_get_matching_terms_end" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_matching_terms_end((Xapian::MSetIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_matching_terms_end(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Enquire_get_matching_terms_end",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    int _v = 0;
+    {
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[1], 0, swig_types[29], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_1;
+    return _wrap_Enquire_get_matching_terms_end__SWIG_1(self, argc, argv);
+  }
+check_1:
+  if (argc == 2) {
+    return _wrap_Enquire_get_matching_terms_end__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Enquire_get_matching_terms_end'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    get_matching_terms_end(Xapian::Enquire const *,Xapian::docid)\n"
+    "    get_matching_terms_end(Xapian::Enquire const *,Xapian::MSetIterator const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire_get_matching_terms(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  Xapian::MSetIterator *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  std::pair< Xapian::TermIterator,Xapian::TermIterator > result;
+  if (!SWIG_Python_UnpackTuple(args,"Enquire_get_matching_terms",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire_get_matching_terms" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[29], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Enquire_get_matching_terms" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Enquire_get_matching_terms" "', argument " "2"" of type '" "Xapian::MSetIterator const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MSetIterator * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian_Enquire_get_matching_terms((Xapian::Enquire const *)arg1,(Xapian::MSetIterator const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  {
+    resultobj = PyList_New(0);
+    if (resultobj == 0) {
+      return __null;
+    }
+    for (Xapian::TermIterator i = (&result)->first; i != (&result)->second; ++i) {
+      PyObject * str = PyString_FromStringAndSize((*i).data(), (*i).size());
+      if (str == 0) return __null;
+      if (PyList_Append(resultobj, str) == -1) {
+        if ( --((PyObject*)(str))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(str)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(str))));
+        return __null;
+      }
+      if ( --((PyObject*)(str))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(str)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(str))));
+    }
+  }
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Enquire___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Enquire *arg1 = (Xapian::Enquire *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[18], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Enquire___str__" "', argument " "1"" of type '" "Xapian::Enquire const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Enquire * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Enquire const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *Enquire_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[18], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *Enquire_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Registry__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Registry *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::Registry *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[45], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Registry" "', argument " "1"" of type '" "Xapian::Registry const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Registry" "', argument " "1"" of type '" "Xapian::Registry const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Registry * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Registry *)new Xapian::Registry((Xapian::Registry const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[45], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Registry__SWIG_1(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::Registry *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Registry *)new Xapian::Registry();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[45], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Registry(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_Registry",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_Registry__SWIG_1(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_Registry__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_Registry'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::Registry(Xapian::Registry const &)\n"
+    "    Xapian::Registry()\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_Registry(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Registry *arg1 = (Xapian::Registry *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[45], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_Registry" "', argument " "1"" of type '" "Xapian::Registry *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Registry * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Registry_register_weighting_scheme(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Registry *arg1 = (Xapian::Registry *) 0 ;
+  Xapian::Weight *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Registry_register_weighting_scheme",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[45], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Registry_register_weighting_scheme" "', argument " "1"" of type '" "Xapian::Registry *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Registry * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[65], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Registry_register_weighting_scheme" "', argument " "2"" of type '" "Xapian::Weight const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Registry_register_weighting_scheme" "', argument " "2"" of type '" "Xapian::Weight const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Weight * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->register_weighting_scheme((Xapian::Weight const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Registry_get_weighting_scheme(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Registry *arg1 = (Xapian::Registry *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Xapian::Weight *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"Registry_get_weighting_scheme",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[45], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Registry_get_weighting_scheme" "', argument " "1"" of type '" "Xapian::Registry const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Registry * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Registry_get_weighting_scheme" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Registry_get_weighting_scheme" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Weight *)((Xapian::Registry const *)arg1)->get_weighting_scheme((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[65], 0 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Registry_register_posting_source(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Registry *arg1 = (Xapian::Registry *) 0 ;
+  Xapian::PostingSource *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Registry_register_posting_source",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[45], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Registry_register_posting_source" "', argument " "1"" of type '" "Xapian::Registry *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Registry * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[39], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Registry_register_posting_source" "', argument " "2"" of type '" "Xapian::PostingSource const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Registry_register_posting_source" "', argument " "2"" of type '" "Xapian::PostingSource const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::PostingSource * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->register_posting_source((Xapian::PostingSource const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Registry_get_posting_source(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Registry *arg1 = (Xapian::Registry *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Swig::Director *director = 0;
+  Xapian::PostingSource *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"Registry_get_posting_source",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[45], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Registry_get_posting_source" "', argument " "1"" of type '" "Xapian::Registry const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Registry * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Registry_get_posting_source" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Registry_get_posting_source" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::PostingSource *)((Xapian::Registry const *)arg1)->get_posting_source((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  director = dynamic_cast<Swig::Director*>(result);
+  if (director) {
+    resultobj = director->swig_get_self();
+    ( ((PyObject*)(resultobj))->ob_refcnt++);
+  } else {
+    resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[39], 0 | 0);
+  }
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Registry_register_match_spy(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Registry *arg1 = (Xapian::Registry *) 0 ;
+  Xapian::MatchSpy *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Registry_register_match_spy",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[45], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Registry_register_match_spy" "', argument " "1"" of type '" "Xapian::Registry *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Registry * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[31], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Registry_register_match_spy" "', argument " "2"" of type '" "Xapian::MatchSpy const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Registry_register_match_spy" "', argument " "2"" of type '" "Xapian::MatchSpy const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::MatchSpy * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->register_match_spy((Xapian::MatchSpy const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Registry_get_match_spy(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Registry *arg1 = (Xapian::Registry *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Xapian::MatchSpy *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"Registry_get_match_spy",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[45], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Registry_get_match_spy" "', argument " "1"" of type '" "Xapian::Registry const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Registry * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Registry_get_match_spy" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Registry_get_match_spy" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::MatchSpy *)((Xapian::Registry const *)arg1)->get_match_spy((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[31], 0 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *Registry_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[45], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *Registry_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_Weight(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Weight *arg1 = (Xapian::Weight *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[65], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_Weight" "', argument " "1"" of type '" "Xapian::Weight *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Weight * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Weight_name(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Weight *arg1 = (Xapian::Weight *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[65], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Weight_name" "', argument " "1"" of type '" "Xapian::Weight const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Weight * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Weight const *)arg1)->name();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Weight_get_sumpart(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Weight *arg1 = (Xapian::Weight *) 0 ;
+  Xapian::termcount arg2 ;
+  Xapian::termcount arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  PyObject *swig_obj[3] ;
+  Xapian::weight result;
+  if (!SWIG_Python_UnpackTuple(args,"Weight_get_sumpart",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[65], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Weight_get_sumpart" "', argument " "1"" of type '" "Xapian::Weight const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Weight * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Weight_get_sumpart" "', argument " "2"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termcount >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Weight_get_sumpart" "', argument " "3"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termcount >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::weight)((Xapian::Weight const *)arg1)->get_sumpart(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Weight_get_maxpart(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Weight *arg1 = (Xapian::Weight *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::weight result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[65], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Weight_get_maxpart" "', argument " "1"" of type '" "Xapian::Weight const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Weight * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::weight)((Xapian::Weight const *)arg1)->get_maxpart();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Weight_get_sumextra(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Weight *arg1 = (Xapian::Weight *) 0 ;
+  Xapian::termcount arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::weight result;
+  if (!SWIG_Python_UnpackTuple(args,"Weight_get_sumextra",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[65], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Weight_get_sumextra" "', argument " "1"" of type '" "Xapian::Weight const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Weight * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Weight_get_sumextra" "', argument " "2"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termcount >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::weight)((Xapian::Weight const *)arg1)->get_sumextra(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Weight_get_maxextra(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Weight *arg1 = (Xapian::Weight *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::weight result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[65], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Weight_get_maxextra" "', argument " "1"" of type '" "Xapian::Weight const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Weight * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::weight)((Xapian::Weight const *)arg1)->get_maxextra();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Weight_get_sumpart_needs_doclength_(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Weight *arg1 = (Xapian::Weight *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  bool result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[65], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Weight_get_sumpart_needs_doclength_" "', argument " "1"" of type '" "Xapian::Weight const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Weight * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)((Xapian::Weight const *)arg1)->get_sumpart_needs_doclength_();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Weight_get_sumpart_needs_wdf_(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Weight *arg1 = (Xapian::Weight *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  bool result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[65], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Weight_get_sumpart_needs_wdf_" "', argument " "1"" of type '" "Xapian::Weight const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Weight * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)((Xapian::Weight const *)arg1)->get_sumpart_needs_wdf_();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *Weight_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[65], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_BoolWeight(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::BoolWeight *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"new_BoolWeight",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::BoolWeight *)new Xapian::BoolWeight();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[2], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_BoolWeight(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::BoolWeight *arg1 = (Xapian::BoolWeight *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[2], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_BoolWeight" "', argument " "1"" of type '" "Xapian::BoolWeight *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::BoolWeight * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *BoolWeight_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[2], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *BoolWeight_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_BM25Weight__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double arg5 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  Xapian::BM25Weight *result = 0 ;
+  if ((nobjs < 5) || (nobjs > 5)) goto fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_BM25Weight" "', argument " "1"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_BM25Weight" "', argument " "2"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_BM25Weight" "', argument " "3"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "new_BM25Weight" "', argument " "4"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< double >(val4);
+  ecode5 = SWIG_AsVal_double(swig_obj[4], &val5);
+  if (!(ecode5 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode5 != (-1)) ? ecode5 : -5)), "in method '" "new_BM25Weight" "', argument " "5"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg5 = static_cast< double >(val5);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::BM25Weight *)new Xapian::BM25Weight(arg1,arg2,arg3,arg4,arg5);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[1], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_BM25Weight__SWIG_1(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::BM25Weight *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::BM25Weight *)new Xapian::BM25Weight();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[1], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_BM25Weight(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_BM25Weight",0,5,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_BM25Weight__SWIG_1(self, argc, argv);
+  }
+  if (argc == 5) {
+    return _wrap_new_BM25Weight__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_BM25Weight'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::BM25Weight(double,double,double,double,double)\n"
+    "    Xapian::BM25Weight()\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_BM25Weight(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::BM25Weight *arg1 = (Xapian::BM25Weight *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[1], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_BM25Weight" "', argument " "1"" of type '" "Xapian::BM25Weight *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::BM25Weight * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *BM25Weight_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[1], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *BM25Weight_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_TradWeight__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  Xapian::TradWeight *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_TradWeight" "', argument " "1"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< double >(val1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::TradWeight *)new Xapian::TradWeight(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[56], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_TradWeight__SWIG_1(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::TradWeight *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::TradWeight *)new Xapian::TradWeight();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[56], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_TradWeight(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_TradWeight",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_TradWeight__SWIG_1(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_TradWeight__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_TradWeight'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::TradWeight(double)\n"
+    "    Xapian::TradWeight()\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_TradWeight(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TradWeight *arg1 = (Xapian::TradWeight *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[56], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_TradWeight" "', argument " "1"" of type '" "Xapian::TradWeight *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TradWeight * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *TradWeight_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[56], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *TradWeight_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_MatchSpy(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::MatchSpy *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  arg1 = swig_obj[0];
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        if ( arg1 != (&_Py_NoneStruct) ) {
+          result = (Xapian::MatchSpy *)new SwigDirector_MatchSpy(arg1);
+        } else {
+          SWIG_Python_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor");
+          goto fail;
+        }
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[31], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_MatchSpy(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MatchSpy *arg1 = (Xapian::MatchSpy *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[31], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_MatchSpy" "', argument " "1"" of type '" "Xapian::MatchSpy *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MatchSpy * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MatchSpy___call__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MatchSpy *arg1 = (Xapian::MatchSpy *) 0 ;
+  Xapian::Document *arg2 = 0 ;
+  Xapian::weight arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject *swig_obj[3] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  if (!SWIG_Python_UnpackTuple(args,"MatchSpy___call__",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[31], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MatchSpy___call__" "', argument " "1"" of type '" "Xapian::MatchSpy *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MatchSpy * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[15], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "MatchSpy___call__" "', argument " "2"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "MatchSpy___call__" "', argument " "2"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Document * >(argp2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "MatchSpy___call__" "', argument " "3"" of type '" "Xapian::weight""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::weight >(val3);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::MatchSpy::operator ()");
+        } else {
+          (arg1)->operator ()((Xapian::Document const &)*arg2,arg3);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MatchSpy_name(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MatchSpy *arg1 = (Xapian::MatchSpy *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[31], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MatchSpy_name" "', argument " "1"" of type '" "Xapian::MatchSpy const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MatchSpy * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          result = ((Xapian::MatchSpy const *)arg1)->Xapian::MatchSpy::name();
+        } else {
+          result = ((Xapian::MatchSpy const *)arg1)->name();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MatchSpy_merge_results(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MatchSpy *arg1 = (Xapian::MatchSpy *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  if (!SWIG_Python_UnpackTuple(args,"MatchSpy_merge_results",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[31], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MatchSpy_merge_results" "', argument " "1"" of type '" "Xapian::MatchSpy *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MatchSpy * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "MatchSpy_merge_results" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "MatchSpy_merge_results" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          (arg1)->Xapian::MatchSpy::merge_results((std::string const &)*arg2);
+        } else {
+          (arg1)->merge_results((std::string const &)*arg2);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MatchSpy___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MatchSpy *arg1 = (Xapian::MatchSpy *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[31], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MatchSpy___str__" "', argument " "1"" of type '" "Xapian::MatchSpy const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MatchSpy * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          result = ((Xapian::MatchSpy const *)arg1)->Xapian::MatchSpy::get_description();
+        } else {
+          result = ((Xapian::MatchSpy const *)arg1)->get_description();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_disown_MatchSpy(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MatchSpy *arg1 = (Xapian::MatchSpy *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[31], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "disown_MatchSpy" "', argument " "1"" of type '" "Xapian::MatchSpy *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MatchSpy * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      Swig::Director *director = dynamic_cast<Swig::Director *>(arg1);
+      if (director) director->swig_disown();
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *MatchSpy_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[31], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *MatchSpy_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ValueCountMatchSpy__SWIG_0(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::ValueCountMatchSpy *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ValueCountMatchSpy *)new Xapian::ValueCountMatchSpy();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[58], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ValueCountMatchSpy__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  Xapian::ValueCountMatchSpy *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_ValueCountMatchSpy" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ValueCountMatchSpy *)new Xapian::ValueCountMatchSpy(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[58], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ValueCountMatchSpy(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_ValueCountMatchSpy",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_ValueCountMatchSpy__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_ValueCountMatchSpy__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_ValueCountMatchSpy'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::ValueCountMatchSpy()\n"
+    "    Xapian::ValueCountMatchSpy(Xapian::valueno)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueCountMatchSpy_get_total(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueCountMatchSpy *arg1 = (Xapian::ValueCountMatchSpy *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  size_t result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[58], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueCountMatchSpy_get_total" "', argument " "1"" of type '" "Xapian::ValueCountMatchSpy const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueCountMatchSpy * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::ValueCountMatchSpy const *)arg1)->get_total();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueCountMatchSpy_values_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueCountMatchSpy *arg1 = (Xapian::ValueCountMatchSpy *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::TermIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[58], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueCountMatchSpy_values_begin" "', argument " "1"" of type '" "Xapian::ValueCountMatchSpy const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueCountMatchSpy * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::ValueCountMatchSpy const *)arg1)->values_begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueCountMatchSpy_values_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueCountMatchSpy *arg1 = (Xapian::ValueCountMatchSpy *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::TermIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[58], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueCountMatchSpy_values_end" "', argument " "1"" of type '" "Xapian::ValueCountMatchSpy const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueCountMatchSpy * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::ValueCountMatchSpy const *)arg1)->values_end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueCountMatchSpy_top_values_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueCountMatchSpy *arg1 = (Xapian::ValueCountMatchSpy *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::TermIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"ValueCountMatchSpy_top_values_begin",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[58], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueCountMatchSpy_top_values_begin" "', argument " "1"" of type '" "Xapian::ValueCountMatchSpy const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueCountMatchSpy * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "ValueCountMatchSpy_top_values_begin" "', argument " "2"" of type '" "size_t""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< size_t >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::ValueCountMatchSpy const *)arg1)->top_values_begin(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueCountMatchSpy_top_values_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueCountMatchSpy *arg1 = (Xapian::ValueCountMatchSpy *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::TermIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"ValueCountMatchSpy_top_values_end",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[58], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueCountMatchSpy_top_values_end" "', argument " "1"" of type '" "Xapian::ValueCountMatchSpy const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueCountMatchSpy * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "ValueCountMatchSpy_top_values_end" "', argument " "2"" of type '" "size_t""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< size_t >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::ValueCountMatchSpy const *)arg1)->top_values_end(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_ValueCountMatchSpy(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueCountMatchSpy *arg1 = (Xapian::ValueCountMatchSpy *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[58], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_ValueCountMatchSpy" "', argument " "1"" of type '" "Xapian::ValueCountMatchSpy *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueCountMatchSpy * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *ValueCountMatchSpy_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[58], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *ValueCountMatchSpy_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_add_database(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::Database *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Database_add_database",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_add_database" "', argument " "1"" of type '" "Xapian::Database *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[4], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_add_database" "', argument " "2"" of type '" "Xapian::Database const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_add_database" "', argument " "2"" of type '" "Xapian::Database const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Database * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_database((Xapian::Database const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Database__SWIG_0(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::Database *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Database *)new Xapian::Database();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[4], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Database__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::Database *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Database" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Database" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Database *)new Xapian::Database((std::string const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[4], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_Database(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_Database" "', argument " "1"" of type '" "Xapian::Database *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Database__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::Database *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Database" "', argument " "1"" of type '" "Xapian::Database const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Database" "', argument " "1"" of type '" "Xapian::Database const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Database *)new Xapian::Database((Xapian::Database const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[4], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Database(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_Database",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_Database__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    int _v = 0;
+    {
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[0], 0, swig_types[4], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_Database__SWIG_2(self, argc, argv);
+  }
+check_2:
+  if (argc == 1) {
+    return _wrap_new_Database__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_Database'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::Database()\n"
+    "    Xapian::Database(std::string const &)\n"
+    "    Xapian::Database(Xapian::Database const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_reopen(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_reopen" "', argument " "1"" of type '" "Xapian::Database *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->reopen();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_close(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_close" "', argument " "1"" of type '" "Xapian::Database *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->close();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database___str__" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_postlist_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Xapian::PostingIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_postlist_begin",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_postlist_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_postlist_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_postlist_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->postlist_begin((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::PostingIterator(static_cast< const Xapian::PostingIterator& >(result))), swig_types[38], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_postlist_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Xapian::PostingIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_postlist_end",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_postlist_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_postlist_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_postlist_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->postlist_end((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::PostingIterator(static_cast< const Xapian::PostingIterator& >(result))), swig_types[38], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_termlist_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::TermIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_termlist_begin",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_termlist_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Database_termlist_begin" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->termlist_begin(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_termlist_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::TermIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_termlist_end",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_termlist_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Database_termlist_end" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->termlist_end(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_positionlist_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::docid arg2 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  int res3 = ((0)) ;
+  PyObject *swig_obj[3] ;
+  Xapian::PositionIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_positionlist_begin",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_positionlist_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Database_positionlist_begin" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "Database_positionlist_begin" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_positionlist_begin" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->positionlist_begin(arg2,(std::string const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::PositionIterator(static_cast< const Xapian::PositionIterator& >(result))), swig_types[37], 0x1 | 0);
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_positionlist_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::docid arg2 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  int res3 = ((0)) ;
+  PyObject *swig_obj[3] ;
+  Xapian::PositionIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_positionlist_end",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_positionlist_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Database_positionlist_end" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "Database_positionlist_end" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_positionlist_end" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->positionlist_end(arg2,(std::string const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::PositionIterator(static_cast< const Xapian::PositionIterator& >(result))), swig_types[37], 0x1 | 0);
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_allterms_begin__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::TermIterator result;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_allterms_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->allterms_begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_allterms_end__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::TermIterator result;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_allterms_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->allterms_end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_allterms_begin__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  Xapian::TermIterator result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_allterms_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_allterms_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_allterms_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->allterms_begin((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_allterms_begin(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Database_allterms_begin",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_Database_allterms_begin__SWIG_0(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_Database_allterms_begin__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Database_allterms_begin'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    allterms_begin(Xapian::Database const *)\n"
+    "    allterms_begin(Xapian::Database const *,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_allterms_end__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  Xapian::TermIterator result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_allterms_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_allterms_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_allterms_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->allterms_end((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_allterms_end(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Database_allterms_end",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_Database_allterms_end__SWIG_0(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_Database_allterms_end__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Database_allterms_end'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    allterms_end(Xapian::Database const *)\n"
+    "    allterms_end(Xapian::Database const *,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_doccount(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doccount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_doccount" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::Database const *)arg1)->get_doccount();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_lastdocid(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::docid result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_lastdocid" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::docid)((Xapian::Database const *)arg1)->get_lastdocid();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_avlength(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::doclength result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_avlength" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doclength)((Xapian::Database const *)arg1)->get_avlength();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_termfreq(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Xapian::doccount result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_get_termfreq",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_termfreq" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_get_termfreq" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_get_termfreq" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::Database const *)arg1)->get_termfreq((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_term_exists(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_term_exists",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_term_exists" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_term_exists" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_term_exists" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)((Xapian::Database const *)arg1)->term_exists((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_collection_freq(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Xapian::termcount result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_get_collection_freq",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_collection_freq" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_get_collection_freq" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_get_collection_freq" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::Database const *)arg1)->get_collection_freq((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_value_freq(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::doccount result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_get_value_freq",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_value_freq" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Database_get_value_freq" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doccount)((Xapian::Database const *)arg1)->get_value_freq(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_value_lower_bound(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  std::string result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_get_value_lower_bound",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_value_lower_bound" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Database_get_value_lower_bound" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->get_value_lower_bound(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_value_upper_bound(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  std::string result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_get_value_upper_bound",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_value_upper_bound" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Database_get_value_upper_bound" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->get_value_upper_bound(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_doclength_lower_bound(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termcount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_doclength_lower_bound" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::Database const *)arg1)->get_doclength_lower_bound();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_doclength_upper_bound(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termcount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_doclength_upper_bound" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::Database const *)arg1)->get_doclength_upper_bound();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_wdf_upper_bound(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Xapian::termcount result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_get_wdf_upper_bound",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_wdf_upper_bound" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_get_wdf_upper_bound" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_get_wdf_upper_bound" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::Database const *)arg1)->get_wdf_upper_bound((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_valuestream_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::ValueIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_valuestream_begin",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_valuestream_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Database_valuestream_begin" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->valuestream_begin(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ValueIterator(static_cast< const Xapian::ValueIterator& >(result))), swig_types[59], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_valuestream_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::ValueIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_valuestream_end",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_valuestream_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Database_valuestream_end" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->valuestream_end(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::ValueIterator(static_cast< const Xapian::ValueIterator& >(result))), swig_types[59], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_doclength(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::doclength result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_get_doclength",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_doclength" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Database_get_doclength" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::doclength)((Xapian::Database const *)arg1)->get_doclength(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_keep_alive(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_keep_alive" "', argument " "1"" of type '" "Xapian::Database *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->keep_alive();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_document(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::Document result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_get_document",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_document" "', argument " "1"" of type '" "Xapian::Database *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Database_get_document" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (arg1)->get_document(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Document(static_cast< const Xapian::Document& >(result))), swig_types[15], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_spelling_suggestion__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  unsigned int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  std::string result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_spelling_suggestion" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_get_spelling_suggestion" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_get_spelling_suggestion" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Database_get_spelling_suggestion" "', argument " "3"" of type '" "unsigned int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< unsigned int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->get_spelling_suggestion((std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_spelling_suggestion__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  std::string result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_spelling_suggestion" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_get_spelling_suggestion" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_get_spelling_suggestion" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->get_spelling_suggestion((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_spelling_suggestion(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Database_get_spelling_suggestion",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_Database_get_spelling_suggestion__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_Database_get_spelling_suggestion__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Database_get_spelling_suggestion'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    get_spelling_suggestion(Xapian::Database const *,std::string const &,unsigned int)\n"
+    "    get_spelling_suggestion(Xapian::Database const *,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_spellings_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::TermIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_spellings_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->spellings_begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_spellings_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::TermIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_spellings_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->spellings_end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_synonyms_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Xapian::TermIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_synonyms_begin",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_synonyms_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_synonyms_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_synonyms_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->synonyms_begin((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_synonyms_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Xapian::TermIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_synonyms_end",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_synonyms_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_synonyms_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_synonyms_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->synonyms_end((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_synonym_keys_begin__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  Xapian::TermIterator result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_synonym_keys_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_synonym_keys_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_synonym_keys_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->synonym_keys_begin((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_synonym_keys_begin__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::TermIterator result;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_synonym_keys_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->synonym_keys_begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_synonym_keys_begin(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Database_synonym_keys_begin",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_Database_synonym_keys_begin__SWIG_1(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_Database_synonym_keys_begin__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Database_synonym_keys_begin'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    synonym_keys_begin(Xapian::Database const *,std::string const &)\n"
+    "    synonym_keys_begin(Xapian::Database const *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_synonym_keys_end__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  Xapian::TermIterator result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_synonym_keys_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_synonym_keys_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_synonym_keys_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->synonym_keys_end((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_synonym_keys_end__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::TermIterator result;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_synonym_keys_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->synonym_keys_end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_synonym_keys_end(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Database_synonym_keys_end",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_Database_synonym_keys_end__SWIG_1(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_Database_synonym_keys_end__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Database_synonym_keys_end'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    synonym_keys_end(Xapian::Database const *,std::string const &)\n"
+    "    synonym_keys_end(Xapian::Database const *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_metadata(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  std::string result;
+  if (!SWIG_Python_UnpackTuple(args,"Database_get_metadata",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_metadata" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database_get_metadata" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database_get_metadata" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->get_metadata((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database__metadata_keys_begin__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  Xapian::TermIterator result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database__metadata_keys_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database__metadata_keys_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database__metadata_keys_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->metadata_keys_begin((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database__metadata_keys_begin__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::TermIterator result;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database__metadata_keys_begin" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->metadata_keys_begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database__metadata_keys_begin(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Database__metadata_keys_begin",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_Database__metadata_keys_begin__SWIG_1(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_Database__metadata_keys_begin__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Database__metadata_keys_begin'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    metadata_keys_begin(Xapian::Database const *,std::string const &)\n"
+    "    metadata_keys_begin(Xapian::Database const *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database__metadata_keys_end__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  Xapian::TermIterator result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database__metadata_keys_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Database__metadata_keys_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Database__metadata_keys_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->metadata_keys_end((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database__metadata_keys_end__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::TermIterator result;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database__metadata_keys_end" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->metadata_keys_end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database__metadata_keys_end(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Database__metadata_keys_end",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_Database__metadata_keys_end__SWIG_1(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_Database__metadata_keys_end__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Database__metadata_keys_end'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    metadata_keys_end(Xapian::Database const *,std::string const &)\n"
+    "    metadata_keys_end(Xapian::Database const *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Database_get_uuid(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Database *arg1 = (Xapian::Database *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[4], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Database_get_uuid" "', argument " "1"" of type '" "Xapian::Database const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Database * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Database const *)arg1)->get_uuid();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *Database_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[4], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *Database_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_WritableDatabase(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_WritableDatabase" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_WritableDatabase__SWIG_0(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::WritableDatabase *)new Xapian::WritableDatabase();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[66], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_WritableDatabase__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::WritableDatabase *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_WritableDatabase" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_WritableDatabase" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_WritableDatabase" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::WritableDatabase *)new Xapian::WritableDatabase((std::string const &)*arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[66], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_WritableDatabase__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::WritableDatabase *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_WritableDatabase" "', argument " "1"" of type '" "Xapian::WritableDatabase const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_WritableDatabase" "', argument " "1"" of type '" "Xapian::WritableDatabase const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::WritableDatabase *)new Xapian::WritableDatabase((Xapian::WritableDatabase const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[66], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_WritableDatabase(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_WritableDatabase",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_WritableDatabase__SWIG_0(self, argc, argv);
+  }
+  if (argc == 1) {
+    return _wrap_new_WritableDatabase__SWIG_2(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_new_WritableDatabase__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_WritableDatabase'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::WritableDatabase()\n"
+    "    Xapian::WritableDatabase(std::string const &,int)\n"
+    "    Xapian::WritableDatabase(Xapian::WritableDatabase const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_commit(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_commit" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->commit();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_flush(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_flush" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->flush();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_begin_transaction__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_begin_transaction" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "WritableDatabase_begin_transaction" "', argument " "2"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< bool >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->begin_transaction(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_begin_transaction__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_begin_transaction" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->begin_transaction();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_begin_transaction(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"WritableDatabase_begin_transaction",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_WritableDatabase_begin_transaction__SWIG_1(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_WritableDatabase_begin_transaction__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'WritableDatabase_begin_transaction'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    begin_transaction(Xapian::WritableDatabase *,bool)\n"
+    "    begin_transaction(Xapian::WritableDatabase *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_commit_transaction(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_commit_transaction" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->commit_transaction();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_cancel_transaction(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_cancel_transaction" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->cancel_transaction();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_add_document(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  Xapian::Document *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::docid result;
+  if (!SWIG_Python_UnpackTuple(args,"WritableDatabase_add_document",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_add_document" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[15], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "WritableDatabase_add_document" "', argument " "2"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_add_document" "', argument " "2"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Document * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::docid)(arg1)->add_document((Xapian::Document const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_delete_document__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  Xapian::docid arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_delete_document" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "WritableDatabase_delete_document" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->delete_document(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_replace_document__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  Xapian::docid arg2 ;
+  Xapian::Document *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_replace_document" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "WritableDatabase_replace_document" "', argument " "2"" of type '" "Xapian::docid""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::docid >(val2);
+  res3 = SWIG_Python_ConvertPtrAndOwn(swig_obj[2], &argp3, swig_types[15], 0 | 0, 0);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "WritableDatabase_replace_document" "', argument " "3"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  if (!argp3) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_replace_document" "', argument " "3"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< Xapian::Document * >(argp3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->replace_document(arg2,(Xapian::Document const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_delete_document__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_delete_document" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "WritableDatabase_delete_document" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_delete_document" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->delete_document((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_delete_document(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"WritableDatabase_delete_document",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_unsigned_SS_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_1;
+    return _wrap_WritableDatabase_delete_document__SWIG_0(self, argc, argv);
+  }
+check_1:
+  if (argc == 2) {
+    return _wrap_WritableDatabase_delete_document__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'WritableDatabase_delete_document'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    delete_document(Xapian::WritableDatabase *,Xapian::docid)\n"
+    "    delete_document(Xapian::WritableDatabase *,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_replace_document__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::Document *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  Xapian::docid result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_replace_document" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "WritableDatabase_replace_document" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_replace_document" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  res3 = SWIG_Python_ConvertPtrAndOwn(swig_obj[2], &argp3, swig_types[15], 0 | 0, 0);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "WritableDatabase_replace_document" "', argument " "3"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  if (!argp3) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_replace_document" "', argument " "3"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< Xapian::Document * >(argp3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::docid)(arg1)->replace_document((std::string const &)*arg2,(Xapian::Document const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_replace_document(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"WritableDatabase_replace_document",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_unsigned_SS_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_1;
+    return _wrap_WritableDatabase_replace_document__SWIG_0(self, argc, argv);
+  }
+check_1:
+  if (argc == 3) {
+    return _wrap_WritableDatabase_replace_document__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'WritableDatabase_replace_document'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    replace_document(Xapian::WritableDatabase *,Xapian::docid,Xapian::Document const &)\n"
+    "    replace_document(Xapian::WritableDatabase *,std::string const &,Xapian::Document const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_add_spelling__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::termcount arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_add_spelling" "', argument " "1"" of type '" "Xapian::WritableDatabase const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "WritableDatabase_add_spelling" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_add_spelling" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "WritableDatabase_add_spelling" "', argument " "3"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termcount >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        ((Xapian::WritableDatabase const *)arg1)->add_spelling((std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_add_spelling__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_add_spelling" "', argument " "1"" of type '" "Xapian::WritableDatabase const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "WritableDatabase_add_spelling" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_add_spelling" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        ((Xapian::WritableDatabase const *)arg1)->add_spelling((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_add_spelling(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"WritableDatabase_add_spelling",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_WritableDatabase_add_spelling__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_WritableDatabase_add_spelling__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'WritableDatabase_add_spelling'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    add_spelling(Xapian::WritableDatabase const *,std::string const &,Xapian::termcount)\n"
+    "    add_spelling(Xapian::WritableDatabase const *,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_remove_spelling__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::termcount arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_remove_spelling" "', argument " "1"" of type '" "Xapian::WritableDatabase const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "WritableDatabase_remove_spelling" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_remove_spelling" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "WritableDatabase_remove_spelling" "', argument " "3"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termcount >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        ((Xapian::WritableDatabase const *)arg1)->remove_spelling((std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_remove_spelling__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_remove_spelling" "', argument " "1"" of type '" "Xapian::WritableDatabase const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "WritableDatabase_remove_spelling" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_remove_spelling" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        ((Xapian::WritableDatabase const *)arg1)->remove_spelling((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_remove_spelling(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"WritableDatabase_remove_spelling",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_WritableDatabase_remove_spelling__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_WritableDatabase_remove_spelling__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'WritableDatabase_remove_spelling'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    remove_spelling(Xapian::WritableDatabase const *,std::string const &,Xapian::termcount)\n"
+    "    remove_spelling(Xapian::WritableDatabase const *,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_add_synonym(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  std::string *arg2 = 0 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  int res3 = ((0)) ;
+  PyObject *swig_obj[3] ;
+  if (!SWIG_Python_UnpackTuple(args,"WritableDatabase_add_synonym",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_add_synonym" "', argument " "1"" of type '" "Xapian::WritableDatabase const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "WritableDatabase_add_synonym" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_add_synonym" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "WritableDatabase_add_synonym" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_add_synonym" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        ((Xapian::WritableDatabase const *)arg1)->add_synonym((std::string const &)*arg2,(std::string const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_remove_synonym(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  std::string *arg2 = 0 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  int res3 = ((0)) ;
+  PyObject *swig_obj[3] ;
+  if (!SWIG_Python_UnpackTuple(args,"WritableDatabase_remove_synonym",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_remove_synonym" "', argument " "1"" of type '" "Xapian::WritableDatabase const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "WritableDatabase_remove_synonym" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_remove_synonym" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "WritableDatabase_remove_synonym" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_remove_synonym" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        ((Xapian::WritableDatabase const *)arg1)->remove_synonym((std::string const &)*arg2,(std::string const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_clear_synonyms(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"WritableDatabase_clear_synonyms",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_clear_synonyms" "', argument " "1"" of type '" "Xapian::WritableDatabase const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "WritableDatabase_clear_synonyms" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_clear_synonyms" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        ((Xapian::WritableDatabase const *)arg1)->clear_synonyms((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase_set_metadata(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  std::string *arg2 = 0 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  int res3 = ((0)) ;
+  PyObject *swig_obj[3] ;
+  if (!SWIG_Python_UnpackTuple(args,"WritableDatabase_set_metadata",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase_set_metadata" "', argument " "1"" of type '" "Xapian::WritableDatabase *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "WritableDatabase_set_metadata" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_set_metadata" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "WritableDatabase_set_metadata" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "WritableDatabase_set_metadata" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_metadata((std::string const &)*arg2,(std::string const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_WritableDatabase___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase *arg1 = (Xapian::WritableDatabase *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[66], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "WritableDatabase___str__" "', argument " "1"" of type '" "Xapian::WritableDatabase const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::WritableDatabase * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::WritableDatabase const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *WritableDatabase_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[66], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *WritableDatabase_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_open_stub(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  PyObject *swig_obj[1] ;
+  Xapian::Database result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "open_stub" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "open_stub" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Auto::open_stub((std::string const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Database(static_cast< const Xapian::Database& >(result))), swig_types[4], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_brass_open__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::Database result;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "brass_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "brass_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Brass::open((std::string const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Database(static_cast< const Xapian::Database& >(result))), swig_types[4], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_brass_open__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::WritableDatabase result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "brass_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "brass_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "brass_open" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "brass_open" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Brass::open((std::string const &)*arg1,arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_brass_open__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::WritableDatabase result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "brass_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "brass_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "brass_open" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Brass::open((std::string const &)*arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_brass_open(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"brass_open",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_brass_open__SWIG_0(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_brass_open__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_brass_open__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'brass_open'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::Brass::open(std::string const &)\n"
+    "    Xapian::Brass::open(std::string const &,int,int)\n"
+    "    Xapian::Brass::open(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_chert_open__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::Database result;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "chert_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "chert_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Chert::open((std::string const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Database(static_cast< const Xapian::Database& >(result))), swig_types[4], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_chert_open__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::WritableDatabase result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "chert_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "chert_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "chert_open" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "chert_open" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Chert::open((std::string const &)*arg1,arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_chert_open__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::WritableDatabase result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "chert_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "chert_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "chert_open" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Chert::open((std::string const &)*arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_chert_open(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"chert_open",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_chert_open__SWIG_0(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_chert_open__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_chert_open__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'chert_open'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::Chert::open(std::string const &)\n"
+    "    Xapian::Chert::open(std::string const &,int,int)\n"
+    "    Xapian::Chert::open(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_flint_open__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::Database result;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "flint_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "flint_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Flint::open((std::string const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Database(static_cast< const Xapian::Database& >(result))), swig_types[4], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_flint_open__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int arg3 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::WritableDatabase result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "flint_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "flint_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "flint_open" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "flint_open" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Flint::open((std::string const &)*arg1,arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_flint_open__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int arg2 ;
+  int res1 = ((0)) ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::WritableDatabase result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "flint_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "flint_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "flint_open" "', argument " "2"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Flint::open((std::string const &)*arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_flint_open(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"flint_open",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_flint_open__SWIG_0(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_flint_open__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_flint_open__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'flint_open'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::Flint::open(std::string const &)\n"
+    "    Xapian::Flint::open(std::string const &,int,int)\n"
+    "    Xapian::Flint::open(std::string const &,int)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_inmemory_open(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::WritableDatabase result;
+  if (!SWIG_Python_UnpackTuple(args,"inmemory_open",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::InMemory::open();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  unsigned int arg2 ;
+  Xapian::timeout arg3 ;
+  Xapian::timeout arg4 ;
+  int res1 = ((0)) ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  unsigned int val4 ;
+  int ecode4 = 0 ;
+  Xapian::Database result;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "remote_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "remote_open" "', argument " "2"" of type '" "unsigned int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< unsigned int >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "remote_open" "', argument " "3"" of type '" "Xapian::timeout""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::timeout >(val3);
+  ecode4 = SWIG_AsVal_unsigned_SS_int(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "remote_open" "', argument " "4"" of type '" "Xapian::timeout""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< Xapian::timeout >(val4);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Remote::open((std::string const &)*arg1,arg2,arg3,arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Database(static_cast< const Xapian::Database& >(result))), swig_types[4], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  unsigned int arg2 ;
+  Xapian::timeout arg3 ;
+  int res1 = ((0)) ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  Xapian::Database result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "remote_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "remote_open" "', argument " "2"" of type '" "unsigned int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< unsigned int >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "remote_open" "', argument " "3"" of type '" "Xapian::timeout""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::timeout >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Remote::open((std::string const &)*arg1,arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Database(static_cast< const Xapian::Database& >(result))), swig_types[4], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  unsigned int arg2 ;
+  int res1 = ((0)) ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  Xapian::Database result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "remote_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "remote_open" "', argument " "2"" of type '" "unsigned int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< unsigned int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Remote::open((std::string const &)*arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Database(static_cast< const Xapian::Database& >(result))), swig_types[4], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open_writable__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  unsigned int arg2 ;
+  Xapian::timeout arg3 ;
+  Xapian::timeout arg4 ;
+  int res1 = ((0)) ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  unsigned int val4 ;
+  int ecode4 = 0 ;
+  Xapian::WritableDatabase result;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "remote_open_writable" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open_writable" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "remote_open_writable" "', argument " "2"" of type '" "unsigned int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< unsigned int >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "remote_open_writable" "', argument " "3"" of type '" "Xapian::timeout""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::timeout >(val3);
+  ecode4 = SWIG_AsVal_unsigned_SS_int(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "remote_open_writable" "', argument " "4"" of type '" "Xapian::timeout""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< Xapian::timeout >(val4);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Remote::open_writable((std::string const &)*arg1,arg2,arg3,arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open_writable__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  unsigned int arg2 ;
+  Xapian::timeout arg3 ;
+  int res1 = ((0)) ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  Xapian::WritableDatabase result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "remote_open_writable" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open_writable" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "remote_open_writable" "', argument " "2"" of type '" "unsigned int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< unsigned int >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "remote_open_writable" "', argument " "3"" of type '" "Xapian::timeout""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::timeout >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Remote::open_writable((std::string const &)*arg1,arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open_writable__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  unsigned int arg2 ;
+  int res1 = ((0)) ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  Xapian::WritableDatabase result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "remote_open_writable" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open_writable" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "remote_open_writable" "', argument " "2"" of type '" "unsigned int""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< unsigned int >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Remote::open_writable((std::string const &)*arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::timeout arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  Xapian::Database result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "remote_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "remote_open" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "remote_open" "', argument " "3"" of type '" "Xapian::timeout""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::timeout >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Remote::open((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Database(static_cast< const Xapian::Database& >(result))), swig_types[4], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::Database result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "remote_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "remote_open" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Remote::open((std::string const &)*arg1,(std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Database(static_cast< const Xapian::Database& >(result))), swig_types[4], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"remote_open",0,4,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_unsigned_SS_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_1;
+    return _wrap_remote_open__SWIG_2(self, argc, argv);
+  }
+check_1:
+  if (argc == 2) {
+    return _wrap_remote_open__SWIG_4(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_unsigned_SS_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_3;
+    return _wrap_remote_open__SWIG_1(self, argc, argv);
+  }
+check_3:
+  if (argc == 3) {
+    return _wrap_remote_open__SWIG_3(self, argc, argv);
+  }
+  if (argc == 4) {
+    return _wrap_remote_open__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'remote_open'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::Remote::open(std::string const &,unsigned int,Xapian::timeout,Xapian::timeout)\n"
+    "    Xapian::Remote::open(std::string const &,unsigned int,Xapian::timeout)\n"
+    "    Xapian::Remote::open(std::string const &,unsigned int)\n"
+    "    Xapian::Remote::open(std::string const &,std::string const &,Xapian::timeout)\n"
+    "    Xapian::Remote::open(std::string const &,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open_writable__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::timeout arg3 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  Xapian::WritableDatabase result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "remote_open_writable" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open_writable" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "remote_open_writable" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open_writable" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "remote_open_writable" "', argument " "3"" of type '" "Xapian::timeout""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::timeout >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Remote::open_writable((std::string const &)*arg1,(std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open_writable__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  std::string *arg2 = 0 ;
+  int res1 = ((0)) ;
+  int res2 = ((0)) ;
+  Xapian::WritableDatabase result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "remote_open_writable" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open_writable" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "remote_open_writable" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "remote_open_writable" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Remote::open_writable((std::string const &)*arg1,(std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::WritableDatabase(static_cast< const Xapian::WritableDatabase& >(result))), swig_types[66], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_remote_open_writable(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"remote_open_writable",0,4,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_unsigned_SS_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_1;
+    return _wrap_remote_open_writable__SWIG_2(self, argc, argv);
+  }
+check_1:
+  if (argc == 2) {
+    return _wrap_remote_open_writable__SWIG_4(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_unsigned_SS_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_3;
+    return _wrap_remote_open_writable__SWIG_1(self, argc, argv);
+  }
+check_3:
+  if (argc == 3) {
+    return _wrap_remote_open_writable__SWIG_3(self, argc, argv);
+  }
+  if (argc == 4) {
+    return _wrap_remote_open_writable__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'remote_open_writable'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::Remote::open_writable(std::string const &,unsigned int,Xapian::timeout,Xapian::timeout)\n"
+    "    Xapian::Remote::open_writable(std::string const &,unsigned int,Xapian::timeout)\n"
+    "    Xapian::Remote::open_writable(std::string const &,unsigned int)\n"
+    "    Xapian::Remote::open_writable(std::string const &,std::string const &,Xapian::timeout)\n"
+    "    Xapian::Remote::open_writable(std::string const &,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Query *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[40], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "Xapian::Query const &""'"); goto fail; } while(0);
+  }
+  if (!argp1) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "1"" of type '" "Xapian::Query const &""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Query * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new Xapian::Query((Xapian::Query const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_1(PyObject *, int nobjs, PyObject **) {
+  PyObject *resultobj = 0;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 0) || (nobjs > 0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new Xapian::Query();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_Query(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Query *arg1 = (Xapian::Query *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[40], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_Query" "', argument " "1"" of type '" "Xapian::Query *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Query * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  Xapian::termcount arg2 ;
+  Xapian::termpos arg3 ;
+  int res1 = ((0)) ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_Query" "', argument " "2"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termcount >(val2);
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_Query" "', argument " "3"" of type '" "Xapian::termpos""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termpos >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new Xapian::Query((std::string const &)*arg1,arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  Xapian::termcount arg2 ;
+  int res1 = ((0)) ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_Query" "', argument " "2"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termcount >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new Xapian::Query((std::string const &)*arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new Xapian::Query((std::string const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_5(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Query::op arg1 ;
+  Xapian::Query *arg2 = 0 ;
+  Xapian::Query *arg3 = 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  ecode1 = SWIG_AsVal_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "Xapian::Query::op""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::Query::op >(val1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[40], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_Query" "', argument " "2"" of type '" "Xapian::Query const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "2"" of type '" "Xapian::Query const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Query * >(argp2);
+  res3 = SWIG_Python_ConvertPtrAndOwn(swig_obj[2], &argp3, swig_types[40], 0 | 0, 0);
+  if (!(res3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_Query" "', argument " "3"" of type '" "Xapian::Query const &""'"); goto fail; } while(0);
+  }
+  if (!argp3) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "3"" of type '" "Xapian::Query const &""'"); goto fail; } while(0);
+  }
+  arg3 = reinterpret_cast< Xapian::Query * >(argp3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new Xapian::Query(arg1,(Xapian::Query const &)*arg2,(Xapian::Query const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_6(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Query::op arg1 ;
+  std::string *arg2 = 0 ;
+  std::string *arg3 = 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int res2 = ((0)) ;
+  int res3 = ((0)) ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  ecode1 = SWIG_AsVal_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "Xapian::Query::op""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::Query::op >(val1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_Query" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_Query" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new Xapian::Query(arg1,(std::string const &)*arg2,(std::string const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_9(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Query::op arg1 ;
+  Xapian::Query arg2 ;
+  double arg3 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  ecode1 = SWIG_AsVal_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "Xapian::Query::op""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::Query::op >(val1);
+  {
+    res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[40], 0 | 0, 0);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_Query" "', argument " "2"" of type '" "Xapian::Query""'"); goto fail; } while(0);
+    }
+    if (!argp2) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "2"" of type '" "Xapian::Query""'"); goto fail; } while(0);
+    } else {
+      Xapian::Query * temp = reinterpret_cast< Xapian::Query * >(argp2);
+      arg2 = *temp;
+      if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_Query" "', argument " "3"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< double >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new Xapian::Query(arg1,arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_10(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Query::op arg1 ;
+  Xapian::valueno arg2 ;
+  std::string *arg3 = 0 ;
+  std::string *arg4 = 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  int res3 = ((0)) ;
+  int res4 = ((0)) ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  ecode1 = SWIG_AsVal_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "Xapian::Query::op""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::Query::op >(val1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_Query" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_Query" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res4 = SWIG_anystring_as_ptr(&(swig_obj[3]), &ptr);
+    if (!(res4 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res4 != (-1)) ? res4 : -5)), "in method '" "new_Query" "', argument " "4"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "4"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg4 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new Xapian::Query(arg1,arg2,(std::string const &)*arg3,(std::string const &)*arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  if (((res4 >= 0) && (res4 & ((1 << 8) << 1)))) delete arg4;
+  return resultobj;
+fail:
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  if (((res4 >= 0) && (res4 & ((1 << 8) << 1)))) delete arg4;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_11(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Query::op arg1 ;
+  Xapian::valueno arg2 ;
+  std::string *arg3 = 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  int res3 = ((0)) ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  ecode1 = SWIG_AsVal_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "Xapian::Query::op""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::Query::op >(val1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_Query" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "new_Query" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Query" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new Xapian::Query(arg1,arg2,(std::string const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_12(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::PostingSource *arg1 = (Xapian::PostingSource *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[39], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "Xapian::PostingSource *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::PostingSource * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new Xapian::Query(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Query_get_length(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Query *arg1 = (Xapian::Query *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termcount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[40], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Query_get_length" "', argument " "1"" of type '" "Xapian::Query const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Query * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::Query const *)arg1)->get_length();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Query_get_terms_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Query *arg1 = (Xapian::Query *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::TermIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[40], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Query_get_terms_begin" "', argument " "1"" of type '" "Xapian::Query const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Query * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Query const *)arg1)->get_terms_begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Query_get_terms_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Query *arg1 = (Xapian::Query *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::TermIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[40], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Query_get_terms_end" "', argument " "1"" of type '" "Xapian::Query const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Query * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Query const *)arg1)->get_terms_end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Query_empty(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Query *arg1 = (Xapian::Query *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  bool result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[40], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Query_empty" "', argument " "1"" of type '" "Xapian::Query const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Query * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (bool)((Xapian::Query const *)arg1)->empty();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Query_serialise(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Query *arg1 = (Xapian::Query *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[40], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Query_serialise" "', argument " "1"" of type '" "Xapian::Query const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Query * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Query const *)arg1)->serialise();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Query_unserialise__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::Query result;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Query_unserialise" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Query_unserialise" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Query::unserialise((std::string const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Query(static_cast< const Xapian::Query& >(result))), swig_types[40], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Query_unserialise__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  Xapian::Registry *arg2 = 0 ;
+  int res1 = ((0)) ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  Xapian::Query result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Query_unserialise" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Query_unserialise" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[45], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Query_unserialise" "', argument " "2"" of type '" "Xapian::Registry const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Query_unserialise" "', argument " "2"" of type '" "Xapian::Registry const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Registry * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Query::unserialise((std::string const &)*arg1,(Xapian::Registry const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Query(static_cast< const Xapian::Query& >(result))), swig_types[40], 0x1 | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Query_unserialise(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"Query_unserialise",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_Query_unserialise__SWIG_0(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_Query_unserialise__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Query_unserialise'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    unserialise(std::string const &)\n"
+    "    Xapian::Query::unserialise(std::string const &,Xapian::Registry const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Query___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Query *arg1 = (Xapian::Query *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[40], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Query___str__" "', argument " "1"" of type '" "Xapian::Query const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Query * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Query const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_13(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Query::op arg1 ;
+  std::vector< Xapian::Query > *arg2 = 0 ;
+  Xapian::termcount arg3 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  vector< Xapian::Query > v2 ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  ecode1 = SWIG_AsVal_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "Xapian::Query::op""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::Query::op >(val1);
+  {
+    PyObject * fastseq = PySequence_Fast(swig_obj[1], "expected sequence of strings or queries");
+    if (!fastseq) {
+      goto fail;
+    }
+    int numitems = (((((((PyObject*)(fastseq))->ob_type))->tp_flags & ((1L<<25))) != 0) ? (((PyVarObject*)(fastseq))->ob_size) : (((PyVarObject*)(fastseq))->ob_size));
+    v2.reserve(numitems);
+    for (int i = 0; i < numitems; ++i) {
+      PyObject *obj = (((((((PyObject*)(fastseq))->ob_type))->tp_flags & ((1L<<25))) != 0) ? (((PyListObject *)(fastseq))->ob_item[i]) : (((PyTupleObject *)(fastseq))->ob_item[i]));
+      PyObject *decrefme = __null;
+      if (((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<28))) != 0)) {
+        PyObject *strobj = PyUnicodeUCS4_EncodeUTF8((((PyUnicodeObject *)(obj))->str), (((PyUnicodeObject *)(obj))->length), "ignore");
+        if (!strobj) goto fail;
+        obj = strobj;
+        decrefme = strobj;
+      }
+      if (((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<27))) != 0))
+      {
+        char * p;
+        Py_ssize_t len;
+        (void)PyString_AsStringAndSize(obj, &p, &len);
+        v2.push_back(Xapian::Query(string(p, len)));
+      } else {
+        Xapian::Query *subqp = Xapian::get_py_query(obj);
+        if (!subqp) {
+          PyErr_SetString(PyExc_TypeError, "expected string or query");
+          if ((decrefme) == __null) ; else if ( --((PyObject*)(decrefme))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(decrefme)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(decrefme))));
+          goto fail;
+        }
+        v2.push_back(*subqp);
+      }
+      if ((decrefme) == __null) ; else if ( --((PyObject*)(decrefme))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(decrefme)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(decrefme))));
+    }
+    arg2 = &v2;
+    if ( --((PyObject*)(fastseq))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(fastseq)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(fastseq))));
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_Query" "', argument " "3"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termcount >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new_Xapian_Query__SWIG_13(arg1,(std::vector< Xapian::Query > const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query__SWIG_14(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::Query::op arg1 ;
+  std::vector< Xapian::Query > *arg2 = 0 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  vector< Xapian::Query > v2 ;
+  Xapian::Query *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  ecode1 = SWIG_AsVal_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_Query" "', argument " "1"" of type '" "Xapian::Query::op""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::Query::op >(val1);
+  {
+    PyObject * fastseq = PySequence_Fast(swig_obj[1], "expected sequence of strings or queries");
+    if (!fastseq) {
+      goto fail;
+    }
+    int numitems = (((((((PyObject*)(fastseq))->ob_type))->tp_flags & ((1L<<25))) != 0) ? (((PyVarObject*)(fastseq))->ob_size) : (((PyVarObject*)(fastseq))->ob_size));
+    v2.reserve(numitems);
+    for (int i = 0; i < numitems; ++i) {
+      PyObject *obj = (((((((PyObject*)(fastseq))->ob_type))->tp_flags & ((1L<<25))) != 0) ? (((PyListObject *)(fastseq))->ob_item[i]) : (((PyTupleObject *)(fastseq))->ob_item[i]));
+      PyObject *decrefme = __null;
+      if (((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<28))) != 0)) {
+        PyObject *strobj = PyUnicodeUCS4_EncodeUTF8((((PyUnicodeObject *)(obj))->str), (((PyUnicodeObject *)(obj))->length), "ignore");
+        if (!strobj) goto fail;
+        obj = strobj;
+        decrefme = strobj;
+      }
+      if (((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<27))) != 0))
+      {
+        char * p;
+        Py_ssize_t len;
+        (void)PyString_AsStringAndSize(obj, &p, &len);
+        v2.push_back(Xapian::Query(string(p, len)));
+      } else {
+        Xapian::Query *subqp = Xapian::get_py_query(obj);
+        if (!subqp) {
+          PyErr_SetString(PyExc_TypeError, "expected string or query");
+          if ((decrefme) == __null) ; else if ( --((PyObject*)(decrefme))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(decrefme)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(decrefme))));
+          goto fail;
+        }
+        v2.push_back(*subqp);
+      }
+      if ((decrefme) == __null) ; else if ( --((PyObject*)(decrefme))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(decrefme)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(decrefme))));
+    }
+    arg2 = &v2;
+    if ( --((PyObject*)(fastseq))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(fastseq)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(fastseq))));
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query *)new_Xapian_Query__SWIG_13(arg1,(std::vector< Xapian::Query > const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[40], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Query(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_Query",0,4,argv))) goto fail;
+  --argc;
+  if (argc == 0) {
+    return _wrap_new_Query__SWIG_1(self, argc, argv);
+  }
+  if (argc == 1) {
+    int _v = 0;
+    {
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[0], 0, swig_types[40], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_Query__SWIG_0(self, argc, argv);
+  }
+check_2:
+  if (argc == 1) {
+    int _v = 0;
+    {
+      void *vptr = 0;
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[0], &vptr, swig_types[39], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_3;
+    return _wrap_new_Query__SWIG_12(self, argc, argv);
+  }
+check_3:
+  if (argc == 1) {
+    return _wrap_new_Query__SWIG_4(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[0], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_5;
+    {
+      {
+        if (!PySequence_Check(argv[1])) {
+          _v = 0;
+        } else {
+          _v = 1;
+          PyObject * fastseq = PySequence_Fast(argv[1], "expected sequence of strings or queries");
+          if (!fastseq) {
+            goto fail;
+          }
+          int numitems = (((((((PyObject*)(fastseq))->ob_type))->tp_flags & ((1L<<25))) != 0) ? (((PyVarObject*)(fastseq))->ob_size) : (((PyVarObject*)(fastseq))->ob_size));
+          for (int i = 0; i < numitems; ++i) {
+            PyObject *obj = (((((((PyObject*)(fastseq))->ob_type))->tp_flags & ((1L<<25))) != 0) ? (((PyListObject *)(fastseq))->ob_item[i]) : (((PyTupleObject *)(fastseq))->ob_item[i]));
+            if (!((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<28))) != 0) &&
+              !((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<27))) != 0) &&
+              !Xapian::get_py_query(obj)) {
+              _v = 0;
+              break;
+            }
+          }
+          if ( --((PyObject*)(fastseq))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(fastseq)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(fastseq))));
+        }
+      }
+    }
+    if (!_v) goto check_5;
+    return _wrap_new_Query__SWIG_14(self, argc, argv);
+  }
+check_5:
+  if (argc == 2) {
+    return _wrap_new_Query__SWIG_3(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[0], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_7;
+    {
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[1], 0, swig_types[40], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_7;
+    {
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[2], 0, swig_types[40], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_7;
+    return _wrap_new_Query__SWIG_5(self, argc, argv);
+  }
+check_7:
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[0], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_8;
+    {
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[1], 0, swig_types[40], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_8;
+    {
+      {
+        int res = SWIG_AsVal_double(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_8;
+    return _wrap_new_Query__SWIG_9(self, argc, argv);
+  }
+check_8:
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[0], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_9;
+    {
+      {
+        int res = SWIG_AsVal_unsigned_SS_int(argv[1], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_9;
+    {
+      int res = SWIG_anystring_as_ptr(&(argv[2]), (std::string**)(0));
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_9;
+    return _wrap_new_Query__SWIG_11(self, argc, argv);
+  }
+check_9:
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[0], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_10;
+    {
+      {
+        if (!PySequence_Check(argv[1])) {
+          _v = 0;
+        } else {
+          _v = 1;
+          PyObject * fastseq = PySequence_Fast(argv[1], "expected sequence of strings or queries");
+          if (!fastseq) {
+            goto fail;
+          }
+          int numitems = (((((((PyObject*)(fastseq))->ob_type))->tp_flags & ((1L<<25))) != 0) ? (((PyVarObject*)(fastseq))->ob_size) : (((PyVarObject*)(fastseq))->ob_size));
+          for (int i = 0; i < numitems; ++i) {
+            PyObject *obj = (((((((PyObject*)(fastseq))->ob_type))->tp_flags & ((1L<<25))) != 0) ? (((PyListObject *)(fastseq))->ob_item[i]) : (((PyTupleObject *)(fastseq))->ob_item[i]));
+            if (!((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<28))) != 0) &&
+              !((((((PyObject*)(obj))->ob_type))->tp_flags & ((1L<<27))) != 0) &&
+              !Xapian::get_py_query(obj)) {
+              _v = 0;
+              break;
+            }
+          }
+          if ( --((PyObject*)(fastseq))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(fastseq)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(fastseq))));
+        }
+      }
+    }
+    if (!_v) goto check_10;
+    {
+      {
+        int res = SWIG_AsVal_unsigned_SS_int(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_10;
+    return _wrap_new_Query__SWIG_13(self, argc, argv);
+  }
+check_10:
+  if (argc == 3) {
+    int _v = 0;
+    {
+      {
+        int res = SWIG_AsVal_int(argv[0], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_11;
+    {
+      int res = SWIG_anystring_as_ptr(&(argv[1]), (std::string**)(0));
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_11;
+    {
+      int res = SWIG_anystring_as_ptr(&(argv[2]), (std::string**)(0));
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_11;
+    return _wrap_new_Query__SWIG_6(self, argc, argv);
+  }
+check_11:
+  if (argc == 3) {
+    return _wrap_new_Query__SWIG_2(self, argc, argv);
+  }
+  if (argc == 4) {
+    return _wrap_new_Query__SWIG_10(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_Query'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::Query(Xapian::Query const &)\n"
+    "    Xapian::Query()\n"
+    "    Xapian::Query(std::string const &,Xapian::termcount,Xapian::termpos)\n"
+    "    Xapian::Query(std::string const &,Xapian::termcount)\n"
+    "    Xapian::Query(std::string const &)\n"
+    "    Xapian::Query(Xapian::Query::op,Xapian::Query const &,Xapian::Query const &)\n"
+    "    Xapian::Query(Xapian::Query::op,std::string const &,std::string const &)\n"
+    "    Xapian::Query(Xapian::Query::op,Xapian::Query,double)\n"
+    "    Xapian::Query(Xapian::Query::op,Xapian::valueno,std::string const &,std::string const &)\n"
+    "    Xapian::Query(Xapian::Query::op,Xapian::valueno,std::string const &)\n"
+    "    Xapian::Query(Xapian::PostingSource *)\n"
+    "    Xapian::Query(Xapian::Query::op,std::vector< Xapian::Query > const &,Xapian::termcount)\n"
+    "    Xapian::Query(Xapian::Query::op,std::vector< Xapian::Query > const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *Query_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[40], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *Query_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Stopper___call__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Stopper *arg1 = (Xapian::Stopper *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  bool result;
+  if (!SWIG_Python_UnpackTuple(args,"Stopper___call__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[52], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Stopper___call__" "', argument " "1"" of type '" "Xapian::Stopper const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Stopper * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Stopper___call__" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Stopper___call__" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::Stopper::operator ()");
+        } else {
+          result = (bool)((Xapian::Stopper const *)arg1)->operator ()((std::string const &)*arg2);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_Stopper(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Stopper *arg1 = (Xapian::Stopper *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[52], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_Stopper" "', argument " "1"" of type '" "Xapian::Stopper *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Stopper * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Stopper___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Stopper *arg1 = (Xapian::Stopper *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[52], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Stopper___str__" "', argument " "1"" of type '" "Xapian::Stopper const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Stopper * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          result = ((Xapian::Stopper const *)arg1)->Xapian::Stopper::get_description();
+        } else {
+          result = ((Xapian::Stopper const *)arg1)->get_description();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Stopper(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::Stopper *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  arg1 = swig_obj[0];
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        if ( arg1 != (&_Py_NoneStruct) ) {
+          result = (Xapian::Stopper *)new SwigDirector_Stopper(arg1);
+        } else {
+          SWIG_Python_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor");
+          goto fail;
+        }
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[52], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_disown_Stopper(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Stopper *arg1 = (Xapian::Stopper *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[52], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "disown_Stopper" "', argument " "1"" of type '" "Xapian::Stopper *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Stopper * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      Swig::Director *director = dynamic_cast<Swig::Director *>(arg1);
+      if (director) director->swig_disown();
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *Stopper_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[52], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *Stopper_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_SimpleStopper(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::SimpleStopper *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"new_SimpleStopper",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::SimpleStopper *)new Xapian::SimpleStopper();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[48], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_SimpleStopper_add(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::SimpleStopper *arg1 = (Xapian::SimpleStopper *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"SimpleStopper_add",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[48], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "SimpleStopper_add" "', argument " "1"" of type '" "Xapian::SimpleStopper *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::SimpleStopper * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "SimpleStopper_add" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "SimpleStopper_add" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_SimpleStopper(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::SimpleStopper *arg1 = (Xapian::SimpleStopper *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[48], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_SimpleStopper" "', argument " "1"" of type '" "Xapian::SimpleStopper *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::SimpleStopper * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *SimpleStopper_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[48], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *SimpleStopper_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_ValueRangeProcessor(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueRangeProcessor *arg1 = (Xapian::ValueRangeProcessor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[62], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_ValueRangeProcessor" "', argument " "1"" of type '" "Xapian::ValueRangeProcessor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueRangeProcessor * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueRangeProcessor___call__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueRangeProcessor *arg1 = (Xapian::ValueRangeProcessor *) 0 ;
+  std::string *arg2 = 0 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  std::string temp2 ;
+  std::string temp3 ;
+  PyObject *swig_obj[3] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  Xapian::valueno result;
+  if (!SWIG_Python_UnpackTuple(args,"ValueRangeProcessor___call__",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[62], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueRangeProcessor___call__" "', argument " "1"" of type '" "Xapian::ValueRangeProcessor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueRangeProcessor * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    int res = SWIG_AsPtr_std_string(swig_obj[1], &ptr);
+    if (!(res >= 0) || !ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType((((ptr ? res : -5) != (-1)) ? (ptr ? res : -5) : -5)), "in method '" "ValueRangeProcessor___call__" "', argument " "2"" of type '" "std::string &""'"); goto fail; } while(0);
+    }
+    temp2 = *ptr;
+    arg2 = &temp2;
+    if (((res >= 0) && (res & ((1 << 8) << 1)))) delete ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    int res = SWIG_AsPtr_std_string(swig_obj[2], &ptr);
+    if (!(res >= 0) || !ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType((((ptr ? res : -5) != (-1)) ? (ptr ? res : -5) : -5)), "in method '" "ValueRangeProcessor___call__" "', argument " "3"" of type '" "std::string &""'"); goto fail; } while(0);
+    }
+    temp3 = *ptr;
+    arg3 = &temp3;
+    if (((res >= 0) && (res & ((1 << 8) << 1)))) delete ptr;
+  }
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::ValueRangeProcessor::operator ()");
+        } else {
+          result = (Xapian::valueno)(arg1)->operator ()(*arg2,*arg3);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  {
+    PyObject * str;
+    PyObject * newresult;
+    newresult = PyTuple_New(3);
+    if (newresult == 0) {
+      if ( --((PyObject*)(resultobj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(resultobj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(resultobj))));
+      resultobj = __null;
+      goto fail;
+    }
+    (((PyTupleObject *)(newresult))->ob_item[0] = resultobj);
+    resultobj = newresult;
+    str = PyString_FromStringAndSize(arg2->data(), arg2->size());
+    if (str == 0) {
+      if ( --((PyObject*)(resultobj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(resultobj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(resultobj))));
+      resultobj = __null;
+      goto fail;
+    }
+    (((PyTupleObject *)(resultobj))->ob_item[1] = str);
+    str = PyString_FromStringAndSize(arg3->data(), arg3->size());
+    if (str == 0) {
+      if ( --((PyObject*)(resultobj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(resultobj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(resultobj))));
+      resultobj = __null;
+      goto fail;
+    }
+    (((PyTupleObject *)(resultobj))->ob_item[2] = str);
+  }
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ValueRangeProcessor(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::ValueRangeProcessor *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  arg1 = swig_obj[0];
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        if ( arg1 != (&_Py_NoneStruct) ) {
+          result = (Xapian::ValueRangeProcessor *)new SwigDirector_ValueRangeProcessor(arg1);
+        } else {
+          SWIG_Python_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor");
+          goto fail;
+        }
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[62], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_disown_ValueRangeProcessor(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueRangeProcessor *arg1 = (Xapian::ValueRangeProcessor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[62], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "disown_ValueRangeProcessor" "', argument " "1"" of type '" "Xapian::ValueRangeProcessor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueRangeProcessor * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      Swig::Director *director = dynamic_cast<Swig::Director *>(arg1);
+      if (director) director->swig_disown();
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *ValueRangeProcessor_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[62], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *ValueRangeProcessor_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_StringValueRangeProcessor__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  Xapian::StringValueRangeProcessor *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_StringValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::StringValueRangeProcessor *)new Xapian::StringValueRangeProcessor(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[53], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_StringValueRangeProcessor__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  std::string *arg2 = 0 ;
+  bool arg3 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  int res2 = ((0)) ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  Xapian::StringValueRangeProcessor *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_StringValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_StringValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_StringValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_StringValueRangeProcessor" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::StringValueRangeProcessor *)new Xapian::StringValueRangeProcessor(arg1,(std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[53], ((0x1 << 1) | 0x1) | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_StringValueRangeProcessor__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  std::string *arg2 = 0 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  int res2 = ((0)) ;
+  Xapian::StringValueRangeProcessor *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_StringValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_StringValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_StringValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::StringValueRangeProcessor *)new Xapian::StringValueRangeProcessor(arg1,(std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[53], ((0x1 << 1) | 0x1) | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_StringValueRangeProcessor(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_StringValueRangeProcessor",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_StringValueRangeProcessor__SWIG_0(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_new_StringValueRangeProcessor__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_new_StringValueRangeProcessor__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_StringValueRangeProcessor'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::StringValueRangeProcessor(Xapian::valueno)\n"
+    "    Xapian::StringValueRangeProcessor(Xapian::valueno,std::string const &,bool)\n"
+    "    Xapian::StringValueRangeProcessor(Xapian::valueno,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_StringValueRangeProcessor(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::StringValueRangeProcessor *arg1 = (Xapian::StringValueRangeProcessor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[53], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_StringValueRangeProcessor" "', argument " "1"" of type '" "Xapian::StringValueRangeProcessor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::StringValueRangeProcessor * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *StringValueRangeProcessor_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[53], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *StringValueRangeProcessor_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DateValueRangeProcessor__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  bool arg2 ;
+  int arg3 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::DateValueRangeProcessor *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "2"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< bool >(val2);
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "3"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::DateValueRangeProcessor *)new Xapian::DateValueRangeProcessor(arg1,arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[12], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DateValueRangeProcessor__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  bool arg2 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  Xapian::DateValueRangeProcessor *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "2"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< bool >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::DateValueRangeProcessor *)new Xapian::DateValueRangeProcessor(arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[12], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DateValueRangeProcessor__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  Xapian::DateValueRangeProcessor *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::DateValueRangeProcessor *)new Xapian::DateValueRangeProcessor(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[12], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DateValueRangeProcessor__SWIG_3(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  std::string *arg2 = 0 ;
+  bool arg3 ;
+  bool arg4 ;
+  int arg5 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  int res2 = ((0)) ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  int val5 ;
+  int ecode5 = 0 ;
+  Xapian::DateValueRangeProcessor *result = 0 ;
+  if ((nobjs < 5) || (nobjs > 5)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DateValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  ecode4 = SWIG_AsVal_bool(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "4"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< bool >(val4);
+  ecode5 = SWIG_AsVal_int(swig_obj[4], &val5);
+  if (!(ecode5 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode5 != (-1)) ? ecode5 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "5"" of type '" "int""'"); goto fail; } while(0);
+  }
+  arg5 = static_cast< int >(val5);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::DateValueRangeProcessor *)new Xapian::DateValueRangeProcessor(arg1,(std::string const &)*arg2,arg3,arg4,arg5);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[12], ((0x1 << 1) | 0x1) | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DateValueRangeProcessor__SWIG_4(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  std::string *arg2 = 0 ;
+  bool arg3 ;
+  bool arg4 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  int res2 = ((0)) ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  Xapian::DateValueRangeProcessor *result = 0 ;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DateValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  ecode4 = SWIG_AsVal_bool(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "4"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< bool >(val4);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::DateValueRangeProcessor *)new Xapian::DateValueRangeProcessor(arg1,(std::string const &)*arg2,arg3,arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[12], ((0x1 << 1) | 0x1) | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DateValueRangeProcessor__SWIG_5(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  std::string *arg2 = 0 ;
+  bool arg3 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  int res2 = ((0)) ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  Xapian::DateValueRangeProcessor *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DateValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::DateValueRangeProcessor *)new Xapian::DateValueRangeProcessor(arg1,(std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[12], ((0x1 << 1) | 0x1) | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DateValueRangeProcessor__SWIG_6(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  std::string *arg2 = 0 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  int res2 = ((0)) ;
+  Xapian::DateValueRangeProcessor *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_DateValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_DateValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::DateValueRangeProcessor *)new Xapian::DateValueRangeProcessor(arg1,(std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[12], ((0x1 << 1) | 0x1) | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_DateValueRangeProcessor(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[6];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_DateValueRangeProcessor",0,5,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_DateValueRangeProcessor__SWIG_2(self, argc, argv);
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      int res = SWIG_anystring_as_ptr(&(argv[1]), (std::string**)(0));
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_2;
+    return _wrap_new_DateValueRangeProcessor__SWIG_6(self, argc, argv);
+  }
+check_2:
+  if (argc == 2) {
+    return _wrap_new_DateValueRangeProcessor__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      int res = SWIG_anystring_as_ptr(&(argv[1]), (std::string**)(0));
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_4;
+    {
+      {
+        int res = SWIG_AsVal_bool(argv[2], __null);
+        _v = ((res >= 0) ? 1 : 0);
+      }
+    }
+    if (!_v) goto check_4;
+    return _wrap_new_DateValueRangeProcessor__SWIG_5(self, argc, argv);
+  }
+check_4:
+  if (argc == 3) {
+    return _wrap_new_DateValueRangeProcessor__SWIG_0(self, argc, argv);
+  }
+  if (argc == 4) {
+    return _wrap_new_DateValueRangeProcessor__SWIG_4(self, argc, argv);
+  }
+  if (argc == 5) {
+    return _wrap_new_DateValueRangeProcessor__SWIG_3(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_DateValueRangeProcessor'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::DateValueRangeProcessor(Xapian::valueno,bool,int)\n"
+    "    Xapian::DateValueRangeProcessor(Xapian::valueno,bool)\n"
+    "    Xapian::DateValueRangeProcessor(Xapian::valueno)\n"
+    "    Xapian::DateValueRangeProcessor(Xapian::valueno,std::string const &,bool,bool,int)\n"
+    "    Xapian::DateValueRangeProcessor(Xapian::valueno,std::string const &,bool,bool)\n"
+    "    Xapian::DateValueRangeProcessor(Xapian::valueno,std::string const &,bool)\n"
+    "    Xapian::DateValueRangeProcessor(Xapian::valueno,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_DateValueRangeProcessor(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::DateValueRangeProcessor *arg1 = (Xapian::DateValueRangeProcessor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[12], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_DateValueRangeProcessor" "', argument " "1"" of type '" "Xapian::DateValueRangeProcessor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::DateValueRangeProcessor * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *DateValueRangeProcessor_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[12], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *DateValueRangeProcessor_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NumberValueRangeProcessor__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  Xapian::NumberValueRangeProcessor *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_NumberValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::NumberValueRangeProcessor *)new Xapian::NumberValueRangeProcessor(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[36], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NumberValueRangeProcessor__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  std::string *arg2 = 0 ;
+  bool arg3 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  int res2 = ((0)) ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  Xapian::NumberValueRangeProcessor *result = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_NumberValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_NumberValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NumberValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "new_NumberValueRangeProcessor" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::NumberValueRangeProcessor *)new Xapian::NumberValueRangeProcessor(arg1,(std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[36], ((0x1 << 1) | 0x1) | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NumberValueRangeProcessor__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  std::string *arg2 = 0 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  int res2 = ((0)) ;
+  Xapian::NumberValueRangeProcessor *result = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_NumberValueRangeProcessor" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "new_NumberValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_NumberValueRangeProcessor" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::NumberValueRangeProcessor *)new Xapian::NumberValueRangeProcessor(arg1,(std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[36], ((0x1 << 1) | 0x1) | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_NumberValueRangeProcessor(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_NumberValueRangeProcessor",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_new_NumberValueRangeProcessor__SWIG_0(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_new_NumberValueRangeProcessor__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_new_NumberValueRangeProcessor__SWIG_1(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_NumberValueRangeProcessor'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::NumberValueRangeProcessor(Xapian::valueno)\n"
+    "    Xapian::NumberValueRangeProcessor(Xapian::valueno,std::string const &,bool)\n"
+    "    Xapian::NumberValueRangeProcessor(Xapian::valueno,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_NumberValueRangeProcessor(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::NumberValueRangeProcessor *arg1 = (Xapian::NumberValueRangeProcessor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[36], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_NumberValueRangeProcessor" "', argument " "1"" of type '" "Xapian::NumberValueRangeProcessor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::NumberValueRangeProcessor * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *NumberValueRangeProcessor_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[36], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *NumberValueRangeProcessor_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_QueryParser(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"new_QueryParser",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::QueryParser *)new Xapian::QueryParser();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[41], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_QueryParser(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_QueryParser" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_set_stemmer(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  Xapian::Stem *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"QueryParser_set_stemmer",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_set_stemmer" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[50], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_set_stemmer" "', argument " "2"" of type '" "Xapian::Stem const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_set_stemmer" "', argument " "2"" of type '" "Xapian::Stem const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Stem * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_stemmer((Xapian::Stem const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_set_stemming_strategy(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  Xapian::QueryParser::stem_strategy arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"QueryParser_set_stemming_strategy",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_set_stemming_strategy" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "QueryParser_set_stemming_strategy" "', argument " "2"" of type '" "Xapian::QueryParser::stem_strategy""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::QueryParser::stem_strategy >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_stemming_strategy(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_set_stopper__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  Xapian::Stopper *arg2 = (Xapian::Stopper *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_set_stopper" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[52], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_set_stopper" "', argument " "2"" of type '" "Xapian::Stopper const *""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Stopper * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_stopper((Xapian::Stopper const *)arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_set_stopper__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_set_stopper" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_stopper();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_set_stopper(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"QueryParser_set_stopper",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_QueryParser_set_stopper__SWIG_1(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_QueryParser_set_stopper__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'QueryParser_set_stopper'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_stopper(Xapian::QueryParser *,Xapian::Stopper const *)\n"
+    "    set_stopper(Xapian::QueryParser *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_set_default_op(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  Xapian::Query::op arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"QueryParser_set_default_op",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_set_default_op" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "QueryParser_set_default_op" "', argument " "2"" of type '" "Xapian::Query::op""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::Query::op >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_default_op(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_get_default_op(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::Query::op result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_get_default_op" "', argument " "1"" of type '" "Xapian::QueryParser const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Query::op)((Xapian::QueryParser const *)arg1)->get_default_op();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_set_database(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  Xapian::Database *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"QueryParser_set_database",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_set_database" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[4], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_set_database" "', argument " "2"" of type '" "Xapian::Database const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_set_database" "', argument " "2"" of type '" "Xapian::Database const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Database * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_database((Xapian::Database const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_parse_query__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  std::string *arg2 = 0 ;
+  unsigned int arg3 ;
+  std::string *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  int res4 = ((0)) ;
+  Xapian::Query result;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_parse_query" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_parse_query" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_parse_query" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "QueryParser_parse_query" "', argument " "3"" of type '" "unsigned int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< unsigned int >(val3);
+  {
+    std::string *ptr = (std::string *)0;
+    res4 = SWIG_anystring_as_ptr(&(swig_obj[3]), &ptr);
+    if (!(res4 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res4 != (-1)) ? res4 : -5)), "in method '" "QueryParser_parse_query" "', argument " "4"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_parse_query" "', argument " "4"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg4 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (arg1)->parse_query((std::string const &)*arg2,arg3,(std::string const &)*arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Query(static_cast< const Xapian::Query& >(result))), swig_types[40], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res4 >= 0) && (res4 & ((1 << 8) << 1)))) delete arg4;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res4 >= 0) && (res4 & ((1 << 8) << 1)))) delete arg4;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_parse_query__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  std::string *arg2 = 0 ;
+  unsigned int arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  Xapian::Query result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_parse_query" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_parse_query" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_parse_query" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "QueryParser_parse_query" "', argument " "3"" of type '" "unsigned int""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< unsigned int >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (arg1)->parse_query((std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Query(static_cast< const Xapian::Query& >(result))), swig_types[40], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_parse_query__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  Xapian::Query result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_parse_query" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_parse_query" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_parse_query" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (arg1)->parse_query((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::Query(static_cast< const Xapian::Query& >(result))), swig_types[40], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_parse_query(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"QueryParser_parse_query",0,4,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_QueryParser_parse_query__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_QueryParser_parse_query__SWIG_1(self, argc, argv);
+  }
+  if (argc == 4) {
+    return _wrap_QueryParser_parse_query__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'QueryParser_parse_query'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    parse_query(Xapian::QueryParser *,std::string const &,unsigned int,std::string const &)\n"
+    "    parse_query(Xapian::QueryParser *,std::string const &,unsigned int)\n"
+    "    parse_query(Xapian::QueryParser *,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_add_prefix(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  std::string *arg2 = 0 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  int res3 = ((0)) ;
+  PyObject *swig_obj[3] ;
+  if (!SWIG_Python_UnpackTuple(args,"QueryParser_add_prefix",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_add_prefix" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_add_prefix" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_add_prefix" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "QueryParser_add_prefix" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_add_prefix" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_prefix((std::string const &)*arg2,(std::string const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_add_boolean_prefix__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  std::string *arg2 = 0 ;
+  std::string *arg3 = 0 ;
+  bool arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  int res3 = ((0)) ;
+  bool val4 ;
+  int ecode4 = 0 ;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_add_boolean_prefix" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_add_boolean_prefix" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_add_boolean_prefix" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "QueryParser_add_boolean_prefix" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_add_boolean_prefix" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  ecode4 = SWIG_AsVal_bool(swig_obj[3], &val4);
+  if (!(ecode4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode4 != (-1)) ? ecode4 : -5)), "in method '" "QueryParser_add_boolean_prefix" "', argument " "4"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg4 = static_cast< bool >(val4);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_boolean_prefix((std::string const &)*arg2,(std::string const &)*arg3,arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_add_boolean_prefix__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  std::string *arg2 = 0 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  int res3 = ((0)) ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_add_boolean_prefix" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_add_boolean_prefix" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_add_boolean_prefix" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "QueryParser_add_boolean_prefix" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_add_boolean_prefix" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_boolean_prefix((std::string const &)*arg2,(std::string const &)*arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_add_boolean_prefix(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"QueryParser_add_boolean_prefix",0,4,argv))) goto fail;
+  --argc;
+  if (argc == 3) {
+    return _wrap_QueryParser_add_boolean_prefix__SWIG_1(self, argc, argv);
+  }
+  if (argc == 4) {
+    return _wrap_QueryParser_add_boolean_prefix__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'QueryParser_add_boolean_prefix'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    add_boolean_prefix(Xapian::QueryParser *,std::string const &,std::string const &,bool)\n"
+    "    add_boolean_prefix(Xapian::QueryParser *,std::string const &,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_stoplist_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::TermIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_stoplist_begin" "', argument " "1"" of type '" "Xapian::QueryParser const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::QueryParser const *)arg1)->stoplist_begin();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_stoplist_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::TermIterator result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_stoplist_end" "', argument " "1"" of type '" "Xapian::QueryParser const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::QueryParser const *)arg1)->stoplist_end();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_unstem_begin(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Xapian::TermIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"QueryParser_unstem_begin",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_unstem_begin" "', argument " "1"" of type '" "Xapian::QueryParser const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_unstem_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_unstem_begin" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::QueryParser const *)arg1)->unstem_begin((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_unstem_end(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Xapian::TermIterator result;
+  if (!SWIG_Python_UnpackTuple(args,"QueryParser_unstem_end",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_unstem_end" "', argument " "1"" of type '" "Xapian::QueryParser const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_unstem_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "QueryParser_unstem_end" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::QueryParser const *)arg1)->unstem_end((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj((new Xapian::TermIterator(static_cast< const Xapian::TermIterator& >(result))), swig_types[55], 0x1 | 0);
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_add_valuerangeprocessor(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  Xapian::ValueRangeProcessor *arg2 = (Xapian::ValueRangeProcessor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"QueryParser_add_valuerangeprocessor",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_add_valuerangeprocessor" "', argument " "1"" of type '" "Xapian::QueryParser *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[62], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "QueryParser_add_valuerangeprocessor" "', argument " "2"" of type '" "Xapian::ValueRangeProcessor *""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::ValueRangeProcessor * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_valuerangeprocessor(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser_get_corrected_query_string(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser_get_corrected_query_string" "', argument " "1"" of type '" "Xapian::QueryParser const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::QueryParser const *)arg1)->get_corrected_query_string();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_QueryParser___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::QueryParser *arg1 = (Xapian::QueryParser *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[41], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "QueryParser___str__" "', argument " "1"" of type '" "Xapian::QueryParser const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::QueryParser * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::QueryParser const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *QueryParser_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[41], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *QueryParser_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_sortable_serialise(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "sortable_serialise" "', argument " "1"" of type '" "double""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< double >(val1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::sortable_serialise(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_sortable_unserialise(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  PyObject *swig_obj[1] ;
+  double result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "sortable_unserialise" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "sortable_unserialise" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (double)Xapian::sortable_unserialise((std::string const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = PyFloat_FromDouble(static_cast< double >(result));
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_StemImplementation(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::StemImplementation *arg1 = (Xapian::StemImplementation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[51], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_StemImplementation" "', argument " "1"" of type '" "Xapian::StemImplementation *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::StemImplementation * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_StemImplementation___call__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::StemImplementation *arg1 = (Xapian::StemImplementation *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  std::string result;
+  if (!SWIG_Python_UnpackTuple(args,"StemImplementation___call__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[51], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "StemImplementation___call__" "', argument " "1"" of type '" "Xapian::StemImplementation *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::StemImplementation * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "StemImplementation___call__" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "StemImplementation___call__" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::StemImplementation::operator ()");
+        } else {
+          result = (arg1)->operator ()((std::string const &)*arg2);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_StemImplementation___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::StemImplementation *arg1 = (Xapian::StemImplementation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[51], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "StemImplementation___str__" "', argument " "1"" of type '" "Xapian::StemImplementation const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::StemImplementation * >(argp1);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::StemImplementation::get_description");
+        } else {
+          result = ((Xapian::StemImplementation const *)arg1)->get_description();
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_StemImplementation(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::StemImplementation *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  arg1 = swig_obj[0];
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        if ( arg1 != (&_Py_NoneStruct) ) {
+          result = (Xapian::StemImplementation *)new SwigDirector_StemImplementation(arg1);
+        } else {
+          SWIG_Python_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor");
+          goto fail;
+        }
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[51], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_disown_StemImplementation(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::StemImplementation *arg1 = (Xapian::StemImplementation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[51], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "disown_StemImplementation" "', argument " "1"" of type '" "Xapian::StemImplementation *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::StemImplementation * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      Swig::Director *director = dynamic_cast<Swig::Director *>(arg1);
+      if (director) director->swig_disown();
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *StemImplementation_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[51], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *StemImplementation_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Stem__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  int res1 = ((0)) ;
+  Xapian::Stem *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_anystring_as_ptr(&(swig_obj[0]), &ptr);
+    if (!(res1 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Stem" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "new_Stem" "', argument " "1"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg1 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Stem *)new Xapian::Stem((std::string const &)*arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[50], ((0x1 << 1) | 0x1) | 0);
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return resultobj;
+fail:
+  if (((res1 >= 0) && (res1 & ((1 << 8) << 1)))) delete arg1;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Stem__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::StemImplementation *arg1 = (Xapian::StemImplementation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Xapian::Stem *result = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[51], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "new_Stem" "', argument " "1"" of type '" "Xapian::StemImplementation *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::StemImplementation * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Stem *)new Xapian::Stem(arg1);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[50], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Stem(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[2];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"new_Stem",0,1,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    int _v = 0;
+    {
+      void *vptr = 0;
+      int res = SWIG_Python_ConvertPtrAndOwn(argv[0], &vptr, swig_types[51], 0, 0);
+      _v = ((res >= 0) ? 1 : 0);
+    }
+    if (!_v) goto check_1;
+    return _wrap_new_Stem__SWIG_1(self, argc, argv);
+  }
+check_1:
+  if (argc == 1) {
+    return _wrap_new_Stem__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_Stem'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Xapian::Stem(std::string const &)\n"
+    "    Xapian::Stem(Xapian::StemImplementation *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_Stem(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Stem *arg1 = (Xapian::Stem *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[50], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_Stem" "', argument " "1"" of type '" "Xapian::Stem *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Stem * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Stem___call__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Stem *arg1 = (Xapian::Stem *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  std::string result;
+  if (!SWIG_Python_UnpackTuple(args,"Stem___call__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[50], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Stem___call__" "', argument " "1"" of type '" "Xapian::Stem const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Stem * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Stem___call__" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Stem___call__" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Stem const *)arg1)->operator ()((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Stem___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Stem *arg1 = (Xapian::Stem *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[50], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Stem___str__" "', argument " "1"" of type '" "Xapian::Stem const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Stem * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::Stem const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Stem_get_available_languages(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string result;
+  if (!SWIG_Python_UnpackTuple(args,"Stem_get_available_languages",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = Xapian::Stem::get_available_languages();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *Stem_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[50], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *Stem_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_TermGenerator(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"new_TermGenerator",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::TermGenerator *)new Xapian::TermGenerator();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[54], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_TermGenerator(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_TermGenerator" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_set_stemmer(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  Xapian::Stem *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"TermGenerator_set_stemmer",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_set_stemmer" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[50], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermGenerator_set_stemmer" "', argument " "2"" of type '" "Xapian::Stem const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermGenerator_set_stemmer" "', argument " "2"" of type '" "Xapian::Stem const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Stem * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_stemmer((Xapian::Stem const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_set_stopper__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  Xapian::Stopper *arg2 = (Xapian::Stopper *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_set_stopper" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[52], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermGenerator_set_stopper" "', argument " "2"" of type '" "Xapian::Stopper const *""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Stopper * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_stopper((Xapian::Stopper const *)arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_set_stopper__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_set_stopper" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_stopper();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_set_stopper(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"TermGenerator_set_stopper",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_TermGenerator_set_stopper__SWIG_1(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_TermGenerator_set_stopper__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'TermGenerator_set_stopper'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_stopper(Xapian::TermGenerator *,Xapian::Stopper const *)\n"
+    "    set_stopper(Xapian::TermGenerator *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_set_document(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  Xapian::Document *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"TermGenerator_set_document",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_set_document" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[15], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermGenerator_set_document" "', argument " "2"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermGenerator_set_document" "', argument " "2"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Document * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_document((Xapian::Document const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_get_document(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::Document *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_get_document" "', argument " "1"" of type '" "Xapian::TermGenerator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::Document *) &((Xapian::TermGenerator const *)arg1)->get_document();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[15], 0 | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_set_database(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  Xapian::WritableDatabase *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"TermGenerator_set_database",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_set_database" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[66], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermGenerator_set_database" "', argument " "2"" of type '" "Xapian::WritableDatabase const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermGenerator_set_database" "', argument " "2"" of type '" "Xapian::WritableDatabase const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::WritableDatabase * >(argp2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_database((Xapian::WritableDatabase const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_set_flags__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  Xapian::TermGenerator::flags arg2 ;
+  Xapian::TermGenerator::flags arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  Xapian::TermGenerator::flags result;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_set_flags" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "TermGenerator_set_flags" "', argument " "2"" of type '" "Xapian::TermGenerator::flags""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::TermGenerator::flags >(val2);
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "TermGenerator_set_flags" "', argument " "3"" of type '" "Xapian::TermGenerator::flags""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::TermGenerator::flags >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::TermGenerator::flags)(arg1)->set_flags(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_set_flags__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  Xapian::TermGenerator::flags arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  Xapian::TermGenerator::flags result;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_set_flags" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "TermGenerator_set_flags" "', argument " "2"" of type '" "Xapian::TermGenerator::flags""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::TermGenerator::flags >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::TermGenerator::flags)(arg1)->set_flags(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_int(static_cast< int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_set_flags(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"TermGenerator_set_flags",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_TermGenerator_set_flags__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_TermGenerator_set_flags__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'TermGenerator_set_flags'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    set_flags(Xapian::TermGenerator *,Xapian::TermGenerator::flags,Xapian::TermGenerator::flags)\n"
+    "    set_flags(Xapian::TermGenerator *,Xapian::TermGenerator::flags)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_index_text__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::termcount arg3 ;
+  std::string *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  int res4 = ((0)) ;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_index_text" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermGenerator_index_text" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermGenerator_index_text" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "TermGenerator_index_text" "', argument " "3"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termcount >(val3);
+  {
+    std::string *ptr = (std::string *)0;
+    res4 = SWIG_anystring_as_ptr(&(swig_obj[3]), &ptr);
+    if (!(res4 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res4 != (-1)) ? res4 : -5)), "in method '" "TermGenerator_index_text" "', argument " "4"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermGenerator_index_text" "', argument " "4"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg4 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->index_text((std::string const &)*arg2,arg3,(std::string const &)*arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res4 >= 0) && (res4 & ((1 << 8) << 1)))) delete arg4;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res4 >= 0) && (res4 & ((1 << 8) << 1)))) delete arg4;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_index_text__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::termcount arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_index_text" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermGenerator_index_text" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermGenerator_index_text" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "TermGenerator_index_text" "', argument " "3"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termcount >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->index_text((std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_index_text__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_index_text" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermGenerator_index_text" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermGenerator_index_text" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->index_text((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_index_text(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"TermGenerator_index_text",0,4,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_TermGenerator_index_text__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_TermGenerator_index_text__SWIG_1(self, argc, argv);
+  }
+  if (argc == 4) {
+    return _wrap_TermGenerator_index_text__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'TermGenerator_index_text'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    index_text(Xapian::TermGenerator *,std::string const &,Xapian::termcount,std::string const &)\n"
+    "    index_text(Xapian::TermGenerator *,std::string const &,Xapian::termcount)\n"
+    "    index_text(Xapian::TermGenerator *,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_index_text_without_positions__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::termcount arg3 ;
+  std::string *arg4 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  int res4 = ((0)) ;
+  if ((nobjs < 4) || (nobjs > 4)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_index_text_without_positions" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermGenerator_index_text_without_positions" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermGenerator_index_text_without_positions" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "TermGenerator_index_text_without_positions" "', argument " "3"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termcount >(val3);
+  {
+    std::string *ptr = (std::string *)0;
+    res4 = SWIG_anystring_as_ptr(&(swig_obj[3]), &ptr);
+    if (!(res4 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res4 != (-1)) ? res4 : -5)), "in method '" "TermGenerator_index_text_without_positions" "', argument " "4"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermGenerator_index_text_without_positions" "', argument " "4"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg4 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->index_text_without_positions((std::string const &)*arg2,arg3,(std::string const &)*arg4);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res4 >= 0) && (res4 & ((1 << 8) << 1)))) delete arg4;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res4 >= 0) && (res4 & ((1 << 8) << 1)))) delete arg4;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_index_text_without_positions__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  std::string *arg2 = 0 ;
+  Xapian::termcount arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  unsigned int val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_index_text_without_positions" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermGenerator_index_text_without_positions" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermGenerator_index_text_without_positions" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "TermGenerator_index_text_without_positions" "', argument " "3"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< Xapian::termcount >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->index_text_without_positions((std::string const &)*arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_index_text_without_positions__SWIG_2(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_index_text_without_positions" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "TermGenerator_index_text_without_positions" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "TermGenerator_index_text_without_positions" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->index_text_without_positions((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_index_text_without_positions(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[5];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"TermGenerator_index_text_without_positions",0,4,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_TermGenerator_index_text_without_positions__SWIG_2(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_TermGenerator_index_text_without_positions__SWIG_1(self, argc, argv);
+  }
+  if (argc == 4) {
+    return _wrap_TermGenerator_index_text_without_positions__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'TermGenerator_index_text_without_positions'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    index_text_without_positions(Xapian::TermGenerator *,std::string const &,Xapian::termcount,std::string const &)\n"
+    "    index_text_without_positions(Xapian::TermGenerator *,std::string const &,Xapian::termcount)\n"
+    "    index_text_without_positions(Xapian::TermGenerator *,std::string const &)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_increase_termpos__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  Xapian::termcount arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_increase_termpos" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "TermGenerator_increase_termpos" "', argument " "2"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termcount >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->increase_termpos(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_increase_termpos__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  if ((nobjs < 1) || (nobjs > 1)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_increase_termpos" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->increase_termpos();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_increase_termpos(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[3];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"TermGenerator_increase_termpos",0,2,argv))) goto fail;
+  --argc;
+  if (argc == 1) {
+    return _wrap_TermGenerator_increase_termpos__SWIG_1(self, argc, argv);
+  }
+  if (argc == 2) {
+    return _wrap_TermGenerator_increase_termpos__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'TermGenerator_increase_termpos'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    increase_termpos(Xapian::TermGenerator *,Xapian::termcount)\n"
+    "    increase_termpos(Xapian::TermGenerator *)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_get_termpos(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::termcount result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_get_termpos" "', argument " "1"" of type '" "Xapian::TermGenerator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::termcount)((Xapian::TermGenerator const *)arg1)->get_termpos();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator_set_termpos(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  Xapian::termcount arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"TermGenerator_set_termpos",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator_set_termpos" "', argument " "1"" of type '" "Xapian::TermGenerator *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "TermGenerator_set_termpos" "', argument " "2"" of type '" "Xapian::termcount""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::termcount >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_termpos(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_TermGenerator___str__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::TermGenerator *arg1 = (Xapian::TermGenerator *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[54], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "TermGenerator___str__" "', argument " "1"" of type '" "Xapian::TermGenerator const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::TermGenerator * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = ((Xapian::TermGenerator const *)arg1)->get_description();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *TermGenerator_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[54], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *TermGenerator_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_KeyMaker___call__(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::KeyMaker *arg1 = (Xapian::KeyMaker *) 0 ;
+  Xapian::Document *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  std::string result;
+  if (!SWIG_Python_UnpackTuple(args,"KeyMaker___call__",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[26], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "KeyMaker___call__" "', argument " "1"" of type '" "Xapian::KeyMaker const *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::KeyMaker * >(argp1);
+  res2 = SWIG_Python_ConvertPtrAndOwn(swig_obj[1], &argp2, swig_types[15], 0 | 0, 0);
+  if (!(res2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "KeyMaker___call__" "', argument " "2"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  if (!argp2) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "KeyMaker___call__" "', argument " "2"" of type '" "Xapian::Document const &""'"); goto fail; } while(0);
+  }
+  arg2 = reinterpret_cast< Xapian::Document * >(argp2);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          Swig::DirectorPureVirtualException::raise("Xapian::KeyMaker::operator ()");
+        } else {
+          result = ((Xapian::KeyMaker const *)arg1)->operator ()((Xapian::Document const &)*arg2);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_KeyMaker(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::KeyMaker *arg1 = (Xapian::KeyMaker *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[26], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_KeyMaker" "', argument " "1"" of type '" "Xapian::KeyMaker *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::KeyMaker * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_KeyMaker(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::KeyMaker *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  arg1 = swig_obj[0];
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        if ( arg1 != (&_Py_NoneStruct) ) {
+          result = (Xapian::KeyMaker *)new SwigDirector_KeyMaker(arg1);
+        } else {
+          SWIG_Python_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor");
+          goto fail;
+        }
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[26], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_disown_KeyMaker(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::KeyMaker *arg1 = (Xapian::KeyMaker *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[26], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "disown_KeyMaker" "', argument " "1"" of type '" "Xapian::KeyMaker *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::KeyMaker * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      Swig::Director *director = dynamic_cast<Swig::Director *>(arg1);
+      if (director) director->swig_disown();
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *KeyMaker_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[26], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *KeyMaker_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_MultiValueKeyMaker(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MultiValueKeyMaker *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"new_MultiValueKeyMaker",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::MultiValueKeyMaker *)new Xapian::MultiValueKeyMaker();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[32], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MultiValueKeyMaker_add_value__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::MultiValueKeyMaker *arg1 = (Xapian::MultiValueKeyMaker *) 0 ;
+  Xapian::valueno arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[32], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MultiValueKeyMaker_add_value" "', argument " "1"" of type '" "Xapian::MultiValueKeyMaker *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MultiValueKeyMaker * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "MultiValueKeyMaker_add_value" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "MultiValueKeyMaker_add_value" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_value(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MultiValueKeyMaker_add_value__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::MultiValueKeyMaker *arg1 = (Xapian::MultiValueKeyMaker *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[32], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MultiValueKeyMaker_add_value" "', argument " "1"" of type '" "Xapian::MultiValueKeyMaker *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MultiValueKeyMaker * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "MultiValueKeyMaker_add_value" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_value(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MultiValueKeyMaker_add_value(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"MultiValueKeyMaker_add_value",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_MultiValueKeyMaker_add_value__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_MultiValueKeyMaker_add_value__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'MultiValueKeyMaker_add_value'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    add_value(Xapian::MultiValueKeyMaker *,Xapian::valueno,bool)\n"
+    "    add_value(Xapian::MultiValueKeyMaker *,Xapian::valueno)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_MultiValueKeyMaker(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MultiValueKeyMaker *arg1 = (Xapian::MultiValueKeyMaker *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[32], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_MultiValueKeyMaker" "', argument " "1"" of type '" "Xapian::MultiValueKeyMaker *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MultiValueKeyMaker * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *MultiValueKeyMaker_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[32], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *MultiValueKeyMaker_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_Sorter(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Sorter *arg1 = (Xapian::Sorter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[49], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_Sorter" "', argument " "1"" of type '" "Xapian::Sorter *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Sorter * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *Sorter_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[49], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_MultiValueSorter(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MultiValueSorter *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"new_MultiValueSorter",0,0,0)) goto fail;
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::MultiValueSorter *)new Xapian::MultiValueSorter();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[33], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MultiValueSorter_add__SWIG_0(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::MultiValueSorter *arg1 = (Xapian::MultiValueSorter *) 0 ;
+  Xapian::valueno arg2 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  if ((nobjs < 3) || (nobjs > 3)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[33], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MultiValueSorter_add" "', argument " "1"" of type '" "Xapian::MultiValueSorter *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MultiValueSorter * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "MultiValueSorter_add" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  ecode3 = SWIG_AsVal_bool(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "MultiValueSorter_add" "', argument " "3"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< bool >(val3);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add(arg2,arg3);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MultiValueSorter_add__SWIG_1(PyObject *, int nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Xapian::MultiValueSorter *arg1 = (Xapian::MultiValueSorter *) 0 ;
+  Xapian::valueno arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  unsigned int val2 ;
+  int ecode2 = 0 ;
+  if ((nobjs < 2) || (nobjs > 2)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[33], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "MultiValueSorter_add" "', argument " "1"" of type '" "Xapian::MultiValueSorter *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MultiValueSorter * >(argp1);
+  ecode2 = SWIG_AsVal_unsigned_SS_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "MultiValueSorter_add" "', argument " "2"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::valueno >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_MultiValueSorter_add(PyObject *self, PyObject *args) {
+  int argc;
+  PyObject *argv[4];
+  if (!(argc = SWIG_Python_UnpackTuple(args,"MultiValueSorter_add",0,3,argv))) goto fail;
+  --argc;
+  if (argc == 2) {
+    return _wrap_MultiValueSorter_add__SWIG_1(self, argc, argv);
+  }
+  if (argc == 3) {
+    return _wrap_MultiValueSorter_add__SWIG_0(self, argc, argv);
+  }
+fail:
+  SWIG_Python_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'MultiValueSorter_add'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    add(Xapian::MultiValueSorter *,Xapian::valueno,bool)\n"
+    "    add(Xapian::MultiValueSorter *,Xapian::valueno)\n");
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_MultiValueSorter(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::MultiValueSorter *arg1 = (Xapian::MultiValueSorter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[33], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_MultiValueSorter" "', argument " "1"" of type '" "Xapian::MultiValueSorter *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::MultiValueSorter * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *MultiValueSorter_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[33], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *MultiValueSorter_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_ValueSetMatchDecider(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::valueno arg1 ;
+  bool arg2 ;
+  unsigned int val1 ;
+  int ecode1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  Xapian::ValueSetMatchDecider *result = 0 ;
+  if (!SWIG_Python_UnpackTuple(args,"new_ValueSetMatchDecider",2,2,swig_obj)) goto fail;
+  ecode1 = SWIG_AsVal_unsigned_SS_int(swig_obj[0], &val1);
+  if (!(ecode1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode1 != (-1)) ? ecode1 : -5)), "in method '" "new_ValueSetMatchDecider" "', argument " "1"" of type '" "Xapian::valueno""'"); goto fail; } while(0);
+  }
+  arg1 = static_cast< Xapian::valueno >(val1);
+  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "new_ValueSetMatchDecider" "', argument " "2"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< bool >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        result = (Xapian::ValueSetMatchDecider *)new Xapian::ValueSetMatchDecider(arg1,arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[63], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueSetMatchDecider_add_value(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueSetMatchDecider *arg1 = (Xapian::ValueSetMatchDecider *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"ValueSetMatchDecider_add_value",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[63], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueSetMatchDecider_add_value" "', argument " "1"" of type '" "Xapian::ValueSetMatchDecider *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueSetMatchDecider * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "ValueSetMatchDecider_add_value" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "ValueSetMatchDecider_add_value" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_value((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_ValueSetMatchDecider_remove_value(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueSetMatchDecider *arg1 = (Xapian::ValueSetMatchDecider *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"ValueSetMatchDecider_remove_value",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[63], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "ValueSetMatchDecider_remove_value" "', argument " "1"" of type '" "Xapian::ValueSetMatchDecider *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueSetMatchDecider * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "ValueSetMatchDecider_remove_value" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "ValueSetMatchDecider_remove_value" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->remove_value((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_ValueSetMatchDecider(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::ValueSetMatchDecider *arg1 = (Xapian::ValueSetMatchDecider *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[63], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_ValueSetMatchDecider" "', argument " "1"" of type '" "Xapian::ValueSetMatchDecider *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::ValueSetMatchDecider * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *ValueSetMatchDecider_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[63], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *ValueSetMatchDecider_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_new_Compactor(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  PyObject *arg1 = (PyObject *) 0 ;
+  PyObject *swig_obj[1] ;
+  Xapian::Compactor *result = 0 ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  arg1 = swig_obj[0];
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        if ( arg1 != (&_Py_NoneStruct) ) {
+          result = (Xapian::Compactor *)new SwigDirector_Compactor(arg1);
+        } else {
+          result = (Xapian::Compactor *)new Xapian::Compactor();
+        }
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Python_NewPointerObj(const_cast< void * >(static_cast< const void * >(result)), swig_types[3], ((0x1 << 1) | 0x1) | 0);
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_delete_Compactor(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Compactor *arg1 = (Xapian::Compactor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[3], 0x1 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "delete_Compactor" "', argument " "1"" of type '" "Xapian::Compactor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Compactor * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        delete arg1;
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Compactor_set_block_size(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Compactor *arg1 = (Xapian::Compactor *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Compactor_set_block_size",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[3], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Compactor_set_block_size" "', argument " "1"" of type '" "Xapian::Compactor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Compactor * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Compactor_set_block_size" "', argument " "2"" of type '" "size_t""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< size_t >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_block_size(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Compactor_set_renumber(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Compactor *arg1 = (Xapian::Compactor *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Compactor_set_renumber",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[3], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Compactor_set_renumber" "', argument " "1"" of type '" "Xapian::Compactor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Compactor * >(argp1);
+  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Compactor_set_renumber" "', argument " "2"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< bool >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_renumber(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Compactor_set_multipass(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Compactor *arg1 = (Xapian::Compactor *) 0 ;
+  bool arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Compactor_set_multipass",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[3], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Compactor_set_multipass" "', argument " "1"" of type '" "Xapian::Compactor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Compactor * >(argp1);
+  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Compactor_set_multipass" "', argument " "2"" of type '" "bool""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< bool >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_multipass(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Compactor_set_compaction_level(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Compactor *arg1 = (Xapian::Compactor *) 0 ;
+  Xapian::Compactor::compaction_level arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Compactor_set_compaction_level",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[3], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Compactor_set_compaction_level" "', argument " "1"" of type '" "Xapian::Compactor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Compactor * >(argp1);
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!(ecode2 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode2 != (-1)) ? ecode2 : -5)), "in method '" "Compactor_set_compaction_level" "', argument " "2"" of type '" "Xapian::Compactor::compaction_level""'"); goto fail; } while(0);
+  }
+  arg2 = static_cast< Xapian::Compactor::compaction_level >(val2);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_compaction_level(arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Compactor_set_destdir(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Compactor *arg1 = (Xapian::Compactor *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Compactor_set_destdir",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[3], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Compactor_set_destdir" "', argument " "1"" of type '" "Xapian::Compactor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Compactor * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Compactor_set_destdir" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Compactor_set_destdir" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->set_destdir((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Compactor_add_source(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Compactor *arg1 = (Xapian::Compactor *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  PyObject *swig_obj[2] ;
+  if (!SWIG_Python_UnpackTuple(args,"Compactor_add_source",2,2,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[3], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Compactor_add_source" "', argument " "1"" of type '" "Xapian::Compactor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Compactor * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Compactor_add_source" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Compactor_add_source" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->add_source((std::string const &)*arg2);
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Compactor_compact(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Compactor *arg1 = (Xapian::Compactor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[3], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Compactor_compact" "', argument " "1"" of type '" "Xapian::Compactor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Compactor * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      try {
+        (arg1)->compact();
+      } catch (...) {
+        _swig_thread_allow.end();
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Compactor_set_status(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Compactor *arg1 = (Xapian::Compactor *) 0 ;
+  std::string *arg2 = 0 ;
+  std::string *arg3 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  int res3 = ((0)) ;
+  PyObject *swig_obj[3] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  if (!SWIG_Python_UnpackTuple(args,"Compactor_set_status",3,3,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[3], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Compactor_set_status" "', argument " "1"" of type '" "Xapian::Compactor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Compactor * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Compactor_set_status" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Compactor_set_status" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  {
+    std::string *ptr = (std::string *)0;
+    res3 = SWIG_anystring_as_ptr(&(swig_obj[2]), &ptr);
+    if (!(res3 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res3 != (-1)) ? res3 : -5)), "in method '" "Compactor_set_status" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Compactor_set_status" "', argument " "3"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg3 = ptr;
+  }
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          (arg1)->Xapian::Compactor::set_status((std::string const &)*arg2,(std::string const &)*arg3);
+        } else {
+          (arg1)->set_status((std::string const &)*arg2,(std::string const &)*arg3);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_Py_Void();
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  if (((res3 >= 0) && (res3 & ((1 << 8) << 1)))) delete arg3;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_Compactor_resolve_duplicate_metadata(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Compactor *arg1 = (Xapian::Compactor *) 0 ;
+  std::string *arg2 = 0 ;
+  size_t arg3 ;
+  std::string *arg4 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = ((0)) ;
+  size_t val3 ;
+  int ecode3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject *swig_obj[4] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  std::string result;
+  if (!SWIG_Python_UnpackTuple(args,"Compactor_resolve_duplicate_metadata",4,4,swig_obj)) goto fail;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[3], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "Compactor_resolve_duplicate_metadata" "', argument " "1"" of type '" "Xapian::Compactor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Compactor * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_anystring_as_ptr(&(swig_obj[1]), &ptr);
+    if (!(res2 >= 0)) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res2 != (-1)) ? res2 : -5)), "in method '" "Compactor_resolve_duplicate_metadata" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    if (!ptr) {
+      do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(-9), "invalid null reference " "in method '" "Compactor_resolve_duplicate_metadata" "', argument " "2"" of type '" "std::string const &""'"); goto fail; } while(0);
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_size_t(swig_obj[2], &val3);
+  if (!(ecode3 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((ecode3 != (-1)) ? ecode3 : -5)), "in method '" "Compactor_resolve_duplicate_metadata" "', argument " "3"" of type '" "size_t""'"); goto fail; } while(0);
+  }
+  arg3 = static_cast< size_t >(val3);
+  res4 = SWIG_Python_ConvertPtrAndOwn(swig_obj[3], &argp4, swig_types[77], 0 | 0, 0);
+  if (!(res4 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res4 != (-1)) ? res4 : -5)), "in method '" "Compactor_resolve_duplicate_metadata" "', argument " "4"" of type '" "std::string const []""'"); goto fail; } while(0);
+  }
+  arg4 = reinterpret_cast< std::string * >(argp4);
+  director = dynamic_cast<Swig::Director*>(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    {
+      try {
+        if (upcall) {
+          result = (arg1)->Xapian::Compactor::resolve_duplicate_metadata((std::string const &)*arg2,arg3,(std::string const (*))arg4);
+        } else {
+          result = (arg1)->resolve_duplicate_metadata((std::string const &)*arg2,arg3,(std::string const (*))arg4);
+        }
+      } catch (...) {
+        Xapian::SetPythonException();
+        goto fail;
+      }
+    }
+  } catch (Swig::DirectorException&) {
+    goto fail;
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return resultobj;
+fail:
+  if (((res2 >= 0) && (res2 & ((1 << 8) << 1)))) delete arg2;
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *_wrap_disown_Compactor(PyObject *, PyObject *args) {
+  PyObject *resultobj = 0;
+  Xapian::Compactor *arg1 = (Xapian::Compactor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  if (!args) goto fail;
+  swig_obj[0] = args;
+  res1 = SWIG_Python_ConvertPtrAndOwn(swig_obj[0], &argp1, swig_types[3], 0 | 0, 0);
+  if (!(res1 >= 0)) {
+    do { SWIG_Python_SetErrorMsg(SWIG_Python_ErrorType(((res1 != (-1)) ? res1 : -5)), "in method '" "disown_Compactor" "', argument " "1"" of type '" "Xapian::Compactor *""'"); goto fail; } while(0);
+  }
+  arg1 = reinterpret_cast< Xapian::Compactor * >(argp1);
+  {
+    SWIG_Python_Thread_Allow _swig_thread_allow;
+    {
+      Swig::Director *director = dynamic_cast<Swig::Director *>(arg1);
+      if (director) director->swig_disown();
+    }
+    _swig_thread_allow.end();
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return __null;
+}
+static __attribute__ ((__unused__)) PyObject *Compactor_swigregister(PyObject *, PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return __null;
+  SWIG_TypeNewClientData(swig_types[3], SwigPyClientData_New(obj));
+  return SWIG_Py_Void();
+}
+static __attribute__ ((__unused__)) PyObject *Compactor_swiginit(PyObject *, PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+static PyMethodDef SwigMethods[] = {
+  { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, 0x0008, __null},
+  { (char *)"delete_SwigPyIterator", (PyCFunction)_wrap_delete_SwigPyIterator, 0x0008, __null},
+  { (char *)"SwigPyIterator_value", (PyCFunction)_wrap_SwigPyIterator_value, 0x0008, __null},
+  { (char *)"SwigPyIterator_incr", _wrap_SwigPyIterator_incr, 0x0001, __null},
+  { (char *)"SwigPyIterator_decr", _wrap_SwigPyIterator_decr, 0x0001, __null},
+  { (char *)"SwigPyIterator_distance", _wrap_SwigPyIterator_distance, 0x0001, __null},
+  { (char *)"SwigPyIterator_equal", _wrap_SwigPyIterator_equal, 0x0001, __null},
+  { (char *)"SwigPyIterator_copy", (PyCFunction)_wrap_SwigPyIterator_copy, 0x0008, __null},
+  { (char *)"SwigPyIterator_next", (PyCFunction)_wrap_SwigPyIterator_next, 0x0008, __null},
+  { (char *)"SwigPyIterator___next__", (PyCFunction)_wrap_SwigPyIterator___next__, 0x0008, __null},
+  { (char *)"SwigPyIterator_previous", (PyCFunction)_wrap_SwigPyIterator_previous, 0x0008, __null},
+  { (char *)"SwigPyIterator_advance", _wrap_SwigPyIterator_advance, 0x0001, __null},
+  { (char *)"SwigPyIterator___eq__", _wrap_SwigPyIterator___eq__, 0x0001, __null},
+  { (char *)"SwigPyIterator___ne__", _wrap_SwigPyIterator___ne__, 0x0001, __null},
+  { (char *)"SwigPyIterator___iadd__", _wrap_SwigPyIterator___iadd__, 0x0001, __null},
+  { (char *)"SwigPyIterator___isub__", _wrap_SwigPyIterator___isub__, 0x0001, __null},
+  { (char *)"SwigPyIterator___add__", _wrap_SwigPyIterator___add__, 0x0001, __null},
+  { (char *)"SwigPyIterator___sub__", _wrap_SwigPyIterator___sub__, 0x0001, __null},
+  { (char *)"SwigPyIterator_swigregister", SwigPyIterator_swigregister, 0x0001, __null},
+  { (char *)"Error_get_type", (PyCFunction)_wrap_Error_get_type, 0x0008, (char *)"\n"
+  "The type of this error (e.g. \"DocNotFoundError\".).\n"
+  "\n"
+  "const char* Xapian::Error::get_type() const \n"
+  ""},
+  { (char *)"Error_get_msg", (PyCFunction)_wrap_Error_get_msg, 0x0008, (char *)"\n"
+  "Message giving details of the error, intended for human consumption.\n"
+  "\n"
+  "const std::string& Xapian::Error::get_msg() const \n"
+  ""},
+  { (char *)"Error_get_context", (PyCFunction)_wrap_Error_get_context, 0x0008, (char *)"\n"
+  "Optional context information.\n"
+  "\n"
+  "const std::string& Xapian::Error::get_context() const\n"
+  "\n"
+  "This context is intended for use by Xapian::ErrorHandler (for example\n"
+  "so it can know which remote server is unreliable and report the\n"
+  "problem and remove that server from those being searched). But it's\n"
+  "typically a plain-text string, and so also fit for human consumption.\n"
+  "\n"
+  ""},
+  { (char *)"Error_get_error_string", (PyCFunction)_wrap_Error_get_error_string, 0x0008, (char *)"\n"
+  "Returns any system error string associated with this exception.\n"
+  "\n"
+  "const char* Xapian::Error::get_error_string() const\n"
+  "\n"
+  "The system error string may come from errno, h_errno (on UNIX), or\n"
+  "GetLastError() (on MS Windows). If there is no associated system error\n"
+  "string, NULL is returned. \n"
+  ""},
+  { (char *)"Error___str__", (PyCFunction)_wrap_Error___str__, 0x0008, __null},
+  { (char *)"delete_Error", (PyCFunction)_wrap_delete_Error, 0x0008, __null},
+  { (char *)"Error_swigregister", Error_swigregister, 0x0001, __null},
+  { (char *)"delete_LogicError", (PyCFunction)_wrap_delete_LogicError, 0x0008, __null},
+  { (char *)"LogicError_swigregister", LogicError_swigregister, 0x0001, __null},
+  { (char *)"delete_RuntimeError", (PyCFunction)_wrap_delete_RuntimeError, 0x0008, __null},
+  { (char *)"RuntimeError_swigregister", RuntimeError_swigregister, 0x0001, __null},
+  { (char *)"new_AssertionError", _wrap_new_AssertionError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::AssertionError::AssertionError(const std::string &msg_, int\n"
+  "errno_) \n"
+  ""},
+  { (char *)"delete_AssertionError", (PyCFunction)_wrap_delete_AssertionError, 0x0008, __null},
+  { (char *)"AssertionError_swigregister", AssertionError_swigregister, 0x0001, __null},
+  { (char *)"AssertionError_swiginit", AssertionError_swiginit, 0x0001, __null},
+  { (char *)"new_InvalidArgumentError", _wrap_new_InvalidArgumentError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::InvalidArgumentError::InvalidArgumentError(const std::string\n"
+  "&msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_InvalidArgumentError", (PyCFunction)_wrap_delete_InvalidArgumentError, 0x0008, __null},
+  { (char *)"InvalidArgumentError_swigregister", InvalidArgumentError_swigregister, 0x0001, __null},
+  { (char *)"InvalidArgumentError_swiginit", InvalidArgumentError_swiginit, 0x0001, __null},
+  { (char *)"new_InvalidOperationError", _wrap_new_InvalidOperationError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::InvalidOperationError::InvalidOperationError(const std::string\n"
+  "&msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_InvalidOperationError", (PyCFunction)_wrap_delete_InvalidOperationError, 0x0008, __null},
+  { (char *)"InvalidOperationError_swigregister", InvalidOperationError_swigregister, 0x0001, __null},
+  { (char *)"InvalidOperationError_swiginit", InvalidOperationError_swiginit, 0x0001, __null},
+  { (char *)"new_UnimplementedError", _wrap_new_UnimplementedError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::UnimplementedError::UnimplementedError(const std::string\n"
+  "&msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_UnimplementedError", (PyCFunction)_wrap_delete_UnimplementedError, 0x0008, __null},
+  { (char *)"UnimplementedError_swigregister", UnimplementedError_swigregister, 0x0001, __null},
+  { (char *)"UnimplementedError_swiginit", UnimplementedError_swiginit, 0x0001, __null},
+  { (char *)"new_DatabaseError", _wrap_new_DatabaseError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::DatabaseError::DatabaseError(const std::string &msg_, int\n"
+  "errno_) \n"
+  ""},
+  { (char *)"delete_DatabaseError", (PyCFunction)_wrap_delete_DatabaseError, 0x0008, __null},
+  { (char *)"DatabaseError_swigregister", DatabaseError_swigregister, 0x0001, __null},
+  { (char *)"DatabaseError_swiginit", DatabaseError_swiginit, 0x0001, __null},
+  { (char *)"new_DatabaseCorruptError", _wrap_new_DatabaseCorruptError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::DatabaseCorruptError::DatabaseCorruptError(const std::string\n"
+  "&msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_DatabaseCorruptError", (PyCFunction)_wrap_delete_DatabaseCorruptError, 0x0008, __null},
+  { (char *)"DatabaseCorruptError_swigregister", DatabaseCorruptError_swigregister, 0x0001, __null},
+  { (char *)"DatabaseCorruptError_swiginit", DatabaseCorruptError_swiginit, 0x0001, __null},
+  { (char *)"new_DatabaseCreateError", _wrap_new_DatabaseCreateError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::DatabaseCreateError::DatabaseCreateError(const std::string\n"
+  "&msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_DatabaseCreateError", (PyCFunction)_wrap_delete_DatabaseCreateError, 0x0008, __null},
+  { (char *)"DatabaseCreateError_swigregister", DatabaseCreateError_swigregister, 0x0001, __null},
+  { (char *)"DatabaseCreateError_swiginit", DatabaseCreateError_swiginit, 0x0001, __null},
+  { (char *)"new_DatabaseLockError", _wrap_new_DatabaseLockError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::DatabaseLockError::DatabaseLockError(const std::string &msg_,\n"
+  "int errno_) \n"
+  ""},
+  { (char *)"delete_DatabaseLockError", (PyCFunction)_wrap_delete_DatabaseLockError, 0x0008, __null},
+  { (char *)"DatabaseLockError_swigregister", DatabaseLockError_swigregister, 0x0001, __null},
+  { (char *)"DatabaseLockError_swiginit", DatabaseLockError_swiginit, 0x0001, __null},
+  { (char *)"new_DatabaseModifiedError", _wrap_new_DatabaseModifiedError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::DatabaseModifiedError::DatabaseModifiedError(const std::string\n"
+  "&msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_DatabaseModifiedError", (PyCFunction)_wrap_delete_DatabaseModifiedError, 0x0008, __null},
+  { (char *)"DatabaseModifiedError_swigregister", DatabaseModifiedError_swigregister, 0x0001, __null},
+  { (char *)"DatabaseModifiedError_swiginit", DatabaseModifiedError_swiginit, 0x0001, __null},
+  { (char *)"new_DatabaseOpeningError", _wrap_new_DatabaseOpeningError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::DatabaseOpeningError::DatabaseOpeningError(const std::string\n"
+  "&msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_DatabaseOpeningError", (PyCFunction)_wrap_delete_DatabaseOpeningError, 0x0008, __null},
+  { (char *)"DatabaseOpeningError_swigregister", DatabaseOpeningError_swigregister, 0x0001, __null},
+  { (char *)"DatabaseOpeningError_swiginit", DatabaseOpeningError_swiginit, 0x0001, __null},
+  { (char *)"new_DatabaseVersionError", _wrap_new_DatabaseVersionError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::DatabaseVersionError::DatabaseVersionError(const std::string\n"
+  "&msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_DatabaseVersionError", (PyCFunction)_wrap_delete_DatabaseVersionError, 0x0008, __null},
+  { (char *)"DatabaseVersionError_swigregister", DatabaseVersionError_swigregister, 0x0001, __null},
+  { (char *)"DatabaseVersionError_swiginit", DatabaseVersionError_swiginit, 0x0001, __null},
+  { (char *)"new_DocNotFoundError", _wrap_new_DocNotFoundError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::DocNotFoundError::DocNotFoundError(const std::string &msg_,\n"
+  "int errno_) \n"
+  ""},
+  { (char *)"delete_DocNotFoundError", (PyCFunction)_wrap_delete_DocNotFoundError, 0x0008, __null},
+  { (char *)"DocNotFoundError_swigregister", DocNotFoundError_swigregister, 0x0001, __null},
+  { (char *)"DocNotFoundError_swiginit", DocNotFoundError_swiginit, 0x0001, __null},
+  { (char *)"new_FeatureUnavailableError", _wrap_new_FeatureUnavailableError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::FeatureUnavailableError::FeatureUnavailableError(const\n"
+  "std::string &msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_FeatureUnavailableError", (PyCFunction)_wrap_delete_FeatureUnavailableError, 0x0008, __null},
+  { (char *)"FeatureUnavailableError_swigregister", FeatureUnavailableError_swigregister, 0x0001, __null},
+  { (char *)"FeatureUnavailableError_swiginit", FeatureUnavailableError_swiginit, 0x0001, __null},
+  { (char *)"new_InternalError", _wrap_new_InternalError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::InternalError::InternalError(const std::string &msg_, int\n"
+  "errno_) \n"
+  ""},
+  { (char *)"delete_InternalError", (PyCFunction)_wrap_delete_InternalError, 0x0008, __null},
+  { (char *)"InternalError_swigregister", InternalError_swigregister, 0x0001, __null},
+  { (char *)"InternalError_swiginit", InternalError_swiginit, 0x0001, __null},
+  { (char *)"new_NetworkError", _wrap_new_NetworkError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::NetworkError::NetworkError(const std::string &msg_, int\n"
+  "errno_) \n"
+  ""},
+  { (char *)"delete_NetworkError", (PyCFunction)_wrap_delete_NetworkError, 0x0008, __null},
+  { (char *)"NetworkError_swigregister", NetworkError_swigregister, 0x0001, __null},
+  { (char *)"NetworkError_swiginit", NetworkError_swiginit, 0x0001, __null},
+  { (char *)"new_NetworkTimeoutError", _wrap_new_NetworkTimeoutError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::NetworkTimeoutError::NetworkTimeoutError(const std::string\n"
+  "&msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_NetworkTimeoutError", (PyCFunction)_wrap_delete_NetworkTimeoutError, 0x0008, __null},
+  { (char *)"NetworkTimeoutError_swigregister", NetworkTimeoutError_swigregister, 0x0001, __null},
+  { (char *)"NetworkTimeoutError_swiginit", NetworkTimeoutError_swiginit, 0x0001, __null},
+  { (char *)"new_QueryParserError", _wrap_new_QueryParserError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::QueryParserError::QueryParserError(const std::string &msg_,\n"
+  "int errno_) \n"
+  ""},
+  { (char *)"delete_QueryParserError", (PyCFunction)_wrap_delete_QueryParserError, 0x0008, __null},
+  { (char *)"QueryParserError_swigregister", QueryParserError_swigregister, 0x0001, __null},
+  { (char *)"QueryParserError_swiginit", QueryParserError_swiginit, 0x0001, __null},
+  { (char *)"new_SerialisationError", _wrap_new_SerialisationError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::SerialisationError::SerialisationError(const std::string\n"
+  "&msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_SerialisationError", (PyCFunction)_wrap_delete_SerialisationError, 0x0008, __null},
+  { (char *)"SerialisationError_swigregister", SerialisationError_swigregister, 0x0001, __null},
+  { (char *)"SerialisationError_swiginit", SerialisationError_swiginit, 0x0001, __null},
+  { (char *)"new_RangeError", _wrap_new_RangeError, 0x0001, (char *)"\n"
+  "Construct from message and errno value.\n"
+  "\n"
+  "Xapian::RangeError::RangeError(const std::string &msg_, int errno_) \n"
+  ""},
+  { (char *)"delete_RangeError", (PyCFunction)_wrap_delete_RangeError, 0x0008, __null},
+  { (char *)"RangeError_swigregister", RangeError_swigregister, 0x0001, __null},
+  { (char *)"RangeError_swiginit", RangeError_swiginit, 0x0001, __null},
+  { (char *)"version_string", (PyCFunction)_wrap_version_string, 0x0004, __null},
+  { (char *)"major_version", (PyCFunction)_wrap_major_version, 0x0004, __null},
+  { (char *)"minor_version", (PyCFunction)_wrap_minor_version, 0x0004, __null},
+  { (char *)"revision", (PyCFunction)_wrap_revision, 0x0004, __null},
+  { (char *)"new_PositionIterator", _wrap_new_PositionIterator, 0x0001, (char *)"\n"
+  "Copying is allowed.\n"
+  "\n"
+  "Xapian::PositionIterator::PositionIterator(const PositionIterator &o)\n"
+  "\n"
+  "The internals are reference counted, so copying is also cheap. \n"
+  ""},
+  { (char *)"delete_PositionIterator", (PyCFunction)_wrap_delete_PositionIterator, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "Xapian::PositionIterator::~PositionIterator() \n"
+  ""},
+  { (char *)"PositionIterator_get_termpos", (PyCFunction)_wrap_PositionIterator_get_termpos, 0x0008, __null},
+  { (char *)"PositionIterator_next", (PyCFunction)_wrap_PositionIterator_next, 0x0008, __null},
+  { (char *)"PositionIterator_equals", _wrap_PositionIterator_equals, 0x0001, __null},
+  { (char *)"PositionIterator_skip_to", _wrap_PositionIterator_skip_to, 0x0001, (char *)"\n"
+  "Advance the iterator to the specified termpos.\n"
+  "\n"
+  "void Xapian::PositionIterator::skip_to(Xapian::termpos pos)\n"
+  "\n"
+  "If the specified termpos isn't in the list, position ourselves on the\n"
+  "first termpos after it (or at_end() if no greater term positions are\n"
+  "present). \n"
+  ""},
+  { (char *)"PositionIterator___str__", (PyCFunction)_wrap_PositionIterator___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::PositionIterator::get_description() const \n"
+  ""},
+  { (char *)"PositionIterator___eq__", _wrap_PositionIterator___eq__, 0x0001, __null},
+  { (char *)"PositionIterator___ne__", _wrap_PositionIterator___ne__, 0x0001, __null},
+  { (char *)"PositionIterator_swigregister", PositionIterator_swigregister, 0x0001, __null},
+  { (char *)"PositionIterator_swiginit", PositionIterator_swiginit, 0x0001, __null},
+  { (char *)"delete_PostingIterator", (PyCFunction)_wrap_delete_PostingIterator, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "Xapian::PostingIterator::~PostingIterator() \n"
+  ""},
+  { (char *)"new_PostingIterator", _wrap_new_PostingIterator, 0x0001, (char *)"\n"
+  "Copying is allowed.\n"
+  "\n"
+  "Xapian::PostingIterator::PostingIterator(const PostingIterator &other)\n"
+  "\n"
+  "The internals are reference counted, so copying is also cheap. \n"
+  ""},
+  { (char *)"PostingIterator_skip_to", _wrap_PostingIterator_skip_to, 0x0001, (char *)"\n"
+  "Advance the iterator to the specified docid.\n"
+  "\n"
+  "void Xapian::PostingIterator::skip_to(Xapian::docid did)\n"
+  "\n"
+  "If the specified docid isn't in the list, position ourselves on the\n"
+  "first document after it (or at_end() if no greater docids are\n"
+  "present). \n"
+  ""},
+  { (char *)"PostingIterator_get_doclength", (PyCFunction)_wrap_PostingIterator_get_doclength, 0x0008, (char *)"\n"
+  "Get the length of the document at the current position in the\n"
+  "postlist.\n"
+  "\n"
+  "Xapian::termcount Xapian::PostingIterator::get_doclength() const\n"
+  "\n"
+  "This information may be stored in the postlist, in which case this\n"
+  "lookup should be extremely fast (indeed, not require further disk\n"
+  "access). If the information is not present in the postlist, it will be\n"
+  "retrieved from the database, at a greater performance cost. \n"
+  ""},
+  { (char *)"PostingIterator_get_wdf", (PyCFunction)_wrap_PostingIterator_get_wdf, 0x0008, (char *)"\n"
+  "Get the within document frequency of the document at the current\n"
+  "position in the postlist.\n"
+  "\n"
+  "Xapian::termcount Xapian::PostingIterator::get_wdf() const \n"
+  ""},
+  { (char *)"PostingIterator_positionlist_begin", (PyCFunction)_wrap_PostingIterator_positionlist_begin, 0x0008, (char *)"\n"
+  "Return PositionIterator pointing to start of positionlist for current\n"
+  "document.\n"
+  "\n"
+  "PositionIterator Xapian::PostingIterator::positionlist_begin() const\n"
+  "\n"
+  ""},
+  { (char *)"PostingIterator_positionlist_end", (PyCFunction)_wrap_PostingIterator_positionlist_end, 0x0008, (char *)"\n"
+  "Return PositionIterator pointing to end of positionlist for current\n"
+  "document.\n"
+  "\n"
+  "PositionIterator Xapian::PostingIterator::positionlist_end() const \n"
+  ""},
+  { (char *)"PostingIterator___str__", (PyCFunction)_wrap_PostingIterator___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::PostingIterator::get_description() const \n"
+  ""},
+  { (char *)"PostingIterator___eq__", _wrap_PostingIterator___eq__, 0x0001, __null},
+  { (char *)"PostingIterator___ne__", _wrap_PostingIterator___ne__, 0x0001, __null},
+  { (char *)"PostingIterator_get_docid", (PyCFunction)_wrap_PostingIterator_get_docid, 0x0008, __null},
+  { (char *)"PostingIterator_next", (PyCFunction)_wrap_PostingIterator_next, 0x0008, __null},
+  { (char *)"PostingIterator_equals", _wrap_PostingIterator_equals, 0x0001, __null},
+  { (char *)"PostingIterator_swigregister", PostingIterator_swigregister, 0x0001, __null},
+  { (char *)"PostingIterator_swiginit", PostingIterator_swiginit, 0x0001, __null},
+  { (char *)"__eq__", _wrap___eq__, 0x0001, __null},
+  { (char *)"__ne__", _wrap___ne__, 0x0001, __null},
+  { (char *)"new_TermIterator", _wrap_new_TermIterator, 0x0001, (char *)"\n"
+  "Copying is allowed.\n"
+  "\n"
+  "Xapian::TermIterator::TermIterator(const TermIterator &other)\n"
+  "\n"
+  "The internals are reference counted, so copying is also cheap. \n"
+  ""},
+  { (char *)"delete_TermIterator", (PyCFunction)_wrap_delete_TermIterator, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "Xapian::TermIterator::~TermIterator() \n"
+  ""},
+  { (char *)"TermIterator_get_term", (PyCFunction)_wrap_TermIterator_get_term, 0x0008, __null},
+  { (char *)"TermIterator_next", (PyCFunction)_wrap_TermIterator_next, 0x0008, __null},
+  { (char *)"TermIterator_equals", _wrap_TermIterator_equals, 0x0001, __null},
+  { (char *)"TermIterator_skip_to", _wrap_TermIterator_skip_to, 0x0001, (char *)"\n"
+  "Advance the iterator to the specified term.\n"
+  "\n"
+  "void Xapian::TermIterator::skip_to(const std::string &tname)\n"
+  "\n"
+  "If the specified term isn't in the list, position ourselves on the\n"
+  "first term after it (or at_end() if no greater terms are present). \n"
+  ""},
+  { (char *)"TermIterator_get_wdf", (PyCFunction)_wrap_TermIterator_get_wdf, 0x0008, (char *)"\n"
+  "Return the wdf of the current term (if meaningful).\n"
+  "\n"
+  "Xapian::termcount Xapian::TermIterator::get_wdf() const\n"
+  "\n"
+  "The wdf (within document frequency) is the number of occurences of a\n"
+  "term in a particular document. \n"
+  ""},
+  { (char *)"TermIterator_get_termfreq", (PyCFunction)_wrap_TermIterator_get_termfreq, 0x0008, (char *)"\n"
+  "Return the term frequency of the current term (if meaningful).\n"
+  "\n"
+  "Xapian::doccount Xapian::TermIterator::get_termfreq() const\n"
+  "\n"
+  "The term frequency is the number of documents which a term indexes. \n"
+  ""},
+  { (char *)"TermIterator_positionlist_begin", (PyCFunction)_wrap_TermIterator_positionlist_begin, 0x0008, (char *)"\n"
+  "Return PositionIterator pointing to start of positionlist for current\n"
+  "term.\n"
+  "\n"
+  "PositionIterator Xapian::TermIterator::positionlist_begin() const \n"
+  ""},
+  { (char *)"TermIterator_positionlist_end", (PyCFunction)_wrap_TermIterator_positionlist_end, 0x0008, (char *)"\n"
+  "Return PositionIterator pointing to end of positionlist for current\n"
+  "term.\n"
+  "\n"
+  "PositionIterator Xapian::TermIterator::positionlist_end() const \n"
+  ""},
+  { (char *)"TermIterator___str__", (PyCFunction)_wrap_TermIterator___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::TermIterator::get_description() const \n"
+  ""},
+  { (char *)"TermIterator___eq__", _wrap_TermIterator___eq__, 0x0001, __null},
+  { (char *)"TermIterator___ne__", _wrap_TermIterator___ne__, 0x0001, __null},
+  { (char *)"TermIterator_swigregister", TermIterator_swigregister, 0x0001, __null},
+  { (char *)"TermIterator_swiginit", TermIterator_swiginit, 0x0001, __null},
+  { (char *)"new_ValueIterator", _wrap_new_ValueIterator, 0x0001, (char *)"\n"
+  "Default constructor.\n"
+  "\n"
+  "Xapian::ValueIterator::ValueIterator()\n"
+  "\n"
+  "Creates an uninitialised iterator, which can't be used before being\n"
+  "assigned to, but is sometimes syntactically convenient. \n"
+  ""},
+  { (char *)"delete_ValueIterator", (PyCFunction)_wrap_delete_ValueIterator, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "Xapian::ValueIterator::~ValueIterator() \n"
+  ""},
+  { (char *)"ValueIterator_get_value", (PyCFunction)_wrap_ValueIterator_get_value, 0x0008, __null},
+  { (char *)"ValueIterator_next", (PyCFunction)_wrap_ValueIterator_next, 0x0008, __null},
+  { (char *)"ValueIterator_equals", _wrap_ValueIterator_equals, 0x0001, __null},
+  { (char *)"ValueIterator_get_docid", (PyCFunction)_wrap_ValueIterator_get_docid, 0x0008, (char *)"\n"
+  "Return the docid at the current position.\n"
+  "\n"
+  "Xapian::docid Xapian::ValueIterator::get_docid() const\n"
+  "\n"
+  "If we're iterating over values of a document, this method will throw\n"
+  "Xapian::InvalidOperationError. \n"
+  ""},
+  { (char *)"ValueIterator_get_valueno", (PyCFunction)_wrap_ValueIterator_get_valueno, 0x0008, (char *)"\n"
+  "Return the value slot number for the current position.\n"
+  "\n"
+  "Xapian::valueno Xapian::ValueIterator::get_valueno() const\n"
+  "\n"
+  "If the iterator is over all values in a slot, this returns that slot's\n"
+  "number. If the iterator is over the values in a particular document,\n"
+  "it returns the number of each slot in turn. \n"
+  ""},
+  { (char *)"ValueIterator_skip_to", _wrap_ValueIterator_skip_to, 0x0001, (char *)"\n"
+  "Advance the iterator to document id or value slot docid_or_slot.\n"
+  "\n"
+  "void Xapian::ValueIterator::skip_to(Xapian::docid docid_or_slot)\n"
+  "\n"
+  "If this iterator is over values in a document, then this method\n"
+  "advances the iterator to value slot docid_or_slot, or the first slot\n"
+  "after it if there is no value in slot slot.\n"
+  "\n"
+  "If this iterator is over values in a particular slot, then this method\n"
+  "advances the iterator to document id docid_or_slot, or the first\n"
+  "document id after it if there is no value in the slot we're iterating\n"
+  "over for document docid_or_slot.\n"
+  "\n"
+  "Note: The \"two-faced\" nature of this method is due to how C++\n"
+  "overloading works. Xapian::docid and Xapian::valueno are both typedefs\n"
+  "for the same unsigned integer type, so overloading can't distinguish\n"
+  "them. \n"
+  ""},
+  { (char *)"ValueIterator_check", _wrap_ValueIterator_check, 0x0001, (char *)"\n"
+  "Check if the specified docid occurs.\n"
+  "\n"
+  "bool Xapian::ValueIterator::check(Xapian::docid docid)\n"
+  "\n"
+  "The caller is required to ensure that the specified document id did\n"
+  "actually exists in the database.\n"
+  "\n"
+  "This method acts like skip_to() if that can be done at little extra\n"
+  "cost, in which case it then returns true. This is how brass and chert\n"
+  "databases behave because they store values in streams which allow for\n"
+  "an efficient implementation of skip_to().\n"
+  "\n"
+  "Otherwise it simply checks if a particular docid is present. If it is,\n"
+  "it returns true. If it isn't, it returns false, and leaves the\n"
+  "position unspecified (and hence the result of calling methods which\n"
+  "depends on the current position, such as get_docid(), are also\n"
+  "unspecified). In this state, next() will advance to the first matching\n"
+  "position after document did, and skip_to() will act as it would if the\n"
+  "position was the first matching position after document did.\n"
+  "\n"
+  "Currently the inmemory, flint, and remote backends behave in the\n"
+  "latter way because they don't support streamed values and so skip_to()\n"
+  "must check each document it skips over which is significantly slower.\n"
+  "\n"
+  ""},
+  { (char *)"ValueIterator___str__", (PyCFunction)_wrap_ValueIterator___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::ValueIterator::get_description() const \n"
+  ""},
+  { (char *)"ValueIterator___eq__", _wrap_ValueIterator___eq__, 0x0001, __null},
+  { (char *)"ValueIterator___ne__", _wrap_ValueIterator___ne__, 0x0001, __null},
+  { (char *)"ValueIterator_swigregister", ValueIterator_swigregister, 0x0001, __null},
+  { (char *)"ValueIterator_swiginit", ValueIterator_swiginit, 0x0001, __null},
+  { (char *)"new_Document", _wrap_new_Document, 0x0001, (char *)"\n"
+  "Make a new empty Document.\n"
+  "\n"
+  "Xapian::Document::Document() \n"
+  ""},
+  { (char *)"delete_Document", (PyCFunction)_wrap_delete_Document, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "Xapian::Document::~Document() \n"
+  ""},
+  { (char *)"Document_get_value", _wrap_Document_get_value, 0x0001, (char *)"\n"
+  "Get value by number.\n"
+  "\n"
+  "std::string Xapian::Document::get_value(Xapian::valueno valueno) const\n"
+  "\n"
+  "Returns an empty string if no value with the given number is present\n"
+  "in the document.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "valueno:  The number of the value. \n"
+  ""},
+  { (char *)"Document_add_value", _wrap_Document_add_value, 0x0001, (char *)"\n"
+  "Add a new value.\n"
+  "\n"
+  "void Xapian::Document::add_value(Xapian::valueno valueno, const\n"
+  "std::string &value)\n"
+  "\n"
+  "The new value will replace any existing value with the same number (or\n"
+  "if the new value is empty, it will remove any existing value with the\n"
+  "same number). \n"
+  ""},
+  { (char *)"Document_remove_value", _wrap_Document_remove_value, 0x0001, (char *)"\n"
+  "Remove any value with the given number.\n"
+  "\n"
+  "void Xapian::Document::remove_value(Xapian::valueno valueno) \n"
+  ""},
+  { (char *)"Document_clear_values", (PyCFunction)_wrap_Document_clear_values, 0x0008, (char *)"\n"
+  "Remove all values associated with the document.\n"
+  "\n"
+  "void Xapian::Document::clear_values() \n"
+  ""},
+  { (char *)"Document_get_data", (PyCFunction)_wrap_Document_get_data, 0x0008, (char *)"\n"
+  "Get data stored in the document.\n"
+  "\n"
+  "std::string Xapian::Document::get_data() const\n"
+  "\n"
+  "This is a potentially expensive operation, and shouldn't normally be\n"
+  "used in a match decider functor. Put data for use by match deciders in\n"
+  "a value instead. \n"
+  ""},
+  { (char *)"Document_set_data", _wrap_Document_set_data, 0x0001, (char *)"\n"
+  "Set data stored in the document.\n"
+  "\n"
+  "void Xapian::Document::set_data(const std::string &data) \n"
+  ""},
+  { (char *)"Document_add_posting", _wrap_Document_add_posting, 0x0001, (char *)"\n"
+  "Add an occurrence of a term at a particular position.\n"
+  "\n"
+  "void Xapian::Document::add_posting(const std::string &tname,\n"
+  "Xapian::termpos tpos, Xapian::termcount wdfinc=1)\n"
+  "\n"
+  "Multiple occurrences of the term at the same position are represented\n"
+  "only once in the positional information, but do increase the wdf.\n"
+  "\n"
+  "If the term is not already in the document, it will be added to it.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "tname:  The name of the term.\n"
+  "\n"
+  "tpos:  The position of the term.\n"
+  "\n"
+  "wdfinc:  The increment that will be applied to the wdf for this term.\n"
+  "\n"
+  ""},
+  { (char *)"Document_add_term", _wrap_Document_add_term, 0x0001, (char *)"\n"
+  "Add a term to the document, without positional information.\n"
+  "\n"
+  "void Xapian::Document::add_term(const std::string &tname,\n"
+  "Xapian::termcount wdfinc=1)\n"
+  "\n"
+  "Any existing positional information for the term will be left\n"
+  "unmodified.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "tname:  The name of the term.\n"
+  "\n"
+  "wdfinc:  The increment that will be applied to the wdf for this term\n"
+  "(default: 1). \n"
+  ""},
+  { (char *)"Document_add_boolean_term", _wrap_Document_add_boolean_term, 0x0001, (char *)"\n"
+  "Add a boolean filter term to the document.\n"
+  "\n"
+  "void Xapian::Document::add_boolean_term(const std::string &term)\n"
+  "\n"
+  "This method adds term to the document with wdf of 0 - this is\n"
+  "generally what you want for a term used for boolean filtering as the\n"
+  "wdf of such terms is ignored, and it doesn't make sense for them to\n"
+  "contribute to the document's length.\n"
+  "\n"
+  "If the specified term already indexes this document, this method has\n"
+  "no effect.\n"
+  "\n"
+  "It is exactly the same as add_term(term, 0).\n"
+  "\n"
+  "This method was added in Xapian 1.0.18.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "term:  The term to add. \n"
+  ""},
+  { (char *)"Document_remove_posting", _wrap_Document_remove_posting, 0x0001, (char *)"\n"
+  "Remove a posting of a term from the document.\n"
+  "\n"
+  "void Xapian::Document::remove_posting(const std::string &tname,\n"
+  "Xapian::termpos tpos, Xapian::termcount wdfdec=1)\n"
+  "\n"
+  "Note that the term will still index the document even if all\n"
+  "occurrences are removed. To remove a term from a document completely,\n"
+  "use remove_term().\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "tname:  The name of the term.\n"
+  "\n"
+  "tpos:  The position of the term.\n"
+  "\n"
+  "wdfdec:  The decrement that will be applied to the wdf when removing\n"
+  "this posting. The wdf will not go below the value of 0.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::InvalidArgumentError:  will be thrown if the term is not at\n"
+  "the position specified in the position list for this term in this\n"
+  "document.\n"
+  "\n"
+  "Xapian::InvalidArgumentError:  will be thrown if the term is not in\n"
+  "the document \n"
+  ""},
+  { (char *)"Document_remove_term", _wrap_Document_remove_term, 0x0001, (char *)"\n"
+  "Remove a term and all postings associated with it.\n"
+  "\n"
+  "void Xapian::Document::remove_term(const std::string &tname)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "tname:  The name of the term.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::InvalidArgumentError:  will be thrown if the term is not in\n"
+  "the document \n"
+  ""},
+  { (char *)"Document_clear_terms", (PyCFunction)_wrap_Document_clear_terms, 0x0008, (char *)"\n"
+  "Remove all terms (and postings) from the document.\n"
+  "\n"
+  "void Xapian::Document::clear_terms() \n"
+  ""},
+  { (char *)"Document_termlist_count", (PyCFunction)_wrap_Document_termlist_count, 0x0008, (char *)"\n"
+  "The length of the termlist - i.e.\n"
+  "\n"
+  "Xapian::termcount Xapian::Document::termlist_count() const\n"
+  "\n"
+  "the number of different terms which index this document. \n"
+  ""},
+  { (char *)"Document_termlist_begin", (PyCFunction)_wrap_Document_termlist_begin, 0x0008, (char *)"\n"
+  "Iterator for the terms in this document.\n"
+  "\n"
+  "TermIterator Xapian::Document::termlist_begin() const \n"
+  ""},
+  { (char *)"Document_termlist_end", (PyCFunction)_wrap_Document_termlist_end, 0x0008, (char *)"\n"
+  "Equivalent end iterator for termlist_begin().\n"
+  "\n"
+  "TermIterator Xapian::Document::termlist_end() const \n"
+  ""},
+  { (char *)"Document_values_count", (PyCFunction)_wrap_Document_values_count, 0x0008, (char *)"\n"
+  "Count the values in this document.\n"
+  "\n"
+  "Xapian::termcount Xapian::Document::values_count() const \n"
+  ""},
+  { (char *)"Document_values_begin", (PyCFunction)_wrap_Document_values_begin, 0x0008, (char *)"\n"
+  "Iterator for the values in this document.\n"
+  "\n"
+  "ValueIterator Xapian::Document::values_begin() const \n"
+  ""},
+  { (char *)"Document_values_end", (PyCFunction)_wrap_Document_values_end, 0x0008, (char *)"\n"
+  "Equivalent end iterator for values_begin().\n"
+  "\n"
+  "ValueIteratorEnd_ Xapian::Document::values_end() const \n"
+  ""},
+  { (char *)"Document_get_docid", (PyCFunction)_wrap_Document_get_docid, 0x0008, (char *)"\n"
+  "Get the document id which is associated with this document (if any).\n"
+  "\n"
+  "docid Xapian::Document::get_docid() const\n"
+  "\n"
+  "NB If multiple databases are being searched together, then this will\n"
+  "be the document id in the individual database, not the merged\n"
+  "database!\n"
+  "\n"
+  "If this document came from a database, return the document id in that\n"
+  "database. Otherwise, return 0 (in Xapian 1.0.22/1.2.4 or later; prior\n"
+  "to this the returned value was uninitialised). \n"
+  ""},
+  { (char *)"Document_serialise", (PyCFunction)_wrap_Document_serialise, 0x0008, (char *)"\n"
+  "Serialise document into a string.\n"
+  "\n"
+  "std::string Xapian::Document::serialise() const\n"
+  "\n"
+  "The document representation may change between Xapian releases: even\n"
+  "between minor versions. However, it is guaranteed not to change if the\n"
+  "remote database protocol has not changed between releases. \n"
+  ""},
+  { (char *)"Document_unserialise", (PyCFunction)_wrap_Document_unserialise, 0x0008, __null},
+  { (char *)"Document___str__", (PyCFunction)_wrap_Document___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::Document::get_description() const \n"
+  ""},
+  { (char *)"Document_swigregister", Document_swigregister, 0x0001, __null},
+  { (char *)"Document_swiginit", Document_swiginit, 0x0001, __null},
+  { (char *)"new_PostingSource", (PyCFunction)_wrap_new_PostingSource, 0x0008, __null},
+  { (char *)"delete_PostingSource", (PyCFunction)_wrap_delete_PostingSource, 0x0008, (char *)"\n"
+  "virtual\n"
+  "Xapian::PostingSource::~PostingSource() \n"
+  ""},
+  { (char *)"PostingSource_get_termfreq_min", (PyCFunction)_wrap_PostingSource_get_termfreq_min, 0x0008, (char *)"\n"
+  "A lower bound on the number of documents this object can return.\n"
+  "\n"
+  "virtual Xapian::doccount Xapian::PostingSource::get_termfreq_min()\n"
+  "const =0\n"
+  "\n"
+  "Xapian will always call init() on a PostingSource before calling this\n"
+  "for the first time. \n"
+  ""},
+  { (char *)"PostingSource_get_termfreq_est", (PyCFunction)_wrap_PostingSource_get_termfreq_est, 0x0008, (char *)"\n"
+  "An estimate of the number of documents this object can return.\n"
+  "\n"
+  "virtual Xapian::doccount Xapian::PostingSource::get_termfreq_est()\n"
+  "const =0\n"
+  "\n"
+  "It must always be true that:\n"
+  "\n"
+  "get_termfreq_min() <= get_termfreq_est() <= get_termfreq_max()\n"
+  "\n"
+  "Xapian will always call init() on a PostingSource before calling this\n"
+  "for the first time. \n"
+  ""},
+  { (char *)"PostingSource_get_termfreq_max", (PyCFunction)_wrap_PostingSource_get_termfreq_max, 0x0008, (char *)"\n"
+  "An upper bound on the number of documents this object can return.\n"
+  "\n"
+  "virtual Xapian::doccount Xapian::PostingSource::get_termfreq_max()\n"
+  "const =0\n"
+  "\n"
+  "Xapian will always call init() on a PostingSource before calling this\n"
+  "for the first time. \n"
+  ""},
+  { (char *)"PostingSource_get_maxweight", (PyCFunction)_wrap_PostingSource_get_maxweight, 0x0008, (char *)"\n"
+  "Return the currently set upper bound on what get_weight() can return.\n"
+  "\n"
+  "Xapian::weight Xapian::PostingSource::get_maxweight() const \n"
+  ""},
+  { (char *)"PostingSource_get_weight", (PyCFunction)_wrap_PostingSource_get_weight, 0x0008, (char *)"\n"
+  "Return the weight contribution for the current document.\n"
+  "\n"
+  "virtual Xapian::weight Xapian::PostingSource::get_weight() const\n"
+  "\n"
+  "This default implementation always returns 0, for convenience when\n"
+  "implementing \"weight-less\" PostingSource subclasses.\n"
+  "\n"
+  "This method may assume that it will only be called when there is a\n"
+  "\"current document\". In detail: Xapian will always call init() on a\n"
+  "PostingSource before calling this for the first time. It will also\n"
+  "only call this if the PostingSource reports that it is pointing to a\n"
+  "valid document (ie, it will not call it before calling at least one of\n"
+  "next(), skip_to() or check(), and will ensure that the PostingSource\n"
+  "is not at the end by calling at_end()). \n"
+  ""},
+  { (char *)"PostingSource_get_docid", (PyCFunction)_wrap_PostingSource_get_docid, 0x0008, (char *)"\n"
+  "Return the current docid.\n"
+  "\n"
+  "virtual Xapian::docid Xapian::PostingSource::get_docid() const =0\n"
+  "\n"
+  "This method may assume that it will only be called when there is a\n"
+  "\"current document\". See  get_weight() for details.\n"
+  "\n"
+  "Note: in the case of a multi-database search, the returned docid\n"
+  "should be in the single subdatabase relevant to this posting source.\n"
+  "See the  init() method for details. \n"
+  ""},
+  { (char *)"PostingSource_next", _wrap_PostingSource_next, 0x0001, (char *)"\n"
+  "Advance the current position to the next matching document.\n"
+  "\n"
+  "virtual void Xapian::PostingSource::next(Xapian::weight min_wt)=0\n"
+  "\n"
+  "The PostingSource starts before the first entry in the list, so next()\n"
+  "must be called before any methods which need the context of the\n"
+  "current position.\n"
+  "\n"
+  "Xapian will always call init() on a PostingSource before calling this\n"
+  "for the first time.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "min_wt:  The minimum weight contribution that is needed (this is just\n"
+  "a hint which subclasses may ignore). \n"
+  ""},
+  { (char *)"PostingSource_skip_to", _wrap_PostingSource_skip_to, 0x0001, (char *)"\n"
+  "Advance to the specified docid.\n"
+  "\n"
+  "virtual void Xapian::PostingSource::skip_to(Xapian::docid did,\n"
+  "Xapian::weight min_wt)\n"
+  "\n"
+  "If the specified docid isn't in the list, position ourselves on the\n"
+  "first document after it (or at_end() if no greater docids are\n"
+  "present).\n"
+  "\n"
+  "If the current position is already the specified docid, this method\n"
+  "will leave the position unmodified.\n"
+  "\n"
+  "If the specified docid is earlier than the current position, the\n"
+  "behaviour is unspecified. A sensible behaviour would be to leave the\n"
+  "current position unmodified, but it is also reasonable to move to the\n"
+  "specified docid.\n"
+  "\n"
+  "The default implementation calls next() repeatedly, which works but\n"
+  "skip_to() can often be implemented much more efficiently.\n"
+  "\n"
+  "Xapian will always call init() on a PostingSource before calling this\n"
+  "for the first time.\n"
+  "\n"
+  "Note: in the case of a multi-database search, the docid specified is\n"
+  "the docid in the single subdatabase relevant to this posting source.\n"
+  "See the  init() method for details.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "min_wt:  The minimum weight contribution that is needed (this is just\n"
+  "a hint which subclasses may ignore). \n"
+  ""},
+  { (char *)"PostingSource_check", _wrap_PostingSource_check, 0x0001, (char *)"\n"
+  "Check if the specified docid occurs.\n"
+  "\n"
+  "virtual bool Xapian::PostingSource::check(Xapian::docid did,\n"
+  "Xapian::weight min_wt)\n"
+  "\n"
+  "The caller is required to ensure that the specified document id did\n"
+  "actually exists in the database. If it does, it must move to that\n"
+  "document id, and return true. If it does not, it may either:\n"
+  "\n"
+  "return true, having moved to a definite position (including\n"
+  "\"at_end\"), which must be the same position as skip_to() would have\n"
+  "moved to.\n"
+  "\n"
+  "or\n"
+  "\n"
+  "return false, having moved to an \"indeterminate\" position, such that\n"
+  "a subsequent call to next() or skip_to() will move to the next\n"
+  "matching position after did.\n"
+  "\n"
+  "Generally, this method should act like skip_to() and return true if\n"
+  "that can be done at little extra cost.\n"
+  "\n"
+  "Otherwise it should simply check if a particular docid is present,\n"
+  "returning true if it is, and false if it isn't.\n"
+  "\n"
+  "The default implementation calls skip_to() and always returns true.\n"
+  "\n"
+  "Xapian will always call init() on a PostingSource before calling this\n"
+  "for the first time.\n"
+  "\n"
+  "Note: in the case of a multi-database search, the docid specified is\n"
+  "the docid in the single subdatabase relevant to this posting source.\n"
+  "See the  init() method for details. \n"
+  ""},
+  { (char *)"PostingSource_at_end", (PyCFunction)_wrap_PostingSource_at_end, 0x0008, (char *)"\n"
+  "Return true if the current position is past the last entry in this\n"
+  "list.\n"
+  "\n"
+  "virtual bool Xapian::PostingSource::at_end() const =0\n"
+  "\n"
+  "At least one of  next(),  skip_to() or  check() will be called before\n"
+  "this method is first called. \n"
+  ""},
+  { (char *)"PostingSource_name", (PyCFunction)_wrap_PostingSource_name, 0x0008, (char *)"\n"
+  "Name of the posting source class.\n"
+  "\n"
+  "virtual std::string Xapian::PostingSource::name() const\n"
+  "\n"
+  "This is used when serialising and unserialising posting sources; for\n"
+  "example, for performing remote searches.\n"
+  "\n"
+  "If the subclass is in a C++ namespace, the namespace should be\n"
+  "included in the name, using \"::\" as a separator. For example, for a\n"
+  "PostingSource subclass called \"FooPostingSource\" in the \"Xapian\"\n"
+  "namespace the result of this call should be\n"
+  "\"Xapian::FooPostingSource\".\n"
+  "\n"
+  "This should only be implemented if serialise() and unserialise() are\n"
+  "also implemented. The default implementation returns an empty string.\n"
+  "\n"
+  "If this returns an empty string, Xapian will assume that serialise()\n"
+  "and unserialise() are not implemented. \n"
+  ""},
+  { (char *)"PostingSource_init", _wrap_PostingSource_init, 0x0001, (char *)"\n"
+  "Set this PostingSource to the start of the list of postings.\n"
+  "\n"
+  "virtual void Xapian::PostingSource::init(const Database &db)=0\n"
+  "\n"
+  "This is called automatically by the matcher prior to each query being\n"
+  "processed.\n"
+  "\n"
+  "If a PostingSource is used for multiple searches,  init() will\n"
+  "therefore be called multiple times, and must handle this by using the\n"
+  "database passed in the most recent call.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "db:  The database which the PostingSource should iterate through.\n"
+  "\n"
+  "Note: the database supplied to this method must not be modified: in\n"
+  "particular, the reopen() method should not be called on it.\n"
+  "\n"
+  "Note: in the case of a multi-database search, a separate PostingSource\n"
+  "will be used for each database (the separate PostingSources will be\n"
+  "obtained using  clone()), and each PostingSource will be passed one of\n"
+  "the sub-databases as the db parameter here. The db parameter will\n"
+  "therefore always refer to a single database. All docids passed to, or\n"
+  "returned from, the PostingSource refer to docids in that single\n"
+  "database, rather than in the multi- database. \n"
+  ""},
+  { (char *)"PostingSource___str__", (PyCFunction)_wrap_PostingSource___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "virtual std::string Xapian::PostingSource::get_description() const\n"
+  "\n"
+  "This default implementation returns a generic answer. This default it\n"
+  "provided to avoid forcing those deriving their own PostingSource\n"
+  "subclass from having to implement this (they may not care what\n"
+  "get_description() gives for their subclass). \n"
+  ""},
+  { (char *)"disown_PostingSource", (PyCFunction)_wrap_disown_PostingSource, 0x0008, __null},
+  { (char *)"PostingSource_swigregister", PostingSource_swigregister, 0x0001, __null},
+  { (char *)"PostingSource_swiginit", PostingSource_swiginit, 0x0001, __null},
+  { (char *)"new_ValuePostingSource", (PyCFunction)_wrap_new_ValuePostingSource, 0x0008, (char *)"\n"
+  "Construct a ValuePostingSource.\n"
+  "\n"
+  "Xapian::ValuePostingSource::ValuePostingSource(Xapian::valueno slot_)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "slot_:  The value slot to read values from. \n"
+  ""},
+  { (char *)"delete_ValuePostingSource", (PyCFunction)_wrap_delete_ValuePostingSource, 0x0008, __null},
+  { (char *)"ValuePostingSource_swigregister", ValuePostingSource_swigregister, 0x0001, __null},
+  { (char *)"ValuePostingSource_swiginit", ValuePostingSource_swiginit, 0x0001, __null},
+  { (char *)"new_ValueWeightPostingSource", (PyCFunction)_wrap_new_ValueWeightPostingSource, 0x0008, (char *)"\n"
+  "Construct a ValueWeightPostingSource.\n"
+  "\n"
+  "Xapian::ValueWeightPostingSource::ValueWeightPostingSource(Xapian::valueno\n"
+  "slot_)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "slot_:  The value slot to read values from. \n"
+  ""},
+  { (char *)"delete_ValueWeightPostingSource", (PyCFunction)_wrap_delete_ValueWeightPostingSource, 0x0008, __null},
+  { (char *)"ValueWeightPostingSource_swigregister", ValueWeightPostingSource_swigregister, 0x0001, __null},
+  { (char *)"ValueWeightPostingSource_swiginit", ValueWeightPostingSource_swiginit, 0x0001, __null},
+  { (char *)"new_DecreasingValueWeightPostingSource", _wrap_new_DecreasingValueWeightPostingSource, 0x0001, (char *)"\n"
+  "Xapian::DecreasingValueWeightPostingSource::DecreasingValueWeightPostingSource(Xapian::valueno\n"
+  "slot_, Xapian::docid range_start_=0, Xapian::docid range_end_=0) \n"
+  ""},
+  { (char *)"delete_DecreasingValueWeightPostingSource", (PyCFunction)_wrap_delete_DecreasingValueWeightPostingSource, 0x0008, __null},
+  { (char *)"DecreasingValueWeightPostingSource_swigregister", DecreasingValueWeightPostingSource_swigregister, 0x0001, __null},
+  { (char *)"DecreasingValueWeightPostingSource_swiginit", DecreasingValueWeightPostingSource_swiginit, 0x0001, __null},
+  { (char *)"new_ValueMapPostingSource", (PyCFunction)_wrap_new_ValueMapPostingSource, 0x0008, (char *)"\n"
+  "Construct a ValueWeightPostingSource.\n"
+  "\n"
+  "Xapian::ValueMapPostingSource::ValueMapPostingSource(Xapian::valueno\n"
+  "slot_)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "slot_:  The value slot to read values from. \n"
+  ""},
+  { (char *)"ValueMapPostingSource_add_mapping", _wrap_ValueMapPostingSource_add_mapping, 0x0001, (char *)"\n"
+  "Add a mapping.\n"
+  "\n"
+  "void Xapian::ValueMapPostingSource::add_mapping(const std::string\n"
+  "&key, double weight)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "key:  The key looked up from the value slot.\n"
+  "\n"
+  "weight:  The weight to give this key. \n"
+  ""},
+  { (char *)"ValueMapPostingSource_clear_mappings", (PyCFunction)_wrap_ValueMapPostingSource_clear_mappings, 0x0008, (char *)"\n"
+  "Clear all mappings.\n"
+  "\n"
+  "void Xapian::ValueMapPostingSource::clear_mappings() \n"
+  ""},
+  { (char *)"ValueMapPostingSource_set_default_weight", _wrap_ValueMapPostingSource_set_default_weight, 0x0001, (char *)"\n"
+  "Set a default weight for document values not in the map.\n"
+  "\n"
+  "void Xapian::ValueMapPostingSource::set_default_weight(double wt) \n"
+  ""},
+  { (char *)"delete_ValueMapPostingSource", (PyCFunction)_wrap_delete_ValueMapPostingSource, 0x0008, __null},
+  { (char *)"ValueMapPostingSource_swigregister", ValueMapPostingSource_swigregister, 0x0001, __null},
+  { (char *)"ValueMapPostingSource_swiginit", ValueMapPostingSource_swiginit, 0x0001, __null},
+  { (char *)"new_FixedWeightPostingSource", (PyCFunction)_wrap_new_FixedWeightPostingSource, 0x0008, (char *)"\n"
+  "Construct a FixedWeightPostingSource.\n"
+  "\n"
+  "Xapian::FixedWeightPostingSource::FixedWeightPostingSource(Xapian::weight\n"
+  "wt)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "wt:  The fixed weight to return. \n"
+  ""},
+  { (char *)"delete_FixedWeightPostingSource", (PyCFunction)_wrap_delete_FixedWeightPostingSource, 0x0008, __null},
+  { (char *)"FixedWeightPostingSource_swigregister", FixedWeightPostingSource_swigregister, 0x0001, __null},
+  { (char *)"FixedWeightPostingSource_swiginit", FixedWeightPostingSource_swiginit, 0x0001, __null},
+  { (char *)"new_MSet", _wrap_new_MSet, 0x0001, (char *)"\n"
+  "Copying is allowed (and is cheap).\n"
+  "\n"
+  "Xapian::MSet::MSet(const MSet &other) \n"
+  ""},
+  { (char *)"delete_MSet", (PyCFunction)_wrap_delete_MSet, 0x0008, (char *)"\n"
+  "Destroy a Xapian::MSet.\n"
+  "\n"
+  "Xapian::MSet::~MSet() \n"
+  ""},
+  { (char *)"MSet_fetch", _wrap_MSet_fetch, 0x0001, (char *)"\n"
+  "Fetch all the items in the MSet.\n"
+  "\n"
+  "void Xapian::MSet::fetch() const \n"
+  ""},
+  { (char *)"MSet_convert_to_percent", _wrap_MSet_convert_to_percent, 0x0001, (char *)"\n"
+  "Return the percentage score for a particular item.\n"
+  "\n"
+  "Xapian::percent Xapian::MSet::convert_to_percent(const MSetIterator\n"
+  "&it) const \n"
+  ""},
+  { (char *)"MSet_get_termfreq", _wrap_MSet_get_termfreq, 0x0001, (char *)"\n"
+  "Return the term frequency of the given query term.\n"
+  "\n"
+  "Xapian::doccount Xapian::MSet::get_termfreq(const std::string &tname)\n"
+  "const\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "tname:  The term to look for.\n"
+  "\n"
+  "This is sometimes more efficient than asking the database directly for\n"
+  "the term frequency - in particular, if the term was in the query, its\n"
+  "frequency will usually be cached in the MSet. \n"
+  ""},
+  { (char *)"MSet_get_termweight", _wrap_MSet_get_termweight, 0x0001, (char *)"\n"
+  "Return the term weight of the given query term.\n"
+  "\n"
+  "Xapian::weight Xapian::MSet::get_termweight(const std::string &tname)\n"
+  "const\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "tname:  The term to look for.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::InvalidArgumentError:  is thrown if the term was not in the\n"
+  "query. \n"
+  ""},
+  { (char *)"MSet_get_firstitem", (PyCFunction)_wrap_MSet_get_firstitem, 0x0008, (char *)"\n"
+  "The index of the first item in the result which was put into the MSet.\n"
+  "\n"
+  "Xapian::doccount Xapian::MSet::get_firstitem() const\n"
+  "\n"
+  "This corresponds to the parameter \"first\" specified in\n"
+  "Xapian::Enquire::get_mset(). A value of 0 corresponds to the highest\n"
+  "result being the first item in the MSet. \n"
+  ""},
+  { (char *)"MSet_get_matches_lower_bound", (PyCFunction)_wrap_MSet_get_matches_lower_bound, 0x0008, (char *)"\n"
+  "A lower bound on the number of documents in the database which match\n"
+  "the query.\n"
+  "\n"
+  "Xapian::doccount Xapian::MSet::get_matches_lower_bound() const\n"
+  "\n"
+  "This figure takes into account collapsing of duplicates, and weighting\n"
+  "cutoff values.\n"
+  "\n"
+  "This number is usually considerably less than the actual number of\n"
+  "documents which match the query. \n"
+  ""},
+  { (char *)"MSet_get_matches_estimated", (PyCFunction)_wrap_MSet_get_matches_estimated, 0x0008, (char *)"\n"
+  "An estimate for the number of documents in the database which match\n"
+  "the query.\n"
+  "\n"
+  "Xapian::doccount Xapian::MSet::get_matches_estimated() const\n"
+  "\n"
+  "This figure takes into account collapsing of duplicates, and weighting\n"
+  "cutoff values.\n"
+  "\n"
+  "This value is returned because there is sometimes a request to display\n"
+  "such information. However, our experience is that presenting this\n"
+  "value to users causes them to worry about the large number of results,\n"
+  "rather than how useful those at the top of the result set are, and is\n"
+  "thus undesirable. \n"
+  ""},
+  { (char *)"MSet_get_matches_upper_bound", (PyCFunction)_wrap_MSet_get_matches_upper_bound, 0x0008, (char *)"\n"
+  "An upper bound on the number of documents in the database which match\n"
+  "the query.\n"
+  "\n"
+  "Xapian::doccount Xapian::MSet::get_matches_upper_bound() const\n"
+  "\n"
+  "This figure takes into account collapsing of duplicates, and weighting\n"
+  "cutoff values.\n"
+  "\n"
+  "This number is usually considerably greater than the actual number of\n"
+  "documents which match the query. \n"
+  ""},
+  { (char *)"MSet_get_uncollapsed_matches_lower_bound", (PyCFunction)_wrap_MSet_get_uncollapsed_matches_lower_bound, 0x0008, (char *)"\n"
+  "A lower bound on the number of documents in the database which would\n"
+  "match the query if collapsing wasn't used.\n"
+  "\n"
+  "Xapian::doccount Xapian::MSet::get_uncollapsed_matches_lower_bound()\n"
+  "const \n"
+  ""},
+  { (char *)"MSet_get_uncollapsed_matches_estimated", (PyCFunction)_wrap_MSet_get_uncollapsed_matches_estimated, 0x0008, (char *)"\n"
+  "A estimate of the number of documents in the database which would\n"
+  "match the query if collapsing wasn't used.\n"
+  "\n"
+  "Xapian::doccount Xapian::MSet::get_uncollapsed_matches_estimated()\n"
+  "const \n"
+  ""},
+  { (char *)"MSet_get_uncollapsed_matches_upper_bound", (PyCFunction)_wrap_MSet_get_uncollapsed_matches_upper_bound, 0x0008, (char *)"\n"
+  "A upper bound on the number of documents in the database which would\n"
+  "match the query if collapsing wasn't used.\n"
+  "\n"
+  "Xapian::doccount Xapian::MSet::get_uncollapsed_matches_upper_bound()\n"
+  "const \n"
+  ""},
+  { (char *)"MSet_get_max_possible", (PyCFunction)_wrap_MSet_get_max_possible, 0x0008, (char *)"\n"
+  "The maximum possible weight in the MSet.\n"
+  "\n"
+  "Xapian::weight Xapian::MSet::get_max_possible() const\n"
+  "\n"
+  "This weight is likely not to be attained in the set of results, but\n"
+  "represents an upper bound on the weight which a document could attain\n"
+  "for the given query. \n"
+  ""},
+  { (char *)"MSet_get_max_attained", (PyCFunction)_wrap_MSet_get_max_attained, 0x0008, (char *)"\n"
+  "The greatest weight which is attained by any document in the database.\n"
+  "\n"
+  "Xapian::weight Xapian::MSet::get_max_attained() const\n"
+  "\n"
+  "If firstitem == 0 and the primary ordering is by relevance, this is\n"
+  "the weight of the first entry in the MSet.\n"
+  "\n"
+  "If no documents are found by the query, this will be 0.\n"
+  "\n"
+  "Note that calculation of max_attained requires calculation of at least\n"
+  "one result item - therefore, if no items were requested when the query\n"
+  "was performed (by specifying maxitems = 0 in\n"
+  "Xapian::Enquire::get_mset()), this value will be 0. \n"
+  ""},
+  { (char *)"MSet_size", (PyCFunction)_wrap_MSet_size, 0x0008, (char *)"\n"
+  "The number of items in this MSet.\n"
+  "\n"
+  "Xapian::doccount Xapian::MSet::size() const \n"
+  ""},
+  { (char *)"MSet_empty", (PyCFunction)_wrap_MSet_empty, 0x0008, (char *)"\n"
+  "Test if this MSet is empty.\n"
+  "\n"
+  "bool Xapian::MSet::empty() const \n"
+  ""},
+  { (char *)"MSet_begin", (PyCFunction)_wrap_MSet_begin, 0x0008, (char *)"\n"
+  "Iterator for the items in this MSet.\n"
+  "\n"
+  "MSetIterator Xapian::MSet::begin() const \n"
+  ""},
+  { (char *)"MSet_end", (PyCFunction)_wrap_MSet_end, 0x0008, (char *)"\n"
+  "End iterator corresponding to begin().\n"
+  "\n"
+  "MSetIterator Xapian::MSet::end() const \n"
+  ""},
+  { (char *)"MSet_back", (PyCFunction)_wrap_MSet_back, 0x0008, (char *)"\n"
+  "Iterator pointing to the last element of this MSet.\n"
+  "\n"
+  "MSetIterator Xapian::MSet::back() const \n"
+  ""},
+  { (char *)"MSet__get_hit_internal", _wrap_MSet__get_hit_internal, 0x0001, (char *)"\n"
+  "Get an item from the MSet.\n"
+  "\n"
+  "The supplied index is relative to the start of the MSet, not the absolute rank\n"
+  "of the item. \n"
+  ""},
+  { (char *)"MSet_get_document_percentage", _wrap_MSet_get_document_percentage, 0x0001, __null},
+  { (char *)"MSet_get_document", _wrap_MSet_get_document, 0x0001, __null},
+  { (char *)"MSet_get_docid", _wrap_MSet_get_docid, 0x0001, __null},
+  { (char *)"MSet___str__", (PyCFunction)_wrap_MSet___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::MSet::get_description() const \n"
+  ""},
+  { (char *)"MSet_items_get", (PyCFunction)_wrap_MSet_items_get, 0x0008, __null},
+  { (char *)"MSet___cmp__", _wrap_MSet___cmp__, 0x0001, __null},
+  { (char *)"MSet_swigregister", MSet_swigregister, 0x0001, __null},
+  { (char *)"MSet_swiginit", MSet_swiginit, 0x0001, __null},
+  { (char *)"new_MSetIterator", _wrap_new_MSetIterator, 0x0001, (char *)"\n"
+  "Copying is allowed (and is cheap).\n"
+  "\n"
+  "Xapian::MSetIterator::MSetIterator(const MSetIterator &other) \n"
+  ""},
+  { (char *)"delete_MSetIterator", (PyCFunction)_wrap_delete_MSetIterator, 0x0008, __null},
+  { (char *)"MSetIterator_get_docid", (PyCFunction)_wrap_MSetIterator_get_docid, 0x0008, __null},
+  { (char *)"MSetIterator_next", (PyCFunction)_wrap_MSetIterator_next, 0x0008, __null},
+  { (char *)"MSetIterator_prev", (PyCFunction)_wrap_MSetIterator_prev, 0x0008, __null},
+  { (char *)"MSetIterator_equals", _wrap_MSetIterator_equals, 0x0001, __null},
+  { (char *)"MSetIterator_get_document", (PyCFunction)_wrap_MSetIterator_get_document, 0x0008, (char *)"\n"
+  "Get a Xapian::Document object for the current position.\n"
+  "\n"
+  "Xapian::Document Xapian::MSetIterator::get_document() const\n"
+  "\n"
+  "This method returns a Xapian::Document object which provides the\n"
+  "information about the document pointed to by the MSetIterator.\n"
+  "\n"
+  "If the underlying database has suitable support, using this call\n"
+  "(rather than asking the database for a document based on its document\n"
+  "ID) will enable the system to ensure that the correct data is\n"
+  "returned, and that the document has not been deleted or changed since\n"
+  "the query was performed.\n"
+  "\n"
+  "A Xapian::Document object containing the document data.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::DocNotFoundError:  The document specified could not be found\n"
+  "in the database. \n"
+  ""},
+  { (char *)"MSetIterator_get_rank", (PyCFunction)_wrap_MSetIterator_get_rank, 0x0008, (char *)"\n"
+  "Get the rank of the document at the current position.\n"
+  "\n"
+  "Xapian::doccount Xapian::MSetIterator::get_rank() const\n"
+  "\n"
+  "The rank is the position that this document is at in the ordered list\n"
+  "of results of the query. The result is 0-based - i.e. the top-ranked\n"
+  "document has a rank of 0. \n"
+  ""},
+  { (char *)"MSetIterator_get_weight", (PyCFunction)_wrap_MSetIterator_get_weight, 0x0008, (char *)"\n"
+  "Get the weight of the document at the current position.\n"
+  "\n"
+  "Xapian::weight Xapian::MSetIterator::get_weight() const \n"
+  ""},
+  { (char *)"MSetIterator_get_collapse_key", (PyCFunction)_wrap_MSetIterator_get_collapse_key, 0x0008, (char *)"\n"
+  "Get the collapse key for this document.\n"
+  "\n"
+  "std::string Xapian::MSetIterator::get_collapse_key() const \n"
+  ""},
+  { (char *)"MSetIterator_get_collapse_count", (PyCFunction)_wrap_MSetIterator_get_collapse_count, 0x0008, (char *)"\n"
+  "Get an estimate of the number of documents that have been collapsed\n"
+  "into this one.\n"
+  "\n"
+  "Xapian::doccount Xapian::MSetIterator::get_collapse_count() const\n"
+  "\n"
+  "The estimate will always be less than or equal to the actual number of\n"
+  "other documents satisfying the match criteria with the same collapse\n"
+  "key as this document.\n"
+  "\n"
+  "This method may return 0 even though there are other documents with\n"
+  "the same collapse key which satisfying the match criteria. However if\n"
+  "this method returns non-zero, there definitely are other such\n"
+  "documents. So this method may be used to inform the user that there\n"
+  "are \"at least N other matches in this group\", or to control whether\n"
+  "to offer a \"show other documents in this group\" feature (but note\n"
+  "that it may not offer it in every case where it would show other\n"
+  "documents). \n"
+  ""},
+  { (char *)"MSetIterator_get_percent", (PyCFunction)_wrap_MSetIterator_get_percent, 0x0008, (char *)"\n"
+  "This returns the weight of the document as a percentage score.\n"
+  "\n"
+  "Xapian::percent Xapian::MSetIterator::get_percent() const\n"
+  "\n"
+  "The return value will be an integer in the range 0 to 100: 0 meaning\n"
+  "that the item did not match the query at all.\n"
+  "\n"
+  "The intention is that the highest weighted document will get 100 if it\n"
+  "matches all the weight-contributing terms in the query. However,\n"
+  "currently it may get a lower percentage score if you use a\n"
+  "MatchDecider and the sorting is primarily by value. In this case, the\n"
+  "percentage for a particular document may vary depending on the first,\n"
+  "max_size, and checkatleast parameters passed to Enquire::get_mset()\n"
+  "(this bug is hard to fix without having to apply the MatchDecider to\n"
+  "potentially many more documents, which is potentially costly). \n"
+  ""},
+  { (char *)"MSetIterator___str__", (PyCFunction)_wrap_MSetIterator___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::MSetIterator::get_description() const \n"
+  ""},
+  { (char *)"MSetIterator___eq__", _wrap_MSetIterator___eq__, 0x0001, __null},
+  { (char *)"MSetIterator___ne__", _wrap_MSetIterator___ne__, 0x0001, __null},
+  { (char *)"MSetIterator_swigregister", MSetIterator_swigregister, 0x0001, __null},
+  { (char *)"MSetIterator_swiginit", MSetIterator_swiginit, 0x0001, __null},
+  { (char *)"new_ESet", _wrap_new_ESet, 0x0001, (char *)"\n"
+  "Copying is allowed (and is cheap).\n"
+  "\n"
+  "Xapian::ESet::ESet(const ESet &other) \n"
+  ""},
+  { (char *)"delete_ESet", (PyCFunction)_wrap_delete_ESet, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "Xapian::ESet::~ESet() \n"
+  ""},
+  { (char *)"ESet_get_ebound", (PyCFunction)_wrap_ESet_get_ebound, 0x0008, (char *)"\n"
+  "A lower bound on the number of terms which are in the full set of\n"
+  "results of the expand.\n"
+  "\n"
+  "Xapian::termcount Xapian::ESet::get_ebound() const\n"
+  "\n"
+  "This will be greater than or equal to size() \n"
+  ""},
+  { (char *)"ESet_size", (PyCFunction)_wrap_ESet_size, 0x0008, (char *)"\n"
+  "The number of terms in this E-Set.\n"
+  "\n"
+  "Xapian::termcount Xapian::ESet::size() const \n"
+  ""},
+  { (char *)"ESet_empty", (PyCFunction)_wrap_ESet_empty, 0x0008, (char *)"\n"
+  "Test if this E-Set is empty.\n"
+  "\n"
+  "bool Xapian::ESet::empty() const \n"
+  ""},
+  { (char *)"ESet_begin", (PyCFunction)_wrap_ESet_begin, 0x0008, (char *)"\n"
+  "Iterator for the terms in this E-Set.\n"
+  "\n"
+  "ESetIterator Xapian::ESet::begin() const \n"
+  ""},
+  { (char *)"ESet_end", (PyCFunction)_wrap_ESet_end, 0x0008, (char *)"\n"
+  "End iterator corresponding to begin().\n"
+  "\n"
+  "ESetIterator Xapian::ESet::end() const \n"
+  ""},
+  { (char *)"ESet_back", (PyCFunction)_wrap_ESet_back, 0x0008, (char *)"\n"
+  "Iterator pointing to the last element of this E-Set.\n"
+  "\n"
+  "ESetIterator Xapian::ESet::back() const \n"
+  ""},
+  { (char *)"ESet___str__", (PyCFunction)_wrap_ESet___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::ESet::get_description() const \n"
+  ""},
+  { (char *)"ESet_items_get", (PyCFunction)_wrap_ESet_items_get, 0x0008, __null},
+  { (char *)"ESet_swigregister", ESet_swigregister, 0x0001, __null},
+  { (char *)"ESet_swiginit", ESet_swiginit, 0x0001, __null},
+  { (char *)"new_ESetIterator", _wrap_new_ESetIterator, 0x0001, (char *)"\n"
+  "Copying is allowed (and is cheap).\n"
+  "\n"
+  "Xapian::ESetIterator::ESetIterator(const ESetIterator &other) \n"
+  ""},
+  { (char *)"delete_ESetIterator", (PyCFunction)_wrap_delete_ESetIterator, 0x0008, __null},
+  { (char *)"ESetIterator_get_term", (PyCFunction)_wrap_ESetIterator_get_term, 0x0008, __null},
+  { (char *)"ESetIterator_next", (PyCFunction)_wrap_ESetIterator_next, 0x0008, __null},
+  { (char *)"ESetIterator_prev", (PyCFunction)_wrap_ESetIterator_prev, 0x0008, __null},
+  { (char *)"ESetIterator_equals", _wrap_ESetIterator_equals, 0x0001, __null},
+  { (char *)"ESetIterator_get_weight", (PyCFunction)_wrap_ESetIterator_get_weight, 0x0008, (char *)"\n"
+  "Get the weight of the term at the current position.\n"
+  "\n"
+  "Xapian::weight Xapian::ESetIterator::get_weight() const \n"
+  ""},
+  { (char *)"ESetIterator___str__", (PyCFunction)_wrap_ESetIterator___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::ESetIterator::get_description() const \n"
+  ""},
+  { (char *)"ESetIterator___eq__", _wrap_ESetIterator___eq__, 0x0001, __null},
+  { (char *)"ESetIterator___ne__", _wrap_ESetIterator___ne__, 0x0001, __null},
+  { (char *)"ESetIterator_swigregister", ESetIterator_swigregister, 0x0001, __null},
+  { (char *)"ESetIterator_swiginit", ESetIterator_swiginit, 0x0001, __null},
+  { (char *)"new_RSet", _wrap_new_RSet, 0x0001, (char *)"\n"
+  "Default constructor.\n"
+  "\n"
+  "Xapian::RSet::RSet() \n"
+  ""},
+  { (char *)"delete_RSet", (PyCFunction)_wrap_delete_RSet, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "Xapian::RSet::~RSet() \n"
+  ""},
+  { (char *)"RSet_size", (PyCFunction)_wrap_RSet_size, 0x0008, (char *)"\n"
+  "The number of documents in this R-Set.\n"
+  "\n"
+  "Xapian::doccount Xapian::RSet::size() const \n"
+  ""},
+  { (char *)"RSet_empty", (PyCFunction)_wrap_RSet_empty, 0x0008, (char *)"\n"
+  "Test if this R-Set is empty.\n"
+  "\n"
+  "bool Xapian::RSet::empty() const \n"
+  ""},
+  { (char *)"RSet_add_document", _wrap_RSet_add_document, 0x0001, (char *)"\n"
+  "Add a document to the relevance set.\n"
+  "\n"
+  "void Xapian::RSet::add_document(const Xapian::MSetIterator &i) \n"
+  ""},
+  { (char *)"RSet_remove_document", _wrap_RSet_remove_document, 0x0001, (char *)"\n"
+  "Remove a document from the relevance set.\n"
+  "\n"
+  "void Xapian::RSet::remove_document(const Xapian::MSetIterator &i) \n"
+  ""},
+  { (char *)"RSet_contains", _wrap_RSet_contains, 0x0001, (char *)"\n"
+  "Test if a given document in the relevance set.\n"
+  "\n"
+  "bool Xapian::RSet::contains(const Xapian::MSetIterator &i) const \n"
+  ""},
+  { (char *)"RSet___str__", (PyCFunction)_wrap_RSet___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::RSet::get_description() const \n"
+  ""},
+  { (char *)"RSet_swigregister", RSet_swigregister, 0x0001, __null},
+  { (char *)"RSet_swiginit", RSet_swiginit, 0x0001, __null},
+  { (char *)"MatchDecider___call__", _wrap_MatchDecider___call__, 0x0001, __null},
+  { (char *)"delete_MatchDecider", (PyCFunction)_wrap_delete_MatchDecider, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "virtual Xapian::MatchDecider::~MatchDecider() \n"
+  ""},
+  { (char *)"new_MatchDecider", (PyCFunction)_wrap_new_MatchDecider, 0x0008, __null},
+  { (char *)"disown_MatchDecider", (PyCFunction)_wrap_disown_MatchDecider, 0x0008, __null},
+  { (char *)"MatchDecider_swigregister", MatchDecider_swigregister, 0x0001, __null},
+  { (char *)"MatchDecider_swiginit", MatchDecider_swiginit, 0x0001, __null},
+  { (char *)"ExpandDecider___call__", _wrap_ExpandDecider___call__, 0x0001, __null},
+  { (char *)"delete_ExpandDecider", (PyCFunction)_wrap_delete_ExpandDecider, 0x0008, (char *)"\n"
+  "Virtual destructor, because we have virtual methods.\n"
+  "\n"
+  "virtual Xapian::ExpandDecider::~ExpandDecider() \n"
+  ""},
+  { (char *)"new_ExpandDecider", (PyCFunction)_wrap_new_ExpandDecider, 0x0008, __null},
+  { (char *)"disown_ExpandDecider", (PyCFunction)_wrap_disown_ExpandDecider, 0x0008, __null},
+  { (char *)"ExpandDecider_swigregister", ExpandDecider_swigregister, 0x0001, __null},
+  { (char *)"ExpandDecider_swiginit", ExpandDecider_swiginit, 0x0001, __null},
+  { (char *)"new_Enquire", (PyCFunction)_wrap_new_Enquire, 0x0008, (char *)"\n"
+  "Create a Xapian::Enquire object.\n"
+  "\n"
+  "Xapian::Enquire::Enquire(const Database &database, ErrorHandler\n"
+  "*errorhandler_=0)\n"
+  "\n"
+  "This specification cannot be changed once the Xapian::Enquire is\n"
+  "opened: you must create a new Xapian::Enquire object to access a\n"
+  "different database, or set of databases.\n"
+  "\n"
+  "The database supplied must have been initialised (ie, must not be the\n"
+  "result of calling the Database::Database() constructor). If you need\n"
+  "to handle a situation where you have no index gracefully, a database\n"
+  "created with InMemory::open() can be passed here, which represents a\n"
+  "completely empty database.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "database:  Specification of the database or databases to use.\n"
+  "\n"
+  "errorhandler_:  A pointer to the error handler to use. Ownership of\n"
+  "the object pointed to is not assumed by the Xapian::Enquire object -\n"
+  "the user should delete the Xapian::ErrorHandler object after the\n"
+  "Xapian::Enquire object is deleted. To use no error handler, this\n"
+  "parameter should be 0.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::InvalidArgumentError:  will be thrown if an initialised\n"
+  "Database object is supplied. \n"
+  ""},
+  { (char *)"delete_Enquire", (PyCFunction)_wrap_delete_Enquire, 0x0008, (char *)"\n"
+  "Close the Xapian::Enquire object.\n"
+  "\n"
+  "Xapian::Enquire::~Enquire() \n"
+  ""},
+  { (char *)"Enquire_set_query", _wrap_Enquire_set_query, 0x0001, (char *)"\n"
+  "Set the query to run.\n"
+  "\n"
+  "void Xapian::Enquire::set_query(const Xapian::Query &query,\n"
+  "Xapian::termcount qlen=0)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "query:  the new query to run.\n"
+  "\n"
+  "qlen:  the query length to use in weight calculations - by default the\n"
+  "sum of the wqf of all terms is used. \n"
+  ""},
+  { (char *)"Enquire_get_query", (PyCFunction)_wrap_Enquire_get_query, 0x0008, (char *)"\n"
+  "Get the query which has been set.\n"
+  "\n"
+  "const Xapian::Query& Xapian::Enquire::get_query() const\n"
+  "\n"
+  "This is only valid after set_query() has been called.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::InvalidArgumentError:  will be thrown if query has not yet\n"
+  "been set. \n"
+  ""},
+  { (char *)"Enquire_add_matchspy", _wrap_Enquire_add_matchspy, 0x0001, (char *)"\n"
+  "Add a matchspy.\n"
+  "\n"
+  "void Xapian::Enquire::add_matchspy(MatchSpy *spy)\n"
+  "\n"
+  "This matchspy will be called with some of the documents which match\n"
+  "the query, during the match process. Exactly which of the matching\n"
+  "documents are passed to it depends on exactly when certain\n"
+  "optimisations occur during the match process, but it can be controlled\n"
+  "to some extent by setting the checkatleast parameter to  get_mset().\n"
+  "\n"
+  "In particular, if there are enough matching documents, at least the\n"
+  "number specified by checkatleast will be passed to the matchspy. This\n"
+  "means that you can force the matchspy to be shown all matching\n"
+  "documents by setting checkatleast to the number of documents in the\n"
+  "database.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "spy:  The MatchSpy subclass to add. The caller must ensure that this\n"
+  "remains valid while the Enquire object remains active, or until\n"
+  "clear_matchspies() is called. \n"
+  ""},
+  { (char *)"Enquire_clear_matchspies", (PyCFunction)_wrap_Enquire_clear_matchspies, 0x0008, (char *)"\n"
+  "Remove all the matchspies.\n"
+  "\n"
+  "void Xapian::Enquire::clear_matchspies() \n"
+  ""},
+  { (char *)"Enquire_set_weighting_scheme", _wrap_Enquire_set_weighting_scheme, 0x0001, (char *)"\n"
+  "Set the weighting scheme to use for queries.\n"
+  "\n"
+  "void Xapian::Enquire::set_weighting_scheme(const Weight &weight_)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "weight_:  the new weighting scheme. If no weighting scheme is\n"
+  "specified, the default is BM25 with the default parameters. \n"
+  ""},
+  { (char *)"Enquire_set_collapse_key", _wrap_Enquire_set_collapse_key, 0x0001, (char *)"\n"
+  "Set the collapse key to use for queries.\n"
+  "\n"
+  "void Xapian::Enquire::set_collapse_key(Xapian::valueno collapse_key,\n"
+  "Xapian::doccount collapse_max=1)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "collapse_key:  value number to collapse on - at most one MSet entry\n"
+  "with each particular value will be returned (default is\n"
+  "Xapian::BAD_VALUENO which means no collapsing).\n"
+  "\n"
+  "collapse_max:  Max number of items with the same key to leave after\n"
+  "collapsing (default 1).\n"
+  "\n"
+  "The MSet returned by get_mset() will have only the \"best\" (at most)\n"
+  "collapse_max entries with each particular value of collapse_key\n"
+  "(\"best\" being highest ranked - i.e. highest weight or highest\n"
+  "sorting key).\n"
+  "\n"
+  "An example use might be to create a value for each document containing\n"
+  "an MD5 hash of the document contents. Then duplicate documents from\n"
+  "different sources can be eliminated at search time by collapsing with\n"
+  "collapse_max = 1 (it's better to eliminate duplicates at index time,\n"
+  "but this may not be always be possible - for example the search may be\n"
+  "over more than one Xapian database).\n"
+  "\n"
+  "Another use is to group matches in a particular category (e.g. you\n"
+  "might collapse a mailing list search on the Subject: so that there's\n"
+  "only one result per discussion thread). In this case you can use\n"
+  "get_collapse_count() to give the user some idea how many other results\n"
+  "there are. And if you index the Subject: as a boolean term as well as\n"
+  "putting it in a value, you can offer a link to a non-collapsed search\n"
+  "restricted to that thread using a boolean filter. \n"
+  ""},
+  { (char *)"Enquire_set_docid_order", _wrap_Enquire_set_docid_order, 0x0001, (char *)"\n"
+  "Set the direction in which documents are ordered by document id in the\n"
+  "returned MSet.\n"
+  "\n"
+  "void Xapian::Enquire::set_docid_order(docid_order order)\n"
+  "\n"
+  "This order only has an effect on documents which would otherwise have\n"
+  "equal rank. For a weighted probabilistic match with no sort value,\n"
+  "this means documents with equal weight. For a boolean match, with no\n"
+  "sort value, this means all documents. And if a sort value is used,\n"
+  "this means documents with equal sort value (and also equal weight if\n"
+  "ordering on relevance after the sort).\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "order:  This can be: Xapian::Enquire::ASCENDING docids sort in\n"
+  "ascending order (default)\n"
+  "\n"
+  "Xapian::Enquire::DESCENDING docids sort in descending order\n"
+  "\n"
+  "Xapian::Enquire::DONT_CARE docids sort in whatever order is most\n"
+  "efficient for the backend\n"
+  "\n"
+  "Note: If you add documents in strict date order, then a boolean search\n"
+  "- i.e. set_weighting_scheme(Xapian::BoolWeight()) - with\n"
+  "set_docid_order(Xapian::Enquire::DESCENDING) is a very efficient way\n"
+  "to perform \"sort by date, newest first\". \n"
+  ""},
+  { (char *)"Enquire_set_cutoff", _wrap_Enquire_set_cutoff, 0x0001, (char *)"\n"
+  "Set the percentage and/or weight cutoffs.\n"
+  "\n"
+  "void Xapian::Enquire::set_cutoff(Xapian::percent percent_cutoff,\n"
+  "Xapian::weight weight_cutoff=0)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "percent_cutoff:  Minimum percentage score for returned documents. If a\n"
+  "document has a lower percentage score than this, it will not appear in\n"
+  "the MSet. If your intention is to return only matches which contain\n"
+  "all the terms in the query, then it's more efficient to use\n"
+  "Xapian::Query::OP_AND instead of Xapian::Query::OP_OR in the query\n"
+  "than to use set_cutoff(100). (default 0 => no percentage cut-off).\n"
+  "\n"
+  "weight_cutoff:  Minimum weight for a document to be returned. If a\n"
+  "document has a lower score that this, it will not appear in the MSet.\n"
+  "It is usually only possible to choose an appropriate weight for cutoff\n"
+  "based on the results of a previous run of the same query; this is thus\n"
+  "mainly useful for alerting operations. The other potential use is with\n"
+  "a user specified weighting scheme. (default 0 => no weight cut-off).\n"
+  "\n"
+  ""},
+  { (char *)"Enquire_set_sort_by_relevance", (PyCFunction)_wrap_Enquire_set_sort_by_relevance, 0x0008, (char *)"\n"
+  "Set the sorting to be by relevance only.\n"
+  "\n"
+  "void Xapian::Enquire::set_sort_by_relevance()\n"
+  "\n"
+  "This is the default. \n"
+  ""},
+  { (char *)"Enquire_set_sort_by_value", _wrap_Enquire_set_sort_by_value, 0x0001, (char *)"\n"
+  "void\n"
+  "Xapian::Enquire::set_sort_by_value(Xapian::valueno sort_key) \n"
+  ""},
+  { (char *)"Enquire_set_sort_by_value_then_relevance", _wrap_Enquire_set_sort_by_value_then_relevance, 0x0001, (char *)"\n"
+  "void\n"
+  "Xapian::Enquire::set_sort_by_value_then_relevance(Xapian::valueno\n"
+  "sort_key) \n"
+  ""},
+  { (char *)"Enquire_set_sort_by_relevance_then_value", _wrap_Enquire_set_sort_by_relevance_then_value, 0x0001, (char *)"\n"
+  "void\n"
+  "Xapian::Enquire::set_sort_by_relevance_then_value(Xapian::valueno\n"
+  "sort_key) \n"
+  ""},
+  { (char *)"Enquire_set_sort_by_key", _wrap_Enquire_set_sort_by_key, 0x0001, (char *)"\n"
+  "void\n"
+  "Xapian::Enquire::set_sort_by_key(Xapian::KeyMaker *sorter) \n"
+  ""},
+  { (char *)"Enquire_set_sort_by_key_then_relevance", _wrap_Enquire_set_sort_by_key_then_relevance, 0x0001, (char *)"\n"
+  "void\n"
+  "Xapian::Enquire::set_sort_by_key_then_relevance(Xapian::KeyMaker\n"
+  "*sorter) \n"
+  ""},
+  { (char *)"Enquire_set_sort_by_relevance_then_key", _wrap_Enquire_set_sort_by_relevance_then_key, 0x0001, (char *)"\n"
+  "void\n"
+  "Xapian::Enquire::set_sort_by_relevance_then_key(Xapian::KeyMaker\n"
+  "*sorter) \n"
+  ""},
+  { (char *)"Enquire_get_mset", _wrap_Enquire_get_mset, 0x0001, (char *)"\n"
+  "MSet\n"
+  "Xapian::Enquire::get_mset(Xapian::doccount first, Xapian::doccount\n"
+  "maxitems, const RSet *omrset, const MatchDecider *mdecider=0) const \n"
+  ""},
+  { (char *)"Enquire_get_eset", _wrap_Enquire_get_eset, 0x0001, (char *)"\n"
+  "Get the expand set for the given rset.\n"
+  "\n"
+  "ESet Xapian::Enquire::get_eset(Xapian::termcount maxitems, const RSet\n"
+  "&omrset, const Xapian::ExpandDecider *edecider) const\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "maxitems:  the maximum number of items to return.\n"
+  "\n"
+  "omrset:  the relevance set to use when performing the expand\n"
+  "operation.\n"
+  "\n"
+  "edecider:  a decision functor to use to decide whether a given term\n"
+  "should be put in the ESet\n"
+  "\n"
+  "An ESet object containing the results of the expand.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::InvalidArgumentError:  See class documentation. \n"
+  ""},
+  { (char *)"Enquire_get_matching_terms_begin", _wrap_Enquire_get_matching_terms_begin, 0x0001, (char *)"\n"
+  "Get terms which match a given document, by match set item.\n"
+  "\n"
+  "TermIterator Xapian::Enquire::get_matching_terms_begin(const\n"
+  "MSetIterator &it) const\n"
+  "\n"
+  "This method returns the terms in the current query which match the\n"
+  "given document.\n"
+  "\n"
+  "If the underlying database has suitable support, using this call\n"
+  "(rather than passing a Xapian::docid) will enable the system to ensure\n"
+  "that the correct data is returned, and that the document has not been\n"
+  "deleted or changed since the query was performed.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "it:  The iterator for which to retrieve the matching terms.\n"
+  "\n"
+  "An iterator returning the terms which match the document. The terms\n"
+  "will be returned (as far as this makes any sense) in the same order as\n"
+  "the terms in the query. Terms will not occur more than once, even if\n"
+  "they do in the query.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::InvalidArgumentError:  See class documentation.\n"
+  "\n"
+  "Xapian::DocNotFoundError:  The document specified could not be found\n"
+  "in the database. \n"
+  ""},
+  { (char *)"Enquire_get_matching_terms_end", _wrap_Enquire_get_matching_terms_end, 0x0001, (char *)"\n"
+  "End iterator corresponding to get_matching_terms_begin().\n"
+  "\n"
+  "TermIterator Xapian::Enquire::get_matching_terms_end(const\n"
+  "MSetIterator &) const \n"
+  ""},
+  { (char *)"Enquire_get_matching_terms", _wrap_Enquire_get_matching_terms, 0x0001, __null},
+  { (char *)"Enquire___str__", (PyCFunction)_wrap_Enquire___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::Enquire::get_description() const \n"
+  ""},
+  { (char *)"Enquire_swigregister", Enquire_swigregister, 0x0001, __null},
+  { (char *)"Enquire_swiginit", Enquire_swiginit, 0x0001, __null},
+  { (char *)"new_Registry", _wrap_new_Registry, 0x0001, (char *)"\n"
+  "Default constructor.\n"
+  "\n"
+  "Xapian::Registry::Registry()\n"
+  "\n"
+  "The registry will contain all standard subclasses of user-subclassable\n"
+  "classes. \n"
+  ""},
+  { (char *)"delete_Registry", (PyCFunction)_wrap_delete_Registry, 0x0008, (char *)"Xapian::Registry::~Registry() "},
+  { (char *)"Registry_register_weighting_scheme", _wrap_Registry_register_weighting_scheme, 0x0001, (char *)"\n"
+  "Register a weighting scheme.\n"
+  "\n"
+  "void Xapian::Registry::register_weighting_scheme(const Xapian::Weight\n"
+  "&wt) \n"
+  ""},
+  { (char *)"Registry_get_weighting_scheme", _wrap_Registry_get_weighting_scheme, 0x0001, (char *)"\n"
+  "Get the weighting scheme given a name.\n"
+  "\n"
+  "const Xapian::Weight* Xapian::Registry::get_weighting_scheme(const\n"
+  "std::string &name) const\n"
+  "\n"
+  "The returned weighting scheme is owned by the registry object.\n"
+  "\n"
+  "Returns NULL if the weighting scheme could not be found. \n"
+  ""},
+  { (char *)"Registry_register_posting_source", _wrap_Registry_register_posting_source, 0x0001, (char *)"\n"
+  "Register a user-defined posting source class.\n"
+  "\n"
+  "void Xapian::Registry::register_posting_source(const\n"
+  "Xapian::PostingSource &source) \n"
+  ""},
+  { (char *)"Registry_get_posting_source", _wrap_Registry_get_posting_source, 0x0001, (char *)"\n"
+  "Get a posting source given a name.\n"
+  "\n"
+  "const Xapian::PostingSource*\n"
+  "Xapian::Registry::get_posting_source(const std::string &name) const\n"
+  "\n"
+  "The returned posting source is owned by the registry object.\n"
+  "\n"
+  "Returns NULL if the posting source could not be found. \n"
+  ""},
+  { (char *)"Registry_register_match_spy", _wrap_Registry_register_match_spy, 0x0001, (char *)"\n"
+  "Register a user-defined match spy class.\n"
+  "\n"
+  "void Xapian::Registry::register_match_spy(const Xapian::MatchSpy &spy)\n"
+  "\n"
+  ""},
+  { (char *)"Registry_get_match_spy", _wrap_Registry_get_match_spy, 0x0001, (char *)"\n"
+  "Get a match spy given a name.\n"
+  "\n"
+  "const Xapian::MatchSpy* Xapian::Registry::get_match_spy(const\n"
+  "std::string &name) const\n"
+  "\n"
+  "The returned match spy is owned by the registry object.\n"
+  "\n"
+  "Returns NULL if the match spy could not be found. \n"
+  ""},
+  { (char *)"Registry_swigregister", Registry_swigregister, 0x0001, __null},
+  { (char *)"Registry_swiginit", Registry_swiginit, 0x0001, __null},
+  { (char *)"delete_Weight", (PyCFunction)_wrap_delete_Weight, 0x0008, (char *)"\n"
+  "Virtual destructor, because we have virtual methods.\n"
+  "\n"
+  "virtual Xapian::Weight::~Weight() \n"
+  ""},
+  { (char *)"Weight_name", (PyCFunction)_wrap_Weight_name, 0x0008, (char *)"\n"
+  "Return the name of this weighting scheme.\n"
+  "\n"
+  "virtual std::string Xapian::Weight::name() const\n"
+  "\n"
+  "This name is used by the remote backend. It is passed along with the\n"
+  "serialised parameters to the remote server so that it knows which\n"
+  "class to create.\n"
+  "\n"
+  "Return the full namespace-qualified name of your class here - if your\n"
+  "class is called FooWeight, return \"FooWeight\" from this method (\n"
+  "Xapian::BM25Weight returns \"Xapian::BM25Weight\" here).\n"
+  "\n"
+  "If you don't want to support the remote backend, you can use the\n"
+  "default implementation which simply returns an empty string. \n"
+  ""},
+  { (char *)"Weight_get_sumpart", _wrap_Weight_get_sumpart, 0x0001, (char *)"\n"
+  "Calculate the weight contribution for this object's term to a\n"
+  "document.\n"
+  "\n"
+  "virtual Xapian::weight Xapian::Weight::get_sumpart(Xapian::termcount\n"
+  "wdf, Xapian::termcount doclen) const =0\n"
+  "\n"
+  "The parameters give information about the document which may be used\n"
+  "in the calculations:\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "wdf:  The within document frequency of the term in the document.\n"
+  "\n"
+  "doclen:  The document's length (unnormalised). \n"
+  ""},
+  { (char *)"Weight_get_maxpart", (PyCFunction)_wrap_Weight_get_maxpart, 0x0008, (char *)"\n"
+  "Return an upper bound on what get_sumpart() can return for any\n"
+  "document.\n"
+  "\n"
+  "virtual Xapian::weight Xapian::Weight::get_maxpart() const =0\n"
+  "\n"
+  "This information is used by the matcher to perform various\n"
+  "optimisations, so strive to make the bound as tight as possible. \n"
+  ""},
+  { (char *)"Weight_get_sumextra", _wrap_Weight_get_sumextra, 0x0001, (char *)"\n"
+  "Calculate the term-independent weight component for a document.\n"
+  "\n"
+  "virtual Xapian::weight Xapian::Weight::get_sumextra(Xapian::termcount\n"
+  "doclen) const =0\n"
+  "\n"
+  "The parameter gives information about the document which may be used\n"
+  "in the calculations:\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "doclen:  The document's length (unnormalised). \n"
+  ""},
+  { (char *)"Weight_get_maxextra", (PyCFunction)_wrap_Weight_get_maxextra, 0x0008, (char *)"\n"
+  "Return an upper bound on what get_sumextra() can return for any\n"
+  "document.\n"
+  "\n"
+  "virtual Xapian::weight Xapian::Weight::get_maxextra() const =0\n"
+  "\n"
+  "This information is used by the matcher to perform various\n"
+  "optimisations, so strive to make the bound as tight as possible. \n"
+  ""},
+  { (char *)"Weight_get_sumpart_needs_doclength_", (PyCFunction)_wrap_Weight_get_sumpart_needs_doclength_, 0x0008, __null},
+  { (char *)"Weight_get_sumpart_needs_wdf_", (PyCFunction)_wrap_Weight_get_sumpart_needs_wdf_, 0x0008, __null},
+  { (char *)"Weight_swigregister", Weight_swigregister, 0x0001, __null},
+  { (char *)"new_BoolWeight", (PyCFunction)_wrap_new_BoolWeight, 0x0004, (char *)"\n"
+  "Construct a BoolWeight.\n"
+  "\n"
+  "Xapian::BoolWeight::BoolWeight() \n"
+  ""},
+  { (char *)"delete_BoolWeight", (PyCFunction)_wrap_delete_BoolWeight, 0x0008, __null},
+  { (char *)"BoolWeight_swigregister", BoolWeight_swigregister, 0x0001, __null},
+  { (char *)"BoolWeight_swiginit", BoolWeight_swiginit, 0x0001, __null},
+  { (char *)"new_BM25Weight", _wrap_new_BM25Weight, 0x0001, (char *)"Xapian::BM25Weight::BM25Weight() "},
+  { (char *)"delete_BM25Weight", (PyCFunction)_wrap_delete_BM25Weight, 0x0008, __null},
+  { (char *)"BM25Weight_swigregister", BM25Weight_swigregister, 0x0001, __null},
+  { (char *)"BM25Weight_swiginit", BM25Weight_swiginit, 0x0001, __null},
+  { (char *)"new_TradWeight", _wrap_new_TradWeight, 0x0001, (char *)"\n"
+  "Construct a TradWeight.\n"
+  "\n"
+  "Xapian::TradWeight::TradWeight(double k=1.0)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "k:  A non-negative parameter controlling how influential within-\n"
+  "document- frequency (wdf) and document length are. k=0 means that wdf\n"
+  "and document length don't affect the weights. The larger k1 is, the\n"
+  "more they do. (default 1) \n"
+  ""},
+  { (char *)"delete_TradWeight", (PyCFunction)_wrap_delete_TradWeight, 0x0008, __null},
+  { (char *)"TradWeight_swigregister", TradWeight_swigregister, 0x0001, __null},
+  { (char *)"TradWeight_swiginit", TradWeight_swiginit, 0x0001, __null},
+  { (char *)"new_MatchSpy", (PyCFunction)_wrap_new_MatchSpy, 0x0008, __null},
+  { (char *)"delete_MatchSpy", (PyCFunction)_wrap_delete_MatchSpy, 0x0008, (char *)"\n"
+  "Virtual destructor, because we have virtual methods.\n"
+  "\n"
+  "virtual Xapian::MatchSpy::~MatchSpy() \n"
+  ""},
+  { (char *)"MatchSpy___call__", _wrap_MatchSpy___call__, 0x0001, __null},
+  { (char *)"MatchSpy_name", (PyCFunction)_wrap_MatchSpy_name, 0x0008, (char *)"\n"
+  "Return the name of this match spy.\n"
+  "\n"
+  "virtual std::string Xapian::MatchSpy::name() const\n"
+  "\n"
+  "This name is used by the remote backend. It is passed with the\n"
+  "serialised parameters to the remote server so that it knows which\n"
+  "class to create.\n"
+  "\n"
+  "Return the full namespace-qualified name of your class here - if your\n"
+  "class is called MyApp::FooMatchSpy, return \"MyApp::FooMatchSpy\" from\n"
+  "this method.\n"
+  "\n"
+  "If you don't want to support the remote backend in your match spy, you\n"
+  "can use the default implementation which simply throws\n"
+  "Xapian::UnimplementedError. \n"
+  ""},
+  { (char *)"MatchSpy_merge_results", _wrap_MatchSpy_merge_results, 0x0001, (char *)"\n"
+  "Unserialise some results, and merge them into this matchspy.\n"
+  "\n"
+  "virtual void Xapian::MatchSpy::merge_results(const std::string &s)\n"
+  "\n"
+  "The order in which results are merged should not be significant, since\n"
+  "this order is not specified (and will vary depending on the speed of\n"
+  "the search in each sub-database).\n"
+  "\n"
+  "If you don't want to support the remote backend in your match spy, you\n"
+  "can use the default implementation which simply throws\n"
+  "Xapian::UnimplementedError. \n"
+  ""},
+  { (char *)"MatchSpy___str__", (PyCFunction)_wrap_MatchSpy___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "virtual std::string Xapian::MatchSpy::get_description() const\n"
+  "\n"
+  "This default implementation returns a generic answer, to avoid forcing\n"
+  "those deriving their own MatchSpy subclasses from having to implement\n"
+  "this (they may not care what get_description() gives for their\n"
+  "subclass). \n"
+  ""},
+  { (char *)"disown_MatchSpy", (PyCFunction)_wrap_disown_MatchSpy, 0x0008, __null},
+  { (char *)"MatchSpy_swigregister", MatchSpy_swigregister, 0x0001, __null},
+  { (char *)"MatchSpy_swiginit", MatchSpy_swiginit, 0x0001, __null},
+  { (char *)"new_ValueCountMatchSpy", _wrap_new_ValueCountMatchSpy, 0x0001, (char *)"\n"
+  "Construct a MatchSpy which counts the values in a particular slot.\n"
+  "\n"
+  "Xapian::ValueCountMatchSpy::ValueCountMatchSpy(Xapian::valueno slot_)\n"
+  "\n"
+  ""},
+  { (char *)"ValueCountMatchSpy_get_total", (PyCFunction)_wrap_ValueCountMatchSpy_get_total, 0x0008, (char *)"\n"
+  "Return the total number of documents tallied.\n"
+  "\n"
+  "size_t Xapian::ValueCountMatchSpy::get_total() const \n"
+  ""},
+  { (char *)"ValueCountMatchSpy_values_begin", (PyCFunction)_wrap_ValueCountMatchSpy_values_begin, 0x0008, (char *)"\n"
+  "Get an iterator over the values seen in the slot.\n"
+  "\n"
+  "TermIterator Xapian::ValueCountMatchSpy::values_begin() const\n"
+  "\n"
+  "Items will be returned in ascending alphabetical order.\n"
+  "\n"
+  "During the iteration, the frequency of the current value can be\n"
+  "obtained with the get_termfreq() method on the iterator. \n"
+  ""},
+  { (char *)"ValueCountMatchSpy_values_end", (PyCFunction)_wrap_ValueCountMatchSpy_values_end, 0x0008, (char *)"\n"
+  "End iterator corresponding to values_begin().\n"
+  "\n"
+  "TermIterator Xapian::ValueCountMatchSpy::values_end() const \n"
+  ""},
+  { (char *)"ValueCountMatchSpy_top_values_begin", _wrap_ValueCountMatchSpy_top_values_begin, 0x0001, (char *)"\n"
+  "Get an iterator over the most frequent values seen in the slot.\n"
+  "\n"
+  "TermIterator Xapian::ValueCountMatchSpy::top_values_begin(size_t\n"
+  "maxvalues) const\n"
+  "\n"
+  "Items will be returned in descending order of frequency. Values with\n"
+  "the same frequency will be returned in ascending alphabetical order.\n"
+  "\n"
+  "During the iteration, the frequency of the current value can be\n"
+  "obtained with the get_termfreq() method on the iterator.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "maxvalues:  The maximum number of values to return. \n"
+  ""},
+  { (char *)"ValueCountMatchSpy_top_values_end", _wrap_ValueCountMatchSpy_top_values_end, 0x0001, (char *)"\n"
+  "End iterator corresponding to top_values_begin().\n"
+  "\n"
+  "TermIterator Xapian::ValueCountMatchSpy::top_values_end(size_t) const\n"
+  "\n"
+  ""},
+  { (char *)"delete_ValueCountMatchSpy", (PyCFunction)_wrap_delete_ValueCountMatchSpy, 0x0008, __null},
+  { (char *)"ValueCountMatchSpy_swigregister", ValueCountMatchSpy_swigregister, 0x0001, __null},
+  { (char *)"ValueCountMatchSpy_swiginit", ValueCountMatchSpy_swiginit, 0x0001, __null},
+  { (char *)"Database_add_database", _wrap_Database_add_database, 0x0001, (char *)"\n"
+  "Add an existing database (or group of databases) to those accessed by\n"
+  "this object.\n"
+  "\n"
+  "void Xapian::Database::add_database(const Database &database)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "database:  the database(s) to add. \n"
+  ""},
+  { (char *)"delete_Database", (PyCFunction)_wrap_delete_Database, 0x0008, (char *)"\n"
+  "Destroy this handle on the database.\n"
+  "\n"
+  "virtual Xapian::Database::~Database()\n"
+  "\n"
+  "If there are no copies of this object remaining, the database(s) will\n"
+  "be closed. \n"
+  ""},
+  { (char *)"new_Database", _wrap_new_Database, 0x0001, (char *)"\n"
+  "Copying is allowed.\n"
+  "\n"
+  "Xapian::Database::Database(const Database &other)\n"
+  "\n"
+  "The internals are reference counted, so copying is cheap. \n"
+  ""},
+  { (char *)"Database_reopen", (PyCFunction)_wrap_Database_reopen, 0x0008, (char *)"\n"
+  "Re-open the database.\n"
+  "\n"
+  "void Xapian::Database::reopen()\n"
+  "\n"
+  "This re-opens the database(s) to the latest available version(s). It\n"
+  "can be used either to make sure the latest results are returned, or to\n"
+  "recover from a Xapian::DatabaseModifiedError.\n"
+  "\n"
+  "Calling reopen() on a database which has been closed (with  close())\n"
+  "will always raise a Xapian::DatabaseError. \n"
+  ""},
+  { (char *)"Database_close", (PyCFunction)_wrap_Database_close, 0x0008, (char *)"\n"
+  "Close the database.\n"
+  "\n"
+  "virtual void Xapian::Database::close()\n"
+  "\n"
+  "This closes the database and releases all file handles held by the\n"
+  "database.\n"
+  "\n"
+  "This is a permanent close of the database: calling reopen() after\n"
+  "closing a database will not reopen it, and will raise an exception.\n"
+  "\n"
+  "Calling close() on a database which is already closed has no effect\n"
+  "(and doesn't raise an exception).\n"
+  "\n"
+  "After this call, calls made to methods of the database (other than\n"
+  "close() or the destructor), or to objects associated with the database\n"
+  "will behave in one of the following ways (but which behaviour happens\n"
+  "may vary between releases, and between database backends):\n"
+  "\n"
+  "raise a Xapian::DatabaseError indicating that the database is closed.\n"
+  "\n"
+  "behave exactly as they would have done if the database had not been\n"
+  "closed (by using cached data).\n"
+  "\n"
+  "To summarise - you should not rely on the exception being raised, or\n"
+  "the normal result being available, but if you do get a result, it will\n"
+  "be correct. \n"
+  ""},
+  { (char *)"Database___str__", (PyCFunction)_wrap_Database___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "virtual std::string Xapian::Database::get_description() const \n"
+  ""},
+  { (char *)"Database_postlist_begin", _wrap_Database_postlist_begin, 0x0001, (char *)"\n"
+  "An iterator pointing to the start of the postlist for a given term.\n"
+  "\n"
+  "PostingIterator Xapian::Database::postlist_begin(const std::string\n"
+  "&tname) const\n"
+  "\n"
+  "If the term name is the empty string, the iterator returned will list\n"
+  "all the documents in the database. Such an iterator will always return\n"
+  "a WDF value of 1, since there is no obvious meaning for this quantity\n"
+  "in this case. \n"
+  ""},
+  { (char *)"Database_postlist_end", _wrap_Database_postlist_end, 0x0001, (char *)"\n"
+  "Corresponding end iterator to postlist_begin().\n"
+  "\n"
+  "PostingIterator Xapian::Database::postlist_end(const std::string &)\n"
+  "const \n"
+  ""},
+  { (char *)"Database_termlist_begin", _wrap_Database_termlist_begin, 0x0001, (char *)"\n"
+  "An iterator pointing to the start of the termlist for a given\n"
+  "document.\n"
+  "\n"
+  "TermIterator Xapian::Database::termlist_begin(Xapian::docid did) const\n"
+  "\n"
+  ""},
+  { (char *)"Database_termlist_end", _wrap_Database_termlist_end, 0x0001, (char *)"\n"
+  "Corresponding end iterator to termlist_begin().\n"
+  "\n"
+  "TermIterator Xapian::Database::termlist_end(Xapian::docid) const \n"
+  ""},
+  { (char *)"Database_positionlist_begin", _wrap_Database_positionlist_begin, 0x0001, (char *)"\n"
+  "An iterator pointing to the start of the position list for a given\n"
+  "term in a given document.\n"
+  "\n"
+  "PositionIterator Xapian::Database::positionlist_begin(Xapian::docid\n"
+  "did, const std::string &tname) const \n"
+  ""},
+  { (char *)"Database_positionlist_end", _wrap_Database_positionlist_end, 0x0001, (char *)"\n"
+  "Corresponding end iterator to positionlist_begin().\n"
+  "\n"
+  "PositionIterator Xapian::Database::positionlist_end(Xapian::docid,\n"
+  "const std::string &) const \n"
+  ""},
+  { (char *)"Database_allterms_begin", _wrap_Database_allterms_begin, 0x0001, (char *)"\n"
+  "An iterator which runs across all terms with a given prefix.\n"
+  "\n"
+  "TermIterator Xapian::Database::allterms_begin(const std::string\n"
+  "&prefix) const\n"
+  "\n"
+  "This is functionally similar to getting an iterator with\n"
+  "allterms_begin() and then calling skip_to(prefix) on that iterator to\n"
+  "move to the start of the prefix, but is more convenient (because it\n"
+  "detects the end of the prefixed terms), and may be more efficient than\n"
+  "simply calling skip_to() after opening the iterator, particularly for\n"
+  "remote databases.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "prefix:  The prefix to restrict the returned terms to. \n"
+  ""},
+  { (char *)"Database_allterms_end", _wrap_Database_allterms_end, 0x0001, (char *)"\n"
+  "Corresponding end iterator to allterms_begin(prefix).\n"
+  "\n"
+  "TermIterator Xapian::Database::allterms_end(const std::string &) const\n"
+  "\n"
+  ""},
+  { (char *)"Database_get_doccount", (PyCFunction)_wrap_Database_get_doccount, 0x0008, (char *)"\n"
+  "Get the number of documents in the database.\n"
+  "\n"
+  "Xapian::doccount Xapian::Database::get_doccount() const \n"
+  ""},
+  { (char *)"Database_get_lastdocid", (PyCFunction)_wrap_Database_get_lastdocid, 0x0008, (char *)"\n"
+  "Get the highest document id which has been used in the database.\n"
+  "\n"
+  "Xapian::docid Xapian::Database::get_lastdocid() const \n"
+  ""},
+  { (char *)"Database_get_avlength", (PyCFunction)_wrap_Database_get_avlength, 0x0008, (char *)"\n"
+  "Get the average length of the documents in the database.\n"
+  "\n"
+  "Xapian::doclength Xapian::Database::get_avlength() const \n"
+  ""},
+  { (char *)"Database_get_termfreq", _wrap_Database_get_termfreq, 0x0001, (char *)"\n"
+  "Get the number of documents in the database indexed by a given term.\n"
+  "\n"
+  "Xapian::doccount Xapian::Database::get_termfreq(const std::string\n"
+  "&tname) const \n"
+  ""},
+  { (char *)"Database_term_exists", _wrap_Database_term_exists, 0x0001, (char *)"\n"
+  "Check if a given term exists in the database.\n"
+  "\n"
+  "bool Xapian::Database::term_exists(const std::string &tname) const\n"
+  "\n"
+  "Return true if and only if the term exists in the database. This is\n"
+  "the same as (get_termfreq(tname) != 0), but will often be more\n"
+  "efficient. \n"
+  ""},
+  { (char *)"Database_get_collection_freq", _wrap_Database_get_collection_freq, 0x0001, (char *)"\n"
+  "Return the total number of occurrences of the given term.\n"
+  "\n"
+  "Xapian::termcount Xapian::Database::get_collection_freq(const\n"
+  "std::string &tname) const\n"
+  "\n"
+  "This is the sum of the number of occurrences of the term in each\n"
+  "document it indexes: i.e., the sum of the within document frequencies\n"
+  "of the term.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "tname:  The term whose collection frequency is being requested. \n"
+  ""},
+  { (char *)"Database_get_value_freq", _wrap_Database_get_value_freq, 0x0001, (char *)"\n"
+  "Return the frequency of a given value slot.\n"
+  "\n"
+  "Xapian::doccount Xapian::Database::get_value_freq(Xapian::valueno\n"
+  "valno) const\n"
+  "\n"
+  "This is the number of documents which have a (non-empty) value stored\n"
+  "in the slot.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "valno:  The value slot to examine.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "UnimplementedError:  The frequency of the value isn't available for\n"
+  "this database type. \n"
+  ""},
+  { (char *)"Database_get_value_lower_bound", _wrap_Database_get_value_lower_bound, 0x0001, (char *)"\n"
+  "Get a lower bound on the values stored in the given value slot.\n"
+  "\n"
+  "std::string Xapian::Database::get_value_lower_bound(Xapian::valueno\n"
+  "valno) const\n"
+  "\n"
+  "If there are no values stored in the given value slot, this will\n"
+  "return an empty string.\n"
+  "\n"
+  "If the lower bound isn't available for the given database type, this\n"
+  "will return the lowest possible bound - the empty string.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "valno:  The value slot to examine. \n"
+  ""},
+  { (char *)"Database_get_value_upper_bound", _wrap_Database_get_value_upper_bound, 0x0001, (char *)"\n"
+  "Get an upper bound on the values stored in the given value slot.\n"
+  "\n"
+  "std::string Xapian::Database::get_value_upper_bound(Xapian::valueno\n"
+  "valno) const\n"
+  "\n"
+  "If there are no values stored in the given value slot, this will\n"
+  "return an empty string.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "valno:  The value slot to examine.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "UnimplementedError:  The upper bound of the values isn't available for\n"
+  "this database type. \n"
+  ""},
+  { (char *)"Database_get_doclength_lower_bound", (PyCFunction)_wrap_Database_get_doclength_lower_bound, 0x0008, (char *)"\n"
+  "Get a lower bound on the length of a document in this DB.\n"
+  "\n"
+  "Xapian::termcount Xapian::Database::get_doclength_lower_bound() const\n"
+  "\n"
+  "This bound does not include any zero-length documents. \n"
+  ""},
+  { (char *)"Database_get_doclength_upper_bound", (PyCFunction)_wrap_Database_get_doclength_upper_bound, 0x0008, (char *)"\n"
+  "Get an upper bound on the length of a document in this DB.\n"
+  "\n"
+  "Xapian::termcount Xapian::Database::get_doclength_upper_bound() const\n"
+  "\n"
+  ""},
+  { (char *)"Database_get_wdf_upper_bound", _wrap_Database_get_wdf_upper_bound, 0x0001, (char *)"\n"
+  "Get an upper bound on the wdf of term term.\n"
+  "\n"
+  "Xapian::termcount Xapian::Database::get_wdf_upper_bound(const\n"
+  "std::string &term) const \n"
+  ""},
+  { (char *)"Database_valuestream_begin", _wrap_Database_valuestream_begin, 0x0001, (char *)"\n"
+  "Return an iterator over the value in slot slot for each document.\n"
+  "\n"
+  "ValueIterator Xapian::Database::valuestream_begin(Xapian::valueno\n"
+  "slot) const \n"
+  ""},
+  { (char *)"Database_valuestream_end", _wrap_Database_valuestream_end, 0x0001, (char *)"\n"
+  "Return end iterator corresponding to valuestream_begin().\n"
+  "\n"
+  "ValueIteratorEnd_ Xapian::Database::valuestream_end(Xapian::valueno)\n"
+  "const \n"
+  ""},
+  { (char *)"Database_get_doclength", _wrap_Database_get_doclength, 0x0001, (char *)"\n"
+  "Get the length of a document.\n"
+  "\n"
+  "Xapian::termcount Xapian::Database::get_doclength(Xapian::docid did)\n"
+  "const \n"
+  ""},
+  { (char *)"Database_keep_alive", (PyCFunction)_wrap_Database_keep_alive, 0x0008, (char *)"\n"
+  "Send a \"keep-alive\" to remote databases to stop them timing out.\n"
+  "\n"
+  "void Xapian::Database::keep_alive()\n"
+  "\n"
+  "Has no effect on non-remote databases. \n"
+  ""},
+  { (char *)"Database_get_document", _wrap_Database_get_document, 0x0001, (char *)"\n"
+  "Get a document from the database, given its document id.\n"
+  "\n"
+  "Xapian::Document Xapian::Database::get_document(Xapian::docid did)\n"
+  "const\n"
+  "\n"
+  "This method returns a Xapian::Document object which provides the\n"
+  "information about a document.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "did:  The document id of the document to retrieve.\n"
+  "\n"
+  "A Xapian::Document object containing the document data\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::DocNotFoundError:  The document specified could not be found\n"
+  "in the database. \n"
+  ""},
+  { (char *)"Database_get_spelling_suggestion", _wrap_Database_get_spelling_suggestion, 0x0001, (char *)"\n"
+  "Suggest a spelling correction.\n"
+  "\n"
+  "std::string Xapian::Database::get_spelling_suggestion(const\n"
+  "std::string &word, unsigned max_edit_distance=2) const\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "word:  The potentially misspelled word.\n"
+  "\n"
+  "max_edit_distance:  Only consider words which are at most\n"
+  "max_edit_distance edits from word. An edit is a character insertion,\n"
+  "deletion, or the transposition of two adjacent characters (default is\n"
+  "2). \n"
+  ""},
+  { (char *)"Database_spellings_begin", (PyCFunction)_wrap_Database_spellings_begin, 0x0008, (char *)"\n"
+  "An iterator which returns all the spelling correction targets.\n"
+  "\n"
+  "Xapian::TermIterator Xapian::Database::spellings_begin() const\n"
+  "\n"
+  "This returns all the words which are considered as targets for the\n"
+  "spelling correction algorithm. The frequency of each word is available\n"
+  "as the term frequency of each entry in the returned iterator. \n"
+  ""},
+  { (char *)"Database_spellings_end", (PyCFunction)_wrap_Database_spellings_end, 0x0008, (char *)"\n"
+  "Corresponding end iterator to spellings_begin().\n"
+  "\n"
+  "Xapian::TermIterator Xapian::Database::spellings_end() const \n"
+  ""},
+  { (char *)"Database_synonyms_begin", _wrap_Database_synonyms_begin, 0x0001, (char *)"\n"
+  "An iterator which returns all the synonyms for a given term.\n"
+  "\n"
+  "Xapian::TermIterator Xapian::Database::synonyms_begin(const\n"
+  "std::string &term) const\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "term:  The term to return synonyms for. \n"
+  ""},
+  { (char *)"Database_synonyms_end", _wrap_Database_synonyms_end, 0x0001, (char *)"\n"
+  "Corresponding end iterator to synonyms_begin(term).\n"
+  "\n"
+  "Xapian::TermIterator Xapian::Database::synonyms_end(const std::string\n"
+  "&) const \n"
+  ""},
+  { (char *)"Database_synonym_keys_begin", _wrap_Database_synonym_keys_begin, 0x0001, (char *)"\n"
+  "An iterator which returns all terms which have synonyms.\n"
+  "\n"
+  "Xapian::TermIterator Xapian::Database::synonym_keys_begin(const\n"
+  "std::string &prefix=std::string()) const\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "prefix:  If non-empty, only terms with this prefix are returned. \n"
+  ""},
+  { (char *)"Database_synonym_keys_end", _wrap_Database_synonym_keys_end, 0x0001, (char *)"\n"
+  "Corresponding end iterator to synonym_keys_begin(prefix).\n"
+  "\n"
+  "Xapian::TermIterator Xapian::Database::synonym_keys_end(const\n"
+  "std::string &=std::string()) const \n"
+  ""},
+  { (char *)"Database_get_metadata", _wrap_Database_get_metadata, 0x0001, (char *)"\n"
+  "Get the user-specified metadata associated with a given key.\n"
+  "\n"
+  "std::string Xapian::Database::get_metadata(const std::string &key)\n"
+  "const\n"
+  "\n"
+  "User-specified metadata allows you to store arbitrary information in\n"
+  "the form of (key,tag) pairs. See  WritableDatabase::set_metadata() for\n"
+  "more information.\n"
+  "\n"
+  "When invoked on a Xapian::Database object representing multiple\n"
+  "databases, currently only the metadata for the first is considered but\n"
+  "this behaviour may change in the future.\n"
+  "\n"
+  "If there is no piece of metadata associated with the specified key, an\n"
+  "empty string is returned (this applies even for backends which don't\n"
+  "support metadata).\n"
+  "\n"
+  "Empty keys are not valid, and specifying one will cause an exception.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "key:  The key of the metadata item to access.\n"
+  "\n"
+  "The retrieved metadata item's value.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::InvalidArgumentError:  will be thrown if the key supplied is\n"
+  "empty. \n"
+  ""},
+  { (char *)"Database__metadata_keys_begin", _wrap_Database__metadata_keys_begin, 0x0001, (char *)"\n"
+  "An iterator which returns all user-specified metadata keys.\n"
+  "\n"
+  "Xapian::TermIterator Xapian::Database::metadata_keys_begin(const\n"
+  "std::string &prefix=std::string()) const\n"
+  "\n"
+  "When invoked on a Xapian::Database object representing multiple\n"
+  "databases, currently only the metadata for the first is considered but\n"
+  "this behaviour may change in the future.\n"
+  "\n"
+  "If the backend doesn't support metadata, then this method returns an\n"
+  "iterator which compares equal to that returned by metadata_keys_end().\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "prefix:  If non-empty, only keys with this prefix are returned.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::UnimplementedError:  will be thrown if the backend implements\n"
+  "user-specified metadata, but doesn't implement iterating its keys\n"
+  "(currently this happens for the InMemory backend). \n"
+  ""},
+  { (char *)"Database__metadata_keys_end", _wrap_Database__metadata_keys_end, 0x0001, (char *)"\n"
+  "Corresponding end iterator to metadata_keys_begin().\n"
+  "\n"
+  "Xapian::TermIterator Xapian::Database::metadata_keys_end(const\n"
+  "std::string &=std::string()) const \n"
+  ""},
+  { (char *)"Database_get_uuid", (PyCFunction)_wrap_Database_get_uuid, 0x0008, (char *)"\n"
+  "Get a UUID for the database.\n"
+  "\n"
+  "std::string Xapian::Database::get_uuid() const\n"
+  "\n"
+  "The UUID will persist for the lifetime of the database.\n"
+  "\n"
+  "Replicas (eg, made with the replication protocol, or by copying all\n"
+  "the database files) will have the same UUID. However, copies (made\n"
+  "with copydatabase, or xapian-compact) will have different UUIDs.\n"
+  "\n"
+  "If the backend does not support UUIDs or this database has no\n"
+  "subdatabases, the UUID will be empty.\n"
+  "\n"
+  "If this database has multiple sub-databases, the UUID string will\n"
+  "contain the UUIDs of all the sub-databases. \n"
+  ""},
+  { (char *)"Database_swigregister", Database_swigregister, 0x0001, __null},
+  { (char *)"Database_swiginit", Database_swiginit, 0x0001, __null},
+  { (char *)"delete_WritableDatabase", (PyCFunction)_wrap_delete_WritableDatabase, 0x0008, (char *)"\n"
+  "Destroy this handle on the database.\n"
+  "\n"
+  "virtual Xapian::WritableDatabase::~WritableDatabase()\n"
+  "\n"
+  "If there are no copies of this object remaining, the database will be\n"
+  "closed. If there are any transactions in progress these will be\n"
+  "aborted as if cancel_transaction had been called. \n"
+  ""},
+  { (char *)"new_WritableDatabase", _wrap_new_WritableDatabase, 0x0001, (char *)"\n"
+  "Copying is allowed.\n"
+  "\n"
+  "Xapian::WritableDatabase::WritableDatabase(const WritableDatabase\n"
+  "&other)\n"
+  "\n"
+  "The internals are reference counted, so copying is cheap. \n"
+  ""},
+  { (char *)"WritableDatabase_commit", (PyCFunction)_wrap_WritableDatabase_commit, 0x0008, (char *)"\n"
+  "Commit any pending modifications made to the database.\n"
+  "\n"
+  "void Xapian::WritableDatabase::commit()\n"
+  "\n"
+  "For efficiency reasons, when performing multiple updates to a database\n"
+  "it is best (indeed, almost essential) to make as many modifications as\n"
+  "memory will permit in a single pass through the database. To ensure\n"
+  "this, Xapian batches up modifications.\n"
+  "\n"
+  "This method may be called at any time to commit any pending\n"
+  "modifications to the database.\n"
+  "\n"
+  "If any of the modifications fail, an exception will be thrown and the\n"
+  "database will be left in a state in which each separate addition,\n"
+  "replacement or deletion operation has either been fully performed or\n"
+  "not performed at all: it is then up to the application to work out\n"
+  "which operations need to be repeated.\n"
+  "\n"
+  "It's not valid to call commit() within a transaction.\n"
+  "\n"
+  "Beware of calling commit() too frequently: this will make indexing\n"
+  "take much longer.\n"
+  "\n"
+  "Note that commit() need not be called explicitly: it will be called\n"
+  "automatically when the database is closed, or when a sufficient number\n"
+  "of modifications have been made. By default, this is every 10000\n"
+  "documents added, deleted, or modified. This value is rather\n"
+  "conservative, and if you have a machine with plenty of memory, you can\n"
+  "improve indexing throughput dramatically by setting\n"
+  "XAPIAN_FLUSH_THRESHOLD in the environment to a larger value.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::DatabaseError:  will be thrown if a problem occurs while\n"
+  "modifying the database.\n"
+  "\n"
+  "Xapian::DatabaseCorruptError:  will be thrown if the database is in a\n"
+  "corrupt state. \n"
+  ""},
+  { (char *)"WritableDatabase_flush", (PyCFunction)_wrap_WritableDatabase_flush, 0x0008, (char *)"\n"
+  "Pre-1.1.0 name for commit().\n"
+  "\n"
+  "void Xapian::WritableDatabase::flush()\n"
+  "\n"
+  "Use commit() instead in new code. This alias may be deprecated in the\n"
+  "future. \n"
+  ""},
+  { (char *)"WritableDatabase_begin_transaction", _wrap_WritableDatabase_begin_transaction, 0x0001, (char *)"\n"
+  "Begin a transaction.\n"
+  "\n"
+  "void Xapian::WritableDatabase::begin_transaction(bool flushed=true)\n"
+  "\n"
+  "In Xapian a transaction is a group of modifications to the database\n"
+  "which are linked such that either all will be applied simultaneously\n"
+  "or none will be applied at all. Even in the case of a power failure,\n"
+  "this characteristic should be preserved (as long as the filesystem\n"
+  "isn't corrupted, etc).\n"
+  "\n"
+  "A transaction is started with begin_transaction() and can either be\n"
+  "committed by calling commit_transaction() or aborted by calling\n"
+  "cancel_transaction().\n"
+  "\n"
+  "By default, a transaction implicitly calls commit() before and after\n"
+  "so that the modifications stand and fall without affecting\n"
+  "modifications before or after.\n"
+  "\n"
+  "The downside of these implicit calls to commit() is that small\n"
+  "transactions can harm indexing performance in the same way that\n"
+  "explicitly calling commit() frequently can.\n"
+  "\n"
+  "If you're applying atomic groups of changes and only wish to ensure\n"
+  "that each group is either applied or not applied, then you can prevent\n"
+  "the automatic commit() before and after the transaction by starting\n"
+  "the transaction with begin_transaction(false). However, if\n"
+  "cancel_transaction is called (or if commit_transaction isn't called\n"
+  "before the WritableDatabase object is destroyed) then any changes\n"
+  "which were pending before the transaction began will also be\n"
+  "discarded.\n"
+  "\n"
+  "Transactions aren't currently supported by the InMemory backend.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::UnimplementedError:  will be thrown if transactions are not\n"
+  "available for this database type.\n"
+  "\n"
+  "Xapian::InvalidOperationError:  will be thrown if this is called at an\n"
+  "invalid time, such as when a transaction is already in progress. \n"
+  ""},
+  { (char *)"WritableDatabase_commit_transaction", (PyCFunction)_wrap_WritableDatabase_commit_transaction, 0x0008, (char *)"\n"
+  "Complete the transaction currently in progress.\n"
+  "\n"
+  "void Xapian::WritableDatabase::commit_transaction()\n"
+  "\n"
+  "If this method completes successfully and this is a flushed\n"
+  "transaction, all the database modifications made during the\n"
+  "transaction will have been committed to the database.\n"
+  "\n"
+  "If an error occurs, an exception will be thrown, and none of the\n"
+  "modifications made to the database during the transaction will have\n"
+  "been applied to the database.\n"
+  "\n"
+  "In all cases the transaction will no longer be in progress.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::DatabaseError:  will be thrown if a problem occurs while\n"
+  "modifying the database.\n"
+  "\n"
+  "Xapian::DatabaseCorruptError:  will be thrown if the database is in a\n"
+  "corrupt state.\n"
+  "\n"
+  "Xapian::InvalidOperationError:  will be thrown if a transaction is not\n"
+  "currently in progress.\n"
+  "\n"
+  "Xapian::UnimplementedError:  will be thrown if transactions are not\n"
+  "available for this database type. \n"
+  ""},
+  { (char *)"WritableDatabase_cancel_transaction", (PyCFunction)_wrap_WritableDatabase_cancel_transaction, 0x0008, (char *)"\n"
+  "Abort the transaction currently in progress, discarding the pending\n"
+  "modifications made to the database.\n"
+  "\n"
+  "void Xapian::WritableDatabase::cancel_transaction()\n"
+  "\n"
+  "If an error occurs in this method, an exception will be thrown, but\n"
+  "the transaction will be cancelled anyway.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::DatabaseError:  will be thrown if a problem occurs while\n"
+  "modifying the database.\n"
+  "\n"
+  "Xapian::DatabaseCorruptError:  will be thrown if the database is in a\n"
+  "corrupt state.\n"
+  "\n"
+  "Xapian::InvalidOperationError:  will be thrown if a transaction is not\n"
+  "currently in progress.\n"
+  "\n"
+  "Xapian::UnimplementedError:  will be thrown if transactions are not\n"
+  "available for this database type. \n"
+  ""},
+  { (char *)"WritableDatabase_add_document", _wrap_WritableDatabase_add_document, 0x0001, (char *)"\n"
+  "Add a new document to the database.\n"
+  "\n"
+  "Xapian::docid Xapian::WritableDatabase::add_document(const\n"
+  "Xapian::Document &document)\n"
+  "\n"
+  "This method adds the specified document to the database, returning a\n"
+  "newly allocated document ID. Automatically allocated document IDs come\n"
+  "from a per-database monotonically increasing counter, so IDs from\n"
+  "deleted documents won't be reused.\n"
+  "\n"
+  "If you want to specify the document ID to be used, you should call\n"
+  "replace_document() instead.\n"
+  "\n"
+  "Note that changes to the database won't be immediately committed to\n"
+  "disk; see commit() for more details.\n"
+  "\n"
+  "As with all database modification operations, the effect is atomic:\n"
+  "the document will either be fully added, or the document fails to be\n"
+  "added and an exception is thrown (possibly at a later time when\n"
+  "commit() is called or the database is closed).\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "document:  The new document to be added.\n"
+  "\n"
+  "The document ID of the newly added document.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::DatabaseError:  will be thrown if a problem occurs while\n"
+  "writing to the database.\n"
+  "\n"
+  "Xapian::DatabaseCorruptError:  will be thrown if the database is in a\n"
+  "corrupt state. \n"
+  ""},
+  { (char *)"WritableDatabase_delete_document", _wrap_WritableDatabase_delete_document, 0x0001, (char *)"\n"
+  "Delete any documents indexed by a term from the database.\n"
+  "\n"
+  "void Xapian::WritableDatabase::delete_document(const std::string\n"
+  "&unique_term)\n"
+  "\n"
+  "This method removes any documents indexed by the specified term from\n"
+  "the database.\n"
+  "\n"
+  "A major use is for convenience when UIDs from another system are\n"
+  "mapped to terms in Xapian, although this method has other uses (for\n"
+  "example, you could add a \"deletion date\" term to documents at index\n"
+  "time and use this method to delete all documents due for deletion on a\n"
+  "particular date).\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "unique_term:  The term to remove references to.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::DatabaseError:  will be thrown if a problem occurs while\n"
+  "writing to the database.\n"
+  "\n"
+  "Xapian::DatabaseCorruptError:  will be thrown if the database is in a\n"
+  "corrupt state. \n"
+  ""},
+  { (char *)"WritableDatabase_replace_document", _wrap_WritableDatabase_replace_document, 0x0001, (char *)"\n"
+  "Replace any documents matching a term.\n"
+  "\n"
+  "Xapian::docid Xapian::WritableDatabase::replace_document(const\n"
+  "std::string &unique_term, const Xapian::Document &document)\n"
+  "\n"
+  "This method replaces any documents indexed by the specified term with\n"
+  "the specified document. If any documents are indexed by the term, the\n"
+  "lowest document ID will be used for the document, otherwise a new\n"
+  "document ID will be generated as for add_document.\n"
+  "\n"
+  "One common use is to allow UIDs from another system to easily be\n"
+  "mapped to terms in Xapian. Note that this method doesn't automatically\n"
+  "add unique_term as a term, so you'll need to call\n"
+  "document.add_term(unique_term) first when using replace_document() in\n"
+  "this way.\n"
+  "\n"
+  "Another possible use is to allow groups of documents to be marked for\n"
+  "later deletion - for example, you could add a \"deletion date\" term\n"
+  "to documents at index time and use this method to easily and\n"
+  "efficiently delete all documents due for deletion on a particular\n"
+  "date.\n"
+  "\n"
+  "Note that changes to the database won't be immediately committed to\n"
+  "disk; see commit() for more details.\n"
+  "\n"
+  "As with all database modification operations, the effect is atomic:\n"
+  "the document(s) will either be fully replaced, or the document(s) fail\n"
+  "to be replaced and an exception is thrown (possibly at a later time\n"
+  "when commit() is called or the database is closed).\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "unique_term:  The \"unique\" term.\n"
+  "\n"
+  "document:  The new document.\n"
+  "\n"
+  "The document ID that document was given.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::DatabaseError:  will be thrown if a problem occurs while\n"
+  "writing to the database.\n"
+  "\n"
+  "Xapian::DatabaseCorruptError:  will be thrown if the database is in a\n"
+  "corrupt state. \n"
+  ""},
+  { (char *)"WritableDatabase_add_spelling", _wrap_WritableDatabase_add_spelling, 0x0001, (char *)"\n"
+  "Add a word to the spelling dictionary.\n"
+  "\n"
+  "void Xapian::WritableDatabase::add_spelling(const std::string &word,\n"
+  "Xapian::termcount freqinc=1) const\n"
+  "\n"
+  "If the word is already present, its frequency is increased.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "word:  The word to add.\n"
+  "\n"
+  "freqinc:  How much to increase its frequency by (default 1). \n"
+  ""},
+  { (char *)"WritableDatabase_remove_spelling", _wrap_WritableDatabase_remove_spelling, 0x0001, (char *)"\n"
+  "Remove a word from the spelling dictionary.\n"
+  "\n"
+  "void Xapian::WritableDatabase::remove_spelling(const std::string\n"
+  "&word, Xapian::termcount freqdec=1) const\n"
+  "\n"
+  "The word's frequency is decreased, and if would become zero or less\n"
+  "then the word is removed completely.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "word:  The word to remove.\n"
+  "\n"
+  "freqdec:  How much to decrease its frequency by (default 1). \n"
+  ""},
+  { (char *)"WritableDatabase_add_synonym", _wrap_WritableDatabase_add_synonym, 0x0001, (char *)"\n"
+  "Add a synonym for a term.\n"
+  "\n"
+  "void Xapian::WritableDatabase::add_synonym(const std::string &term,\n"
+  "const std::string &synonym) const\n"
+  "\n"
+  "If synonym is already a synonym for term, then no action is taken. \n"
+  ""},
+  { (char *)"WritableDatabase_remove_synonym", _wrap_WritableDatabase_remove_synonym, 0x0001, (char *)"\n"
+  "Remove a synonym for a term.\n"
+  "\n"
+  "void Xapian::WritableDatabase::remove_synonym(const std::string &term,\n"
+  "const std::string &synonym) const\n"
+  "\n"
+  "If synonym isn't a synonym for term, then no action is taken. \n"
+  ""},
+  { (char *)"WritableDatabase_clear_synonyms", _wrap_WritableDatabase_clear_synonyms, 0x0001, (char *)"\n"
+  "Remove all synonyms for a term.\n"
+  "\n"
+  "void Xapian::WritableDatabase::clear_synonyms(const std::string &term)\n"
+  "const\n"
+  "\n"
+  "If term has no synonyms, no action is taken. \n"
+  ""},
+  { (char *)"WritableDatabase_set_metadata", _wrap_WritableDatabase_set_metadata, 0x0001, (char *)"\n"
+  "Set the user-specified metadata associated with a given key.\n"
+  "\n"
+  "void Xapian::WritableDatabase::set_metadata(const std::string &key,\n"
+  "const std::string &value)\n"
+  "\n"
+  "This method sets the metadata value associated with a given key. If\n"
+  "there is already a metadata value stored in the database with the same\n"
+  "key, the old value is replaced. If you want to delete an existing item\n"
+  "of metadata, just set its value to the empty string.\n"
+  "\n"
+  "User-specified metadata allows you to store arbitrary information in\n"
+  "the form of (key,tag) pairs.\n"
+  "\n"
+  "There's no hard limit on the number of metadata items, or the size of\n"
+  "the metadata values. Metadata keys have a limited length, which\n"
+  "depends on the backend. We recommend limiting them to 200 bytes. Empty\n"
+  "keys are not valid, and specifying one will cause an exception.\n"
+  "\n"
+  "Metadata modifications are committed to disk in the same way as\n"
+  "modifications to the documents in the database are: i.e.,\n"
+  "modifications are atomic, and won't be committed to disk immediately\n"
+  "(see commit() for more details). This allows metadata to be used to\n"
+  "link databases with versioned external resources by storing the\n"
+  "appropriate version number in a metadata item.\n"
+  "\n"
+  "You can also use the metadata to store arbitrary extra information\n"
+  "associated with terms, documents, or postings by encoding the termname\n"
+  "and/or document id into the metadata key.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "key:  The key of the metadata item to set.\n"
+  "\n"
+  "value:  The value of the metadata item to set.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "Xapian::DatabaseError:  will be thrown if a problem occurs while\n"
+  "writing to the database.\n"
+  "\n"
+  "Xapian::DatabaseCorruptError:  will be thrown if the database is in a\n"
+  "corrupt state.\n"
+  "\n"
+  "Xapian::InvalidArgumentError:  will be thrown if the key supplied is\n"
+  "empty.\n"
+  "\n"
+  "Xapian::UnimplementedError:  will be thrown if the database backend in\n"
+  "use doesn't support user- specified metadata. \n"
+  ""},
+  { (char *)"WritableDatabase___str__", (PyCFunction)_wrap_WritableDatabase___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::WritableDatabase::get_description() const \n"
+  ""},
+  { (char *)"WritableDatabase_swigregister", WritableDatabase_swigregister, 0x0001, __null},
+  { (char *)"WritableDatabase_swiginit", WritableDatabase_swiginit, 0x0001, __null},
+  { (char *)"open_stub", (PyCFunction)_wrap_open_stub, 0x0008, (char *)"\n"
+  "Construct a WritableDatabase object for a stub database file.\n"
+  "\n"
+  "WritableDatabase Xapian::Auto::open_stub(const std::string &file, int\n"
+  "action)\n"
+  "\n"
+  "The stub database file must contain serialised parameters for exactly\n"
+  "one database.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "file:  pathname of the stub database file. \n"
+  ""},
+  { (char *)"brass_open", _wrap_brass_open, 0x0001, (char *)"\n"
+  "Construct a Database object for update access to a Brass database.\n"
+  "\n"
+  "WritableDatabase Xapian::Brass::open(const std::string &dir, int\n"
+  "action, int block_size=8192)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "dir:  pathname of the directory containing the database.\n"
+  "\n"
+  "action:  determines handling of existing/non-existing database:\n"
+  "Xapian::DB_CREATE fail if database already exist, otherwise create new\n"
+  "database.\n"
+  "\n"
+  "Xapian::DB_CREATE_OR_OPEN open existing database, or create new\n"
+  "database if none exists.\n"
+  "\n"
+  "Xapian::DB_CREATE_OR_OVERWRITE overwrite existing database, or create\n"
+  "new database if none exists.\n"
+  "\n"
+  "Xapian::DB_OPEN open existing database, failing if none exists.\n"
+  "\n"
+  "block_size:  the Btree blocksize to use (in bytes), which must be a\n"
+  "power of two between 2048 and 65536 (inclusive). The default (also\n"
+  "used if an invalid value if passed) is 8192 bytes. This parameter is\n"
+  "ignored when opening an existing database. \n"
+  ""},
+  { (char *)"chert_open", _wrap_chert_open, 0x0001, (char *)"\n"
+  "Construct a Database object for update access to a Chert database.\n"
+  "\n"
+  "WritableDatabase Xapian::Chert::open(const std::string &dir, int\n"
+  "action, int block_size=8192)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "dir:  pathname of the directory containing the database.\n"
+  "\n"
+  "action:  determines handling of existing/non-existing database:\n"
+  "Xapian::DB_CREATE fail if database already exist, otherwise create new\n"
+  "database.\n"
+  "\n"
+  "Xapian::DB_CREATE_OR_OPEN open existing database, or create new\n"
+  "database if none exists.\n"
+  "\n"
+  "Xapian::DB_CREATE_OR_OVERWRITE overwrite existing database, or create\n"
+  "new database if none exists.\n"
+  "\n"
+  "Xapian::DB_OPEN open existing database, failing if none exists.\n"
+  "\n"
+  "block_size:  the Btree blocksize to use (in bytes), which must be a\n"
+  "power of two between 2048 and 65536 (inclusive). The default (also\n"
+  "used if an invalid value if passed) is 8192 bytes. This parameter is\n"
+  "ignored when opening an existing database. \n"
+  ""},
+  { (char *)"flint_open", _wrap_flint_open, 0x0001, (char *)"\n"
+  "Construct a Database object for update access to a Flint database.\n"
+  "\n"
+  "WritableDatabase Xapian::Flint::open(const std::string &dir, int\n"
+  "action, int block_size=8192)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "dir:  pathname of the directory containing the database.\n"
+  "\n"
+  "action:  determines handling of existing/non-existing database:\n"
+  "Xapian::DB_CREATE fail if database already exist, otherwise create new\n"
+  "database.\n"
+  "\n"
+  "Xapian::DB_CREATE_OR_OPEN open existing database, or create new\n"
+  "database if none exists.\n"
+  "\n"
+  "Xapian::DB_CREATE_OR_OVERWRITE overwrite existing database, or create\n"
+  "new database if none exists.\n"
+  "\n"
+  "Xapian::DB_OPEN open existing database, failing if none exists.\n"
+  "\n"
+  "block_size:  the Btree blocksize to use (in bytes), which must be a\n"
+  "power of two between 2048 and 65536 (inclusive). The default (also\n"
+  "used if an invalid value if passed) is 8192 bytes. This parameter is\n"
+  "ignored when opening an existing database. \n"
+  ""},
+  { (char *)"inmemory_open", (PyCFunction)_wrap_inmemory_open, 0x0004, (char *)"\n"
+  "Construct a WritableDatabase object for a new, empty InMemory\n"
+  "database.\n"
+  "\n"
+  "WritableDatabase Xapian::InMemory::open()\n"
+  "\n"
+  "Only a writable InMemory database can be created, since a read-only\n"
+  "one would always remain empty. \n"
+  ""},
+  { (char *)"remote_open", _wrap_remote_open, 0x0001, (char *)"\n"
+  "Construct a Database object for read-only access to a remote database\n"
+  "accessed via a program.\n"
+  "\n"
+  "Database Xapian::Remote::open(const std::string &program, const\n"
+  "std::string &args, Xapian::timeout timeout=10000)\n"
+  "\n"
+  "Access to the remote database is done by running an external program\n"
+  "and communicating with it on stdin/stdout.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "program:  the external program to run.\n"
+  "\n"
+  "args:  space-separated list of arguments to pass to program.\n"
+  "\n"
+  "timeout:  timeout in milliseconds. If this timeout is exceeded for any\n"
+  "individual operation on the remote database then\n"
+  "Xapian::NetworkTimeoutError is thrown. A timeout of 0 means don't\n"
+  "timeout. (Default is 10000ms, which is 10 seconds). \n"
+  ""},
+  { (char *)"remote_open_writable", _wrap_remote_open_writable, 0x0001, (char *)"\n"
+  "Construct a WritableDatabase object for update access to a remote\n"
+  "database accessed via a program.\n"
+  "\n"
+  "WritableDatabase Xapian::Remote::open_writable(const std::string\n"
+  "&program, const std::string &args, Xapian::timeout timeout=0)\n"
+  "\n"
+  "Access to the remote database is done by running an external program\n"
+  "and communicating with it on stdin/stdout.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "program:  the external program to run.\n"
+  "\n"
+  "args:  space-separated list of arguments to pass to program.\n"
+  "\n"
+  "timeout:  timeout in milliseconds. If this timeout is exceeded for any\n"
+  "individual operation on the remote database then\n"
+  "Xapian::NetworkTimeoutError is thrown. (Default is 0, which means\n"
+  "don't timeout). \n"
+  ""},
+  { (char *)"delete_Query", (PyCFunction)_wrap_delete_Query, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "Xapian::Query::~Query() \n"
+  ""},
+  { (char *)"Query_get_length", (PyCFunction)_wrap_Query_get_length, 0x0008, (char *)"\n"
+  "Get the length of the query, used by some ranking formulae.\n"
+  "\n"
+  "Xapian::termcount Xapian::Query::get_length() const\n"
+  "\n"
+  "This value is calculated automatically - if you want to override it\n"
+  "you can pass a different value to Enquire::set_query(). \n"
+  ""},
+  { (char *)"Query_get_terms_begin", (PyCFunction)_wrap_Query_get_terms_begin, 0x0008, (char *)"\n"
+  "Return a Xapian::TermIterator returning all the terms in the query, in\n"
+  "order of termpos.\n"
+  "\n"
+  "TermIterator Xapian::Query::get_terms_begin() const\n"
+  "\n"
+  "If multiple terms have the same term position, their order is\n"
+  "unspecified. Duplicates (same term and termpos) will be removed. \n"
+  ""},
+  { (char *)"Query_get_terms_end", (PyCFunction)_wrap_Query_get_terms_end, 0x0008, (char *)"\n"
+  "Return a Xapian::TermIterator to the end of the list of terms in the\n"
+  "query.\n"
+  "\n"
+  "TermIterator Xapian::Query::get_terms_end() const \n"
+  ""},
+  { (char *)"Query_empty", (PyCFunction)_wrap_Query_empty, 0x0008, (char *)"\n"
+  "Test if the query is empty (i.e.\n"
+  "\n"
+  "bool Xapian::Query::empty() const\n"
+  "\n"
+  "was constructed using the default ctor or with an empty iterator\n"
+  "ctor). \n"
+  ""},
+  { (char *)"Query_serialise", (PyCFunction)_wrap_Query_serialise, 0x0008, (char *)"\n"
+  "Serialise query into a string.\n"
+  "\n"
+  "std::string Xapian::Query::serialise() const\n"
+  "\n"
+  "The query representation may change between Xapian releases: even\n"
+  "between minor versions. However, it is guaranteed not to change unless\n"
+  "the remote database protocol has also changed between releases. \n"
+  ""},
+  { (char *)"Query_unserialise", _wrap_Query_unserialise, 0x0001, __null},
+  { (char *)"Query___str__", (PyCFunction)_wrap_Query___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::Query::get_description() const \n"
+  ""},
+  { (char *)"new_Query", _wrap_new_Query, 0x0001, (char *)"\n"
+  "Construct an external source query.\n"
+  "\n"
+  "Xapian::Query::Query(Xapian::PostingSource *external_source)\n"
+  "\n"
+  "An attempt to clone the posting source will be made immediately, so if\n"
+  "the posting source supports clone(), the source supplied may be safely\n"
+  "deallocated after this call. If the source does not support clone(),\n"
+  "the caller must ensure that the posting source remains valid until the\n"
+  "Query is deallocated.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "external_source:  The source to use in the query. \n"
+  ""},
+  { (char *)"Query_swigregister", Query_swigregister, 0x0001, __null},
+  { (char *)"Query_swiginit", Query_swiginit, 0x0001, __null},
+  { (char *)"Stopper___call__", _wrap_Stopper___call__, 0x0001, __null},
+  { (char *)"delete_Stopper", (PyCFunction)_wrap_delete_Stopper, 0x0008, (char *)"\n"
+  "Class has virtual methods, so provide a virtual destructor.\n"
+  "\n"
+  "virtual Xapian::Stopper::~Stopper() \n"
+  ""},
+  { (char *)"Stopper___str__", (PyCFunction)_wrap_Stopper___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "virtual std::string Xapian::Stopper::get_description() const \n"
+  ""},
+  { (char *)"new_Stopper", (PyCFunction)_wrap_new_Stopper, 0x0008, __null},
+  { (char *)"disown_Stopper", (PyCFunction)_wrap_disown_Stopper, 0x0008, __null},
+  { (char *)"Stopper_swigregister", Stopper_swigregister, 0x0001, __null},
+  { (char *)"Stopper_swiginit", Stopper_swiginit, 0x0001, __null},
+  { (char *)"new_SimpleStopper", (PyCFunction)_wrap_new_SimpleStopper, 0x0004, (char *)"\n"
+  "Initialise from a pair of iterators.\n"
+  "\n"
+  "Xapian::SimpleStopper::SimpleStopper(Iterator begin, Iterator end) \n"
+  ""},
+  { (char *)"SimpleStopper_add", _wrap_SimpleStopper_add, 0x0001, (char *)"\n"
+  "Add a single stop word.\n"
+  "\n"
+  "void Xapian::SimpleStopper::add(const std::string &word) \n"
+  ""},
+  { (char *)"delete_SimpleStopper", (PyCFunction)_wrap_delete_SimpleStopper, 0x0008, __null},
+  { (char *)"SimpleStopper_swigregister", SimpleStopper_swigregister, 0x0001, __null},
+  { (char *)"SimpleStopper_swiginit", SimpleStopper_swiginit, 0x0001, __null},
+  { (char *)"delete_ValueRangeProcessor", (PyCFunction)_wrap_delete_ValueRangeProcessor, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "virtual Xapian::ValueRangeProcessor::~ValueRangeProcessor() \n"
+  ""},
+  { (char *)"ValueRangeProcessor___call__", _wrap_ValueRangeProcessor___call__, 0x0001, __null},
+  { (char *)"new_ValueRangeProcessor", (PyCFunction)_wrap_new_ValueRangeProcessor, 0x0008, __null},
+  { (char *)"disown_ValueRangeProcessor", (PyCFunction)_wrap_disown_ValueRangeProcessor, 0x0008, __null},
+  { (char *)"ValueRangeProcessor_swigregister", ValueRangeProcessor_swigregister, 0x0001, __null},
+  { (char *)"ValueRangeProcessor_swiginit", ValueRangeProcessor_swiginit, 0x0001, __null},
+  { (char *)"new_StringValueRangeProcessor", _wrap_new_StringValueRangeProcessor, 0x0001, (char *)"\n"
+  "Constructor.\n"
+  "\n"
+  "Xapian::StringValueRangeProcessor::StringValueRangeProcessor(Xapian::valueno\n"
+  "valno_, const std::string &str_, bool prefix_=true)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "valno_:  The value number to return from operator().\n"
+  "\n"
+  "str_:  A string to look for to recognise values as belonging to this\n"
+  "range.\n"
+  "\n"
+  "prefix_:  Flag specifying whether to check for str_ as a prefix or a\n"
+  "suffix. \n"
+  ""},
+  { (char *)"delete_StringValueRangeProcessor", (PyCFunction)_wrap_delete_StringValueRangeProcessor, 0x0008, __null},
+  { (char *)"StringValueRangeProcessor_swigregister", StringValueRangeProcessor_swigregister, 0x0001, __null},
+  { (char *)"StringValueRangeProcessor_swiginit", StringValueRangeProcessor_swiginit, 0x0001, __null},
+  { (char *)"new_DateValueRangeProcessor", _wrap_new_DateValueRangeProcessor, 0x0001, (char *)"\n"
+  "Constructor.\n"
+  "\n"
+  "Xapian::DateValueRangeProcessor::DateValueRangeProcessor(Xapian::valueno\n"
+  "valno_, const std::string &str_, bool prefix_=true, bool\n"
+  "prefer_mdy_=false, int epoch_year_=1970)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "valno_:  The value number to return from operator().\n"
+  "\n"
+  "str_:  A string to look for to recognise values as belonging to this\n"
+  "date range.\n"
+  "\n"
+  "prefix_:  Whether to look for the string at the start or end of the\n"
+  "values. If true, the string is a prefix; if false, the string is a\n"
+  "suffix (default: true).\n"
+  "\n"
+  "prefer_mdy_:  Should ambiguous dates be interpreted as month/day/year\n"
+  "rather than day/month/year? (default: false)\n"
+  "\n"
+  "epoch_year_:  Year to use as the epoch for dates with 2 digit years\n"
+  "(default: 1970, so 1/1/69 is 2069 while 1/1/70 is 1970).\n"
+  "\n"
+  "The string supplied in str_ is used by operator() to decide whether\n"
+  "the pair of strings supplied to it constitute a valid range. If\n"
+  "prefix_ is true, the first value in a range must begin with str_ (and\n"
+  "the second value may optionally begin with str_); if prefix_ is false,\n"
+  "the second value in a range must end with str_ (and the first value\n"
+  "may optionally end with str_).\n"
+  "\n"
+  "If str_ is empty, the setting of prefix_ is irrelevant, and no special\n"
+  "strings are required at the start or end of the strings defining the\n"
+  "range.\n"
+  "\n"
+  "The remainder of both strings defining the endpoints must be valid\n"
+  "dates.\n"
+  "\n"
+  "For example, if str_ is \"created:\" and prefix_ is true, and the\n"
+  "range processor has been added to the queryparser, the queryparser\n"
+  "will accept \"created:1/1/2000..31/12/2001\". \n"
+  ""},
+  { (char *)"delete_DateValueRangeProcessor", (PyCFunction)_wrap_delete_DateValueRangeProcessor, 0x0008, __null},
+  { (char *)"DateValueRangeProcessor_swigregister", DateValueRangeProcessor_swigregister, 0x0001, __null},
+  { (char *)"DateValueRangeProcessor_swiginit", DateValueRangeProcessor_swiginit, 0x0001, __null},
+  { (char *)"new_NumberValueRangeProcessor", _wrap_new_NumberValueRangeProcessor, 0x0001, (char *)"\n"
+  "Constructor.\n"
+  "\n"
+  "Xapian::NumberValueRangeProcessor::NumberValueRangeProcessor(Xapian::valueno\n"
+  "valno_, const std::string &str_, bool prefix_=true)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "valno_:  The value number to return from operator().\n"
+  "\n"
+  "str_:  A string to look for to recognise values as belonging to this\n"
+  "numeric range.\n"
+  "\n"
+  "prefix_:  Whether to look for the string at the start or end of the\n"
+  "values. If true, the string is a prefix; if false, the string is a\n"
+  "suffix (default: true).\n"
+  "\n"
+  "The string supplied in str_ is used by operator() to decide whether\n"
+  "the pair of strings supplied to it constitute a valid range. If\n"
+  "prefix_ is true, the first value in a range must begin with str_ (and\n"
+  "the second value may optionally begin with str_); if prefix_ is false,\n"
+  "the second value in a range must end with str_ (and the first value\n"
+  "may optionally end with str_).\n"
+  "\n"
+  "If str_ is empty, the setting of prefix_ is irrelevant, and no special\n"
+  "strings are required at the start or end of the strings defining the\n"
+  "range.\n"
+  "\n"
+  "The remainder of both strings defining the endpoints must be valid\n"
+  "floating point numbers. (FIXME: define format recognised).\n"
+  "\n"
+  "For example, if str_ is \"$\" and prefix_ is true, and the range\n"
+  "processor has been added to the queryparser, the queryparser will\n"
+  "accept \"$10..50\" or \"$10..$50\", but not \"10..50\" or \"10..$50\"\n"
+  "as valid ranges. If str_ is \"kg\" and prefix_ is false, the\n"
+  "queryparser will accept \"10..50kg\" or \"10kg..50kg\", but not\n"
+  "\"10..50\" or \"10kg..50\" as valid ranges. \n"
+  ""},
+  { (char *)"delete_NumberValueRangeProcessor", (PyCFunction)_wrap_delete_NumberValueRangeProcessor, 0x0008, __null},
+  { (char *)"NumberValueRangeProcessor_swigregister", NumberValueRangeProcessor_swigregister, 0x0001, __null},
+  { (char *)"NumberValueRangeProcessor_swiginit", NumberValueRangeProcessor_swiginit, 0x0001, __null},
+  { (char *)"new_QueryParser", (PyCFunction)_wrap_new_QueryParser, 0x0004, (char *)"\n"
+  "Default constructor.\n"
+  "\n"
+  "Xapian::QueryParser::QueryParser() \n"
+  ""},
+  { (char *)"delete_QueryParser", (PyCFunction)_wrap_delete_QueryParser, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "Xapian::QueryParser::~QueryParser() \n"
+  ""},
+  { (char *)"QueryParser_set_stemmer", _wrap_QueryParser_set_stemmer, 0x0001, (char *)"\n"
+  "Set the stemmer.\n"
+  "\n"
+  "void Xapian::QueryParser::set_stemmer(const Xapian::Stem &stemmer)\n"
+  "\n"
+  "This sets the stemming algorithm which will be used by the query\n"
+  "parser. Note that the stemming algorithm will only be used according\n"
+  "to the stemming strategy set by set_stemming_strategy(), which\n"
+  "defaults to STEM_NONE. Therefore, to use a stemming algorithm, you\n"
+  "will also need to call set_stemming_strategy() with a value other than\n"
+  "STEM_NONE. \n"
+  ""},
+  { (char *)"QueryParser_set_stemming_strategy", _wrap_QueryParser_set_stemming_strategy, 0x0001, (char *)"\n"
+  "Set the stemming strategy.\n"
+  "\n"
+  "void Xapian::QueryParser::set_stemming_strategy(stem_strategy\n"
+  "strategy)\n"
+  "\n"
+  "This controls how the query parser will apply the stemming algorithm.\n"
+  "The default value is STEM_NONE. The possible values are:\n"
+  "\n"
+  "STEM_NONE: Don't perform any stemming.\n"
+  "\n"
+  "STEM_SOME: Search for stemmed forms of terms except for those which\n"
+  "start with a capital letter, or are followed by certain characters\n"
+  "(currently: (/@<>=*[{\" ), or are used with operators which need\n"
+  "positional information. Stemmed terms are prefixed with 'Z'.\n"
+  "\n"
+  "STEM_ALL: Search for stemmed forms of all words (note: no 'Z' prefix\n"
+  "is added).\n"
+  "\n"
+  "Note that the stemming algorithm is only applied to words in\n"
+  "probabilistic fields - boolean filter terms are never stemmed. \n"
+  ""},
+  { (char *)"QueryParser_set_stopper", _wrap_QueryParser_set_stopper, 0x0001, (char *)"\n"
+  "Set the stopper.\n"
+  "\n"
+  "void Xapian::QueryParser::set_stopper(const Stopper *stop=NULL) \n"
+  ""},
+  { (char *)"QueryParser_set_default_op", _wrap_QueryParser_set_default_op, 0x0001, (char *)"\n"
+  "Set the default operator.\n"
+  "\n"
+  "void Xapian::QueryParser::set_default_op(Query::op default_op)\n"
+  "\n"
+  "This operator is used to combine non-filter query items when no\n"
+  "explicit operator is used.\n"
+  "\n"
+  "The most useful values for this are OP_OR (the default) and OP_AND.\n"
+  "OP_NEAR and OP_PHRASE can also be useful.\n"
+  "\n"
+  "So for example, 'weather forecast' is parsed as if it were 'weather OR\n"
+  "forecast' by default. \n"
+  ""},
+  { (char *)"QueryParser_get_default_op", (PyCFunction)_wrap_QueryParser_get_default_op, 0x0008, (char *)"\n"
+  "Get the current default operator.\n"
+  "\n"
+  "Query::op Xapian::QueryParser::get_default_op() const \n"
+  ""},
+  { (char *)"QueryParser_set_database", _wrap_QueryParser_set_database, 0x0001, (char *)"\n"
+  "Specify the database being searched.\n"
+  "\n"
+  "void Xapian::QueryParser::set_database(const Database &db)\n"
+  "\n"
+  "The database is used for wildcard expansion (FLAG_WILDCARD and\n"
+  "FLAG_PARTIAL), spelling correction (FLAG_SPELLING_CORRECTION), and\n"
+  "synonyms (FLAG_SYNONYM, FLAG_AUTO_SYNONYMS, and\n"
+  "FLAG_AUTO_MULTIWORD_SYNONYMS). \n"
+  ""},
+  { (char *)"QueryParser_parse_query", _wrap_QueryParser_parse_query, 0x0001, (char *)"\n"
+  "Parse a query.\n"
+  "\n"
+  "Query Xapian::QueryParser::parse_query(const std::string\n"
+  "&query_string, unsigned flags=FLAG_DEFAULT, const std::string\n"
+  "&default_prefix=std::string())\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "query_string:  A free-text query as entered by a user\n"
+  "\n"
+  "flags:  Zero or more Query::feature_flag specifying what features the\n"
+  "QueryParser should support. Combine multiple values with bitwise-or\n"
+  "(|) (default FLAG_DEFAULT).\n"
+  "\n"
+  "default_prefix:  The default term prefix to use (default none). For\n"
+  "example, you can pass \"A\" when parsing an \"Author\" field.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "If:  the query string can't be parsed, then Xapian::QueryParserError\n"
+  "is thrown. You can get an English error message to report to the user\n"
+  "by catching it and calling get_msg() on the caught exception. The\n"
+  "current possible values (in case you want to translate them) are:\n"
+  "\n"
+  "Unknown range operation\n"
+  "\n"
+  "parse error\n"
+  "\n"
+  "Syntax: <expression> AND <expression>\n"
+  "\n"
+  "Syntax: <expression> AND NOT <expression>\n"
+  "\n"
+  "Syntax: <expression> NOT <expression>\n"
+  "\n"
+  "Syntax: <expression> OR <expression>\n"
+  "\n"
+  "Syntax: <expression> XOR <expression> \n"
+  ""},
+  { (char *)"QueryParser_add_prefix", _wrap_QueryParser_add_prefix, 0x0001, (char *)"\n"
+  "Add a probabilistic term prefix.\n"
+  "\n"
+  "void Xapian::QueryParser::add_prefix(const std::string &field, const\n"
+  "std::string &prefix)\n"
+  "\n"
+  "For example:\n"
+  "\n"
+  "This allows the user to search for author:Orwell which will be\n"
+  "converted to a search for the term \"Aorwell\".\n"
+  "\n"
+  "Multiple fields can be mapped to the same prefix. For example, you can\n"
+  "make title: and subject: aliases for each other.\n"
+  "\n"
+  "As of 1.0.4, you can call this method multiple times with the same\n"
+  "value of field to allow a single field to be mapped to multiple\n"
+  "prefixes. Multiple terms being generated for such a field, and\n"
+  "combined with  Xapian::Query::OP_OR.\n"
+  "\n"
+  "If any prefixes are specified for the empty field name (i.e. you call\n"
+  "this method with an empty string as the first parameter) these\n"
+  "prefixes will be used for terms without a field specifier. If you do\n"
+  "this and also specify the default_prefix parameter to  parse_query(),\n"
+  "then the default_prefix parameter will override.\n"
+  "\n"
+  "If the prefix parameter is empty, then \"field:word\" will produce the\n"
+  "term \"word\" (and this can be one of several prefixes for a\n"
+  "particular field, or for terms without a field specifier).\n"
+  "\n"
+  "If you call  add_prefix() and  add_boolean_prefix() for the same value\n"
+  "of field, a  Xapian::InvalidOperationError exception will be thrown.\n"
+  "\n"
+  "In 1.0.3 and earlier, subsequent calls to this method with the same\n"
+  "value of field had no effect.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "field:  The user visible field name\n"
+  "\n"
+  "prefix:  The term prefix to map this to \n"
+  ""},
+  { (char *)"QueryParser_add_boolean_prefix", _wrap_QueryParser_add_boolean_prefix, 0x0001, (char *)"\n"
+  "void\n"
+  "Xapian::QueryParser::add_boolean_prefix(const std::string &field,\n"
+  "const std::string &prefix) \n"
+  ""},
+  { (char *)"QueryParser_stoplist_begin", (PyCFunction)_wrap_QueryParser_stoplist_begin, 0x0008, (char *)"\n"
+  "Iterate over terms omitted from the query as stopwords.\n"
+  "\n"
+  "TermIterator Xapian::QueryParser::stoplist_begin() const \n"
+  ""},
+  { (char *)"QueryParser_stoplist_end", (PyCFunction)_wrap_QueryParser_stoplist_end, 0x0008, (char *)"TermIterator Xapian::QueryParser::stoplist_end() const "},
+  { (char *)"QueryParser_unstem_begin", _wrap_QueryParser_unstem_begin, 0x0001, (char *)"\n"
+  "Iterate over unstemmed forms of the given (stemmed) term used in the\n"
+  "query.\n"
+  "\n"
+  "TermIterator Xapian::QueryParser::unstem_begin(const std::string\n"
+  "&term) const \n"
+  ""},
+  { (char *)"QueryParser_unstem_end", _wrap_QueryParser_unstem_end, 0x0001, (char *)"\n"
+  "TermIterator\n"
+  "Xapian::QueryParser::unstem_end(const std::string &) const \n"
+  ""},
+  { (char *)"QueryParser_add_valuerangeprocessor", _wrap_QueryParser_add_valuerangeprocessor, 0x0001, (char *)"\n"
+  "Register a ValueRangeProcessor.\n"
+  "\n"
+  "void\n"
+  "Xapian::QueryParser::add_valuerangeprocessor(Xapian::ValueRangeProcessor\n"
+  "*vrproc) \n"
+  ""},
+  { (char *)"QueryParser_get_corrected_query_string", (PyCFunction)_wrap_QueryParser_get_corrected_query_string, 0x0008, (char *)"\n"
+  "Get the spelling-corrected query string.\n"
+  "\n"
+  "std::string Xapian::QueryParser::get_corrected_query_string() const\n"
+  "\n"
+  "This will only be set if FLAG_SPELLING_CORRECTION is specified when\n"
+  "QueryParser::parse_query() was last called.\n"
+  "\n"
+  "If there were no corrections, an empty string is returned. \n"
+  ""},
+  { (char *)"QueryParser___str__", (PyCFunction)_wrap_QueryParser___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::QueryParser::get_description() const \n"
+  ""},
+  { (char *)"QueryParser_swigregister", QueryParser_swigregister, 0x0001, __null},
+  { (char *)"QueryParser_swiginit", QueryParser_swiginit, 0x0001, __null},
+  { (char *)"sortable_serialise", (PyCFunction)_wrap_sortable_serialise, 0x0008, __null},
+  { (char *)"sortable_unserialise", (PyCFunction)_wrap_sortable_unserialise, 0x0008, __null},
+  { (char *)"delete_StemImplementation", (PyCFunction)_wrap_delete_StemImplementation, 0x0008, (char *)"\n"
+  "Virtual destructor.\n"
+  "\n"
+  "virtual Xapian::StemImplementation::~StemImplementation() \n"
+  ""},
+  { (char *)"StemImplementation___call__", _wrap_StemImplementation___call__, 0x0001, __null},
+  { (char *)"StemImplementation___str__", (PyCFunction)_wrap_StemImplementation___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "virtual std::string Xapian::StemImplementation::get_description()\n"
+  "const =0 \n"
+  ""},
+  { (char *)"new_StemImplementation", (PyCFunction)_wrap_new_StemImplementation, 0x0008, __null},
+  { (char *)"disown_StemImplementation", (PyCFunction)_wrap_disown_StemImplementation, 0x0008, __null},
+  { (char *)"StemImplementation_swigregister", StemImplementation_swigregister, 0x0001, __null},
+  { (char *)"StemImplementation_swiginit", StemImplementation_swiginit, 0x0001, __null},
+  { (char *)"new_Stem", _wrap_new_Stem, 0x0001, (char *)"\n"
+  "Construct a Xapian::Stem object with a user-provided stemming\n"
+  "algorithm.\n"
+  "\n"
+  "Xapian::Stem::Stem(StemImplementation *p)\n"
+  "\n"
+  "You can subclass Xapian::StemImplementation to implement your own\n"
+  "stemming algorithm (or to wrap a third-party algorithm) and then wrap\n"
+  "your implementation in a Xapian::Stem object to pass to the Xapian\n"
+  "API.\n"
+  "\n"
+  "The StemImplementation object is reference counted, and so will be\n"
+  "automatically deleted by the Xapian::Stem wrapper when no longer\n"
+  "required. \n"
+  ""},
+  { (char *)"delete_Stem", (PyCFunction)_wrap_delete_Stem, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "Xapian::Stem::~Stem() \n"
+  ""},
+  { (char *)"Stem___call__", _wrap_Stem___call__, 0x0001, __null},
+  { (char *)"Stem___str__", (PyCFunction)_wrap_Stem___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::Stem::get_description() const \n"
+  ""},
+  { (char *)"Stem_get_available_languages", (PyCFunction)_wrap_Stem_get_available_languages, 0x0004, __null},
+  { (char *)"Stem_swigregister", Stem_swigregister, 0x0001, __null},
+  { (char *)"Stem_swiginit", Stem_swiginit, 0x0001, __null},
+  { (char *)"new_TermGenerator", (PyCFunction)_wrap_new_TermGenerator, 0x0004, (char *)"\n"
+  "Default constructor.\n"
+  "\n"
+  "Xapian::TermGenerator::TermGenerator() \n"
+  ""},
+  { (char *)"delete_TermGenerator", (PyCFunction)_wrap_delete_TermGenerator, 0x0008, (char *)"\n"
+  "Destructor.\n"
+  "\n"
+  "Xapian::TermGenerator::~TermGenerator() \n"
+  ""},
+  { (char *)"TermGenerator_set_stemmer", _wrap_TermGenerator_set_stemmer, 0x0001, (char *)"\n"
+  "Set the Xapian::Stem object to be used for generating stemmed terms.\n"
+  "\n"
+  "void Xapian::TermGenerator::set_stemmer(const Xapian::Stem &stemmer)\n"
+  "\n"
+  ""},
+  { (char *)"TermGenerator_set_stopper", _wrap_TermGenerator_set_stopper, 0x0001, (char *)"\n"
+  "Set the Xapian::Stopper object to be used for identifying stopwords.\n"
+  "\n"
+  "void Xapian::TermGenerator::set_stopper(const Xapian::Stopper\n"
+  "*stop=NULL)\n"
+  "\n"
+  "Stemmed forms of stopwords aren't indexed, but unstemmed forms still\n"
+  "are so that searches for phrases including stop words still work. \n"
+  ""},
+  { (char *)"TermGenerator_set_document", _wrap_TermGenerator_set_document, 0x0001, (char *)"\n"
+  "Set the current document.\n"
+  "\n"
+  "void Xapian::TermGenerator::set_document(const Xapian::Document &doc)\n"
+  "\n"
+  ""},
+  { (char *)"TermGenerator_get_document", (PyCFunction)_wrap_TermGenerator_get_document, 0x0008, (char *)"\n"
+  "Get the current document.\n"
+  "\n"
+  "const Xapian::Document& Xapian::TermGenerator::get_document() const \n"
+  ""},
+  { (char *)"TermGenerator_set_database", _wrap_TermGenerator_set_database, 0x0001, (char *)"\n"
+  "Set the database to index spelling data to.\n"
+  "\n"
+  "void Xapian::TermGenerator::set_database(const\n"
+  "Xapian::WritableDatabase &db) \n"
+  ""},
+  { (char *)"TermGenerator_set_flags", _wrap_TermGenerator_set_flags, 0x0001, (char *)"\n"
+  "Set flags.\n"
+  "\n"
+  "flags Xapian::TermGenerator::set_flags(flags toggle, flags\n"
+  "mask=flags(0))\n"
+  "\n"
+  "The new value of flags is: (flags & mask) ^ toggle\n"
+  "\n"
+  "To just set the flags, pass the new flags in toggle and the default\n"
+  "value for mask.\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "toggle:  Flags to XOR.\n"
+  "\n"
+  "mask:  Flags to AND with first.\n"
+  "\n"
+  "The old flags setting. \n"
+  ""},
+  { (char *)"TermGenerator_index_text", _wrap_TermGenerator_index_text, 0x0001, (char *)"\n"
+  "Index some text in a std::string.\n"
+  "\n"
+  "void Xapian::TermGenerator::index_text(const std::string &text,\n"
+  "Xapian::termcount weight=1, const std::string &prefix=std::string())\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "weight:  The wdf increment (default 1).\n"
+  "\n"
+  "prefix:  The term prefix to use (default is no prefix). \n"
+  ""},
+  { (char *)"TermGenerator_index_text_without_positions", _wrap_TermGenerator_index_text_without_positions, 0x0001, (char *)"\n"
+  "Index some text in a std::string without positional information.\n"
+  "\n"
+  "void Xapian::TermGenerator::index_text_without_positions(const\n"
+  "std::string &text, Xapian::termcount weight=1, const std::string\n"
+  "&prefix=std::string())\n"
+  "\n"
+  "Just like index_text, but no positional information is generated. This\n"
+  "means that the database will be significantly smaller, but that phrase\n"
+  "searching and NEAR won't be supported. \n"
+  ""},
+  { (char *)"TermGenerator_increase_termpos", _wrap_TermGenerator_increase_termpos, 0x0001, (char *)"\n"
+  "Increase the termpos used by index_text by delta.\n"
+  "\n"
+  "void Xapian::TermGenerator::increase_termpos(Xapian::termcount\n"
+  "delta=100)\n"
+  "\n"
+  "This can be used to prevent phrase searches from spanning two\n"
+  "unconnected blocks of text (e.g. the title and body text). \n"
+  ""},
+  { (char *)"TermGenerator_get_termpos", (PyCFunction)_wrap_TermGenerator_get_termpos, 0x0008, (char *)"\n"
+  "Get the current term position.\n"
+  "\n"
+  "Xapian::termcount Xapian::TermGenerator::get_termpos() const \n"
+  ""},
+  { (char *)"TermGenerator_set_termpos", _wrap_TermGenerator_set_termpos, 0x0001, (char *)"\n"
+  "Set the current term position.\n"
+  "\n"
+  "void Xapian::TermGenerator::set_termpos(Xapian::termcount termpos) \n"
+  ""},
+  { (char *)"TermGenerator___str__", (PyCFunction)_wrap_TermGenerator___str__, 0x0008, (char *)"\n"
+  "Return a string describing this object.\n"
+  "\n"
+  "std::string Xapian::TermGenerator::get_description() const \n"
+  ""},
+  { (char *)"TermGenerator_swigregister", TermGenerator_swigregister, 0x0001, __null},
+  { (char *)"TermGenerator_swiginit", TermGenerator_swiginit, 0x0001, __null},
+  { (char *)"KeyMaker___call__", _wrap_KeyMaker___call__, 0x0001, __null},
+  { (char *)"delete_KeyMaker", (PyCFunction)_wrap_delete_KeyMaker, 0x0008, (char *)"\n"
+  "Virtual destructor, because we have virtual methods.\n"
+  "\n"
+  "virtual Xapian::KeyMaker::~KeyMaker() \n"
+  ""},
+  { (char *)"new_KeyMaker", (PyCFunction)_wrap_new_KeyMaker, 0x0008, __null},
+  { (char *)"disown_KeyMaker", (PyCFunction)_wrap_disown_KeyMaker, 0x0008, __null},
+  { (char *)"KeyMaker_swigregister", KeyMaker_swigregister, 0x0001, __null},
+  { (char *)"KeyMaker_swiginit", KeyMaker_swiginit, 0x0001, __null},
+  { (char *)"new_MultiValueKeyMaker", (PyCFunction)_wrap_new_MultiValueKeyMaker, 0x0004, (char *)"\n"
+  "Xapian::MultiValueKeyMaker::MultiValueKeyMaker(Iterator begin,\n"
+  "Iterator end) \n"
+  ""},
+  { (char *)"MultiValueKeyMaker_add_value", _wrap_MultiValueKeyMaker_add_value, 0x0001, (char *)"\n"
+  "void\n"
+  "Xapian::MultiValueKeyMaker::add_value(Xapian::valueno valno, bool\n"
+  "reverse=false) \n"
+  ""},
+  { (char *)"delete_MultiValueKeyMaker", (PyCFunction)_wrap_delete_MultiValueKeyMaker, 0x0008, __null},
+  { (char *)"MultiValueKeyMaker_swigregister", MultiValueKeyMaker_swigregister, 0x0001, __null},
+  { (char *)"MultiValueKeyMaker_swiginit", MultiValueKeyMaker_swiginit, 0x0001, __null},
+  { (char *)"delete_Sorter", (PyCFunction)_wrap_delete_Sorter, 0x0008, __null},
+  { (char *)"Sorter_swigregister", Sorter_swigregister, 0x0001, __null},
+  { (char *)"new_MultiValueSorter", (PyCFunction)_wrap_new_MultiValueSorter, 0x0004, (char *)"\n"
+  "Xapian::MultiValueSorter::MultiValueSorter(Iterator begin, Iterator\n"
+  "end) \n"
+  ""},
+  { (char *)"MultiValueSorter_add", _wrap_MultiValueSorter_add, 0x0001, (char *)"\n"
+  "void\n"
+  "Xapian::MultiValueSorter::add(Xapian::valueno valno, bool\n"
+  "forward=true) \n"
+  ""},
+  { (char *)"delete_MultiValueSorter", (PyCFunction)_wrap_delete_MultiValueSorter, 0x0008, __null},
+  { (char *)"MultiValueSorter_swigregister", MultiValueSorter_swigregister, 0x0001, __null},
+  { (char *)"MultiValueSorter_swiginit", MultiValueSorter_swiginit, 0x0001, __null},
+  { (char *)"new_ValueSetMatchDecider", _wrap_new_ValueSetMatchDecider, 0x0001, (char *)"\n"
+  "Construct a ValueSetMatchDecider.\n"
+  "\n"
+  "Xapian::ValueSetMatchDecider::ValueSetMatchDecider(Xapian::valueno\n"
+  "slot, bool inclusive_)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "slot:  The value slot number to look in.\n"
+  "\n"
+  "inclusive_:  If true, match decider accepts documents which have a\n"
+  "value in the specified slot which is a member of the test set; if\n"
+  "false, match decider accepts documents which do not have a value in\n"
+  "the specified slot. \n"
+  ""},
+  { (char *)"ValueSetMatchDecider_add_value", _wrap_ValueSetMatchDecider_add_value, 0x0001, (char *)"\n"
+  "Add a value to the test set.\n"
+  "\n"
+  "void Xapian::ValueSetMatchDecider::add_value(const std::string &value)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "value:  The value to add to the test set. \n"
+  ""},
+  { (char *)"ValueSetMatchDecider_remove_value", _wrap_ValueSetMatchDecider_remove_value, 0x0001, (char *)"\n"
+  "Remove a value from the test set.\n"
+  "\n"
+  "void Xapian::ValueSetMatchDecider::remove_value(const std::string\n"
+  "&value)\n"
+  "\n"
+  "Parameters:\n"
+  "-----------\n"
+  "\n"
+  "value:  The value to remove from the test set. \n"
+  ""},
+  { (char *)"delete_ValueSetMatchDecider", (PyCFunction)_wrap_delete_ValueSetMatchDecider, 0x0008, __null},
+  { (char *)"ValueSetMatchDecider_swigregister", ValueSetMatchDecider_swigregister, 0x0001, __null},
+  { (char *)"ValueSetMatchDecider_swiginit", ValueSetMatchDecider_swiginit, 0x0001, __null},
+  { (char *)"new_Compactor", (PyCFunction)_wrap_new_Compactor, 0x0008, (char *)"Xapian::Compactor::Compactor() "},
+  { (char *)"delete_Compactor", (PyCFunction)_wrap_delete_Compactor, 0x0008, (char *)"\n"
+  "virtual\n"
+  "Xapian::Compactor::~Compactor() \n"
+  ""},
+  { (char *)"Compactor_set_block_size", _wrap_Compactor_set_block_size, 0x0001, (char *)"\n"
+  "Set the block size to use for tables in the output database.\n"
+  "\n"
+  "void Xapian::Compactor::set_block_size(size_t block_size)\n"
+  "\n"
+  "Valid block sizes are currently powers of two between 2048 and 65536,\n"
+  "with the default being 8192, but the valid sizes and default may\n"
+  "change in the future. \n"
+  ""},
+  { (char *)"Compactor_set_renumber", _wrap_Compactor_set_renumber, 0x0001, (char *)"\n"
+  "Set whether to preserve existing document id values.\n"
+  "\n"
+  "void Xapian::Compactor::set_renumber(bool renumber)\n"
+  "\n"
+  "The default is true, which means that document ids will be renumbered\n"
+  "- currently by applying the same offset to all the document ids in a\n"
+  "particular source database.\n"
+  "\n"
+  "If false, then the document ids must be unique over all source\n"
+  "databases. Currently the ranges of document ids in each source must\n"
+  "not overlap either, though this restriction may be removed in the\n"
+  "future. \n"
+  ""},
+  { (char *)"Compactor_set_multipass", _wrap_Compactor_set_multipass, 0x0001, (char *)"\n"
+  "Set whether to merge postlists in multiple passes.\n"
+  "\n"
+  "void Xapian::Compactor::set_multipass(bool multipass)\n"
+  "\n"
+  "Default is false. If set to true and merging more than 3 databases,\n"
+  "merge the postlists in multiple passes, which is generally faster but\n"
+  "requires more disk space for temporary files. \n"
+  ""},
+  { (char *)"Compactor_set_compaction_level", _wrap_Compactor_set_compaction_level, 0x0001, (char *)"\n"
+  "Set the compaction level.\n"
+  "\n"
+  "void Xapian::Compactor::set_compaction_level(compaction_level\n"
+  "compaction)\n"
+  "\n"
+  "Values are: Xapian::Compactor::STANDARD - Don't split items\n"
+  "unnecessarily.\n"
+  "\n"
+  "Xapian::Compactor::FULL - Split items whenever it saves space (the\n"
+  "default).\n"
+  "\n"
+  "Xapian::Compactor::FULLER - Allow oversize items to save more space.\n"
+  "\n"
+  "FULLER isn't recommended if you ever plan to update the compacted\n"
+  "database. \n"
+  ""},
+  { (char *)"Compactor_set_destdir", _wrap_Compactor_set_destdir, 0x0001, (char *)"\n"
+  "Set where to write the output.\n"
+  "\n"
+  "void Xapian::Compactor::set_destdir(const std::string &destdir)\n"
+  "\n"
+  "This can be the same as an input if that input is a stub database (in\n"
+  "which case it will be updated atomically). \n"
+  ""},
+  { (char *)"Compactor_add_source", _wrap_Compactor_add_source, 0x0001, (char *)"\n"
+  "Add a source database.\n"
+  "\n"
+  "void Xapian::Compactor::add_source(const std::string &srcdir) \n"
+  ""},
+  { (char *)"Compactor_compact", (PyCFunction)_wrap_Compactor_compact, 0x0008, (char *)"\n"
+  "Perform the actual compaction/merging operation.\n"
+  "\n"
+  "void Xapian::Compactor::compact() \n"
+  ""},
+  { (char *)"Compactor_set_status", _wrap_Compactor_set_status, 0x0001, (char *)"\n"
+  "Update progress.\n"
+  "\n"
+  "virtual void Xapian::Compactor::set_status(const std::string &table,\n"
+  "const std::string &status)\n"
+  "\n"
+  "Subclass this method if you want to get progress updates during\n"
+  "compaction. This is called for each table first with empty status, And\n"
+  "then one or more times with non-empty status.\n"
+  "\n"
+  "The default implementation does nothing. \n"
+  ""},
+  { (char *)"Compactor_resolve_duplicate_metadata", _wrap_Compactor_resolve_duplicate_metadata, 0x0001, (char *)"\n"
+  "Resolve multiple user metadata entries with the same key.\n"
+  "\n"
+  "virtual std::string\n"
+  "Xapian::Compactor::resolve_duplicate_metadata(const std::string &key,\n"
+  "size_t num_tags, const std::string tags[])\n"
+  "\n"
+  "When merging, if the same user metadata key is set in more than one\n"
+  "input, then this method is called to allow this to be resolving in an\n"
+  "appropriate way.\n"
+  "\n"
+  "The default implementation just returns tags[0].\n"
+  "\n"
+  "For multipass this will currently get called multiple times for the\n"
+  "same key if there are duplicates to resolve in each pass, but this may\n"
+  "change in the future. \n"
+  ""},
+  { (char *)"disown_Compactor", (PyCFunction)_wrap_disown_Compactor, 0x0008, __null},
+  { (char *)"Compactor_swigregister", Compactor_swigregister, 0x0001, __null},
+  { (char *)"Compactor_swiginit", Compactor_swiginit, 0x0001, __null},
+  { __null, __null, 0, __null }
+};
+static void *_p_Xapian__WritableDatabaseTo_p_Xapian__Database(void *x, int *) {
+    return (void *)((Xapian::Database *) ((Xapian::WritableDatabase *) x));
+}
+static void *_p_Xapian__ValueSetMatchDeciderTo_p_Xapian__MatchDecider(void *x, int *) {
+    return (void *)((Xapian::MatchDecider *) ((Xapian::ValueSetMatchDecider *) x));
+}
+static void *_p_Xapian__NetworkTimeoutErrorTo_p_Xapian__NetworkError(void *x, int *) {
+    return (void *)((Xapian::NetworkError *) ((Xapian::NetworkTimeoutError *) x));
+}
+static void *_p_Xapian__MultiValueSorterTo_p_Xapian__Sorter(void *x, int *) {
+    return (void *)((Xapian::Sorter *) ((Xapian::MultiValueSorter *) x));
+}
+static void *_p_Xapian__SorterTo_p_Xapian__KeyMaker(void *x, int *) {
+    return (void *)((Xapian::KeyMaker *) ((Xapian::Sorter *) x));
+}
+static void *_p_Xapian__MultiValueSorterTo_p_Xapian__KeyMaker(void *x, int *) {
+    return (void *)((Xapian::KeyMaker *) (Xapian::Sorter *) ((Xapian::MultiValueSorter *) x));
+}
+static void *_p_Xapian__MultiValueKeyMakerTo_p_Xapian__KeyMaker(void *x, int *) {
+    return (void *)((Xapian::KeyMaker *) ((Xapian::MultiValueKeyMaker *) x));
+}
+static void *_p_Xapian__AssertionErrorTo_p_Xapian__LogicError(void *x, int *) {
+    return (void *)((Xapian::LogicError *) ((Xapian::AssertionError *) x));
+}
+static void *_p_Xapian__InvalidOperationErrorTo_p_Xapian__LogicError(void *x, int *) {
+    return (void *)((Xapian::LogicError *) ((Xapian::InvalidOperationError *) x));
+}
+static void *_p_Xapian__UnimplementedErrorTo_p_Xapian__LogicError(void *x, int *) {
+    return (void *)((Xapian::LogicError *) ((Xapian::UnimplementedError *) x));
+}
+static void *_p_Xapian__InvalidArgumentErrorTo_p_Xapian__LogicError(void *x, int *) {
+    return (void *)((Xapian::LogicError *) ((Xapian::InvalidArgumentError *) x));
+}
+static void *_p_Xapian__DecreasingValueWeightPostingSourceTo_p_Xapian__ValueWeightPostingSource(void *x, int *) {
+    return (void *)((Xapian::ValueWeightPostingSource *) ((Xapian::DecreasingValueWeightPostingSource *) x));
+}
+static void *_p_Xapian__ValueWeightPostingSourceTo_p_Xapian__ValuePostingSource(void *x, int *) {
+    return (void *)((Xapian::ValuePostingSource *) ((Xapian::ValueWeightPostingSource *) x));
+}
+static void *_p_Xapian__DecreasingValueWeightPostingSourceTo_p_Xapian__ValuePostingSource(void *x, int *) {
+    return (void *)((Xapian::ValuePostingSource *) (Xapian::ValueWeightPostingSource *) ((Xapian::DecreasingValueWeightPostingSource *) x));
+}
+static void *_p_Xapian__ValueMapPostingSourceTo_p_Xapian__ValuePostingSource(void *x, int *) {
+    return (void *)((Xapian::ValuePostingSource *) ((Xapian::ValueMapPostingSource *) x));
+}
+static void *_p_Xapian__ValuePostingSourceTo_p_Xapian__PostingSource(void *x, int *) {
+    return (void *)((Xapian::PostingSource *) ((Xapian::ValuePostingSource *) x));
+}
+static void *_p_Xapian__ValueWeightPostingSourceTo_p_Xapian__PostingSource(void *x, int *) {
+    return (void *)((Xapian::PostingSource *) (Xapian::ValuePostingSource *) ((Xapian::ValueWeightPostingSource *) x));
+}
+static void *_p_Xapian__DecreasingValueWeightPostingSourceTo_p_Xapian__PostingSource(void *x, int *) {
+    return (void *)((Xapian::PostingSource *) (Xapian::ValuePostingSource *)(Xapian::ValueWeightPostingSource *) ((Xapian::DecreasingValueWeightPostingSource *) x));
+}
+static void *_p_Xapian__ValueMapPostingSourceTo_p_Xapian__PostingSource(void *x, int *) {
+    return (void *)((Xapian::PostingSource *) (Xapian::ValuePostingSource *) ((Xapian::ValueMapPostingSource *) x));
+}
+static void *_p_Xapian__FixedWeightPostingSourceTo_p_Xapian__PostingSource(void *x, int *) {
+    return (void *)((Xapian::PostingSource *) ((Xapian::FixedWeightPostingSource *) x));
+}
+static void *_p_Xapian__BoolWeightTo_p_Xapian__Weight(void *x, int *) {
+    return (void *)((Xapian::Weight *) ((Xapian::BoolWeight *) x));
+}
+static void *_p_Xapian__TradWeightTo_p_Xapian__Weight(void *x, int *) {
+    return (void *)((Xapian::Weight *) ((Xapian::TradWeight *) x));
+}
+static void *_p_Xapian__BM25WeightTo_p_Xapian__Weight(void *x, int *) {
+    return (void *)((Xapian::Weight *) ((Xapian::BM25Weight *) x));
+}
+static void *_p_Xapian__ValueCountMatchSpyTo_p_Xapian__MatchSpy(void *x, int *) {
+    return (void *)((Xapian::MatchSpy *) ((Xapian::ValueCountMatchSpy *) x));
+}
+static void *_p_Xapian__SimpleStopperTo_p_Xapian__Stopper(void *x, int *) {
+    return (void *)((Xapian::Stopper *) ((Xapian::SimpleStopper *) x));
+}
+static void *_p_Xapian__DatabaseVersionErrorTo_p_Xapian__DatabaseOpeningError(void *x, int *) {
+    return (void *)((Xapian::DatabaseOpeningError *) ((Xapian::DatabaseVersionError *) x));
+}
+static void *_p_Xapian__DatabaseVersionErrorTo_p_Xapian__DatabaseError(void *x, int *) {
+    return (void *)((Xapian::DatabaseError *) (Xapian::DatabaseOpeningError *) ((Xapian::DatabaseVersionError *) x));
+}
+static void *_p_Xapian__DatabaseLockErrorTo_p_Xapian__DatabaseError(void *x, int *) {
+    return (void *)((Xapian::DatabaseError *) ((Xapian::DatabaseLockError *) x));
+}
+static void *_p_Xapian__DatabaseModifiedErrorTo_p_Xapian__DatabaseError(void *x, int *) {
+    return (void *)((Xapian::DatabaseError *) ((Xapian::DatabaseModifiedError *) x));
+}
+static void *_p_Xapian__DatabaseOpeningErrorTo_p_Xapian__DatabaseError(void *x, int *) {
+    return (void *)((Xapian::DatabaseError *) ((Xapian::DatabaseOpeningError *) x));
+}
+static void *_p_Xapian__DatabaseCreateErrorTo_p_Xapian__DatabaseError(void *x, int *) {
+    return (void *)((Xapian::DatabaseError *) ((Xapian::DatabaseCreateError *) x));
+}
+static void *_p_Xapian__DatabaseCorruptErrorTo_p_Xapian__DatabaseError(void *x, int *) {
+    return (void *)((Xapian::DatabaseError *) ((Xapian::DatabaseCorruptError *) x));
+}
+static void *_p_Xapian__DocNotFoundErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) ((Xapian::DocNotFoundError *) x));
+}
+static void *_p_Xapian__DatabaseLockErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) (Xapian::DatabaseError *) ((Xapian::DatabaseLockError *) x));
+}
+static void *_p_Xapian__NetworkTimeoutErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) (Xapian::NetworkError *) ((Xapian::NetworkTimeoutError *) x));
+}
+static void *_p_Xapian__FeatureUnavailableErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) ((Xapian::FeatureUnavailableError *) x));
+}
+static void *_p_Xapian__DatabaseCreateErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) (Xapian::DatabaseError *) ((Xapian::DatabaseCreateError *) x));
+}
+static void *_p_Xapian__InternalErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) ((Xapian::InternalError *) x));
+}
+static void *_p_Xapian__DatabaseModifiedErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) (Xapian::DatabaseError *) ((Xapian::DatabaseModifiedError *) x));
+}
+static void *_p_Xapian__DatabaseErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) ((Xapian::DatabaseError *) x));
+}
+static void *_p_Xapian__DatabaseOpeningErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) (Xapian::DatabaseError *) ((Xapian::DatabaseOpeningError *) x));
+}
+static void *_p_Xapian__RangeErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) ((Xapian::RangeError *) x));
+}
+static void *_p_Xapian__SerialisationErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) ((Xapian::SerialisationError *) x));
+}
+static void *_p_Xapian__DatabaseVersionErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) (Xapian::DatabaseError *)(Xapian::DatabaseOpeningError *) ((Xapian::DatabaseVersionError *) x));
+}
+static void *_p_Xapian__NetworkErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) ((Xapian::NetworkError *) x));
+}
+static void *_p_Xapian__DatabaseCorruptErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) (Xapian::DatabaseError *) ((Xapian::DatabaseCorruptError *) x));
+}
+static void *_p_Xapian__QueryParserErrorTo_p_Xapian__RuntimeError(void *x, int *) {
+    return (void *)((Xapian::RuntimeError *) ((Xapian::QueryParserError *) x));
+}
+static void *_p_Xapian__StringValueRangeProcessorTo_p_Xapian__ValueRangeProcessor(void *x, int *) {
+    return (void *)((Xapian::ValueRangeProcessor *) ((Xapian::StringValueRangeProcessor *) x));
+}
+static void *_p_Xapian__DateValueRangeProcessorTo_p_Xapian__ValueRangeProcessor(void *x, int *) {
+    return (void *)((Xapian::ValueRangeProcessor *) (Xapian::StringValueRangeProcessor *) ((Xapian::DateValueRangeProcessor *) x));
+}
+static void *_p_Xapian__NumberValueRangeProcessorTo_p_Xapian__ValueRangeProcessor(void *x, int *) {
+    return (void *)((Xapian::ValueRangeProcessor *) (Xapian::StringValueRangeProcessor *) ((Xapian::NumberValueRangeProcessor *) x));
+}
+static void *_p_Xapian__DateValueRangeProcessorTo_p_Xapian__StringValueRangeProcessor(void *x, int *) {
+    return (void *)((Xapian::StringValueRangeProcessor *) ((Xapian::DateValueRangeProcessor *) x));
+}
+static void *_p_Xapian__NumberValueRangeProcessorTo_p_Xapian__StringValueRangeProcessor(void *x, int *) {
+    return (void *)((Xapian::StringValueRangeProcessor *) ((Xapian::NumberValueRangeProcessor *) x));
+}
+static void *_p_Xapian__DocNotFoundErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *) ((Xapian::DocNotFoundError *) x));
+}
+static void *_p_Xapian__DatabaseLockErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *)(Xapian::DatabaseError *) ((Xapian::DatabaseLockError *) x));
+}
+static void *_p_Xapian__LogicErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) ((Xapian::LogicError *) x));
+}
+static void *_p_Xapian__DatabaseCreateErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *)(Xapian::DatabaseError *) ((Xapian::DatabaseCreateError *) x));
+}
+static void *_p_Xapian__FeatureUnavailableErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *) ((Xapian::FeatureUnavailableError *) x));
+}
+static void *_p_Xapian__NetworkTimeoutErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *)(Xapian::NetworkError *) ((Xapian::NetworkTimeoutError *) x));
+}
+static void *_p_Xapian__InternalErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *) ((Xapian::InternalError *) x));
+}
+static void *_p_Xapian__DatabaseModifiedErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *)(Xapian::DatabaseError *) ((Xapian::DatabaseModifiedError *) x));
+}
+static void *_p_Xapian__UnimplementedErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::LogicError *) ((Xapian::UnimplementedError *) x));
+}
+static void *_p_Xapian__DatabaseErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *) ((Xapian::DatabaseError *) x));
+}
+static void *_p_Xapian__RuntimeErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) ((Xapian::RuntimeError *) x));
+}
+static void *_p_Xapian__DatabaseOpeningErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *)(Xapian::DatabaseError *) ((Xapian::DatabaseOpeningError *) x));
+}
+static void *_p_Xapian__RangeErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *) ((Xapian::RangeError *) x));
+}
+static void *_p_Xapian__DatabaseVersionErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *)(Xapian::DatabaseError *)(Xapian::DatabaseOpeningError *) ((Xapian::DatabaseVersionError *) x));
+}
+static void *_p_Xapian__InvalidOperationErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::LogicError *) ((Xapian::InvalidOperationError *) x));
+}
+static void *_p_Xapian__AssertionErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::LogicError *) ((Xapian::AssertionError *) x));
+}
+static void *_p_Xapian__SerialisationErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *) ((Xapian::SerialisationError *) x));
+}
+static void *_p_Xapian__NetworkErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *) ((Xapian::NetworkError *) x));
+}
+static void *_p_Xapian__DatabaseCorruptErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *)(Xapian::DatabaseError *) ((Xapian::DatabaseCorruptError *) x));
+}
+static void *_p_Xapian__InvalidArgumentErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::LogicError *) ((Xapian::InvalidArgumentError *) x));
+}
+static void *_p_Xapian__QueryParserErrorTo_p_Xapian__Error(void *x, int *) {
+    return (void *)((Xapian::Error *) (Xapian::RuntimeError *) ((Xapian::QueryParserError *) x));
+}
+static swig_type_info _swigt__p_Xapian__AssertionError = {"_p_Xapian__AssertionError", "Xapian::AssertionError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__BM25Weight = {"_p_Xapian__BM25Weight", "Xapian::BM25Weight *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__BoolWeight = {"_p_Xapian__BoolWeight", "Xapian::BoolWeight *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__Compactor = {"_p_Xapian__Compactor", "Xapian::Compactor *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__Database = {"_p_Xapian__Database", "Xapian::Database *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__DatabaseCorruptError = {"_p_Xapian__DatabaseCorruptError", "Xapian::DatabaseCorruptError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__DatabaseCreateError = {"_p_Xapian__DatabaseCreateError", "Xapian::DatabaseCreateError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__DatabaseError = {"_p_Xapian__DatabaseError", "Xapian::DatabaseError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__DatabaseLockError = {"_p_Xapian__DatabaseLockError", "Xapian::DatabaseLockError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__DatabaseModifiedError = {"_p_Xapian__DatabaseModifiedError", "Xapian::DatabaseModifiedError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__DatabaseOpeningError = {"_p_Xapian__DatabaseOpeningError", "Xapian::DatabaseOpeningError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__DatabaseVersionError = {"_p_Xapian__DatabaseVersionError", "Xapian::DatabaseVersionError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__DateValueRangeProcessor = {"_p_Xapian__DateValueRangeProcessor", "Xapian::DateValueRangeProcessor *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__DecreasingValueWeightPostingSource = {"_p_Xapian__DecreasingValueWeightPostingSource", "Xapian::DecreasingValueWeightPostingSource *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__DocNotFoundError = {"_p_Xapian__DocNotFoundError", "Xapian::DocNotFoundError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__Document = {"_p_Xapian__Document", "Xapian::Document *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__ESet = {"_p_Xapian__ESet", "Xapian::ESet *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__ESetIterator = {"_p_Xapian__ESetIterator", "Xapian::ESetIterator *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__Enquire = {"_p_Xapian__Enquire", "Xapian::Enquire *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__Error = {"_p_Xapian__Error", "Xapian::Error *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__ExpandDecider = {"_p_Xapian__ExpandDecider", "Xapian::ExpandDecider *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__FeatureUnavailableError = {"_p_Xapian__FeatureUnavailableError", "Xapian::FeatureUnavailableError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__FixedWeightPostingSource = {"_p_Xapian__FixedWeightPostingSource", "Xapian::FixedWeightPostingSource *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__InternalError = {"_p_Xapian__InternalError", "Xapian::InternalError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__InvalidArgumentError = {"_p_Xapian__InvalidArgumentError", "Xapian::InvalidArgumentError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__InvalidOperationError = {"_p_Xapian__InvalidOperationError", "Xapian::InvalidOperationError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__KeyMaker = {"_p_Xapian__KeyMaker", "Xapian::KeyMaker *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__LogicError = {"_p_Xapian__LogicError", "Xapian::LogicError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__MSet = {"_p_Xapian__MSet", "Xapian::MSet *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__MSetIterator = {"_p_Xapian__MSetIterator", "Xapian::MSetIterator *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__MatchDecider = {"_p_Xapian__MatchDecider", "Xapian::MatchDecider *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__MatchSpy = {"_p_Xapian__MatchSpy", "Xapian::MatchSpy *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__MultiValueKeyMaker = {"_p_Xapian__MultiValueKeyMaker", "Xapian::MultiValueKeyMaker *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__MultiValueSorter = {"_p_Xapian__MultiValueSorter", "Xapian::MultiValueSorter *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__NetworkError = {"_p_Xapian__NetworkError", "Xapian::NetworkError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__NetworkTimeoutError = {"_p_Xapian__NetworkTimeoutError", "Xapian::NetworkTimeoutError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__NumberValueRangeProcessor = {"_p_Xapian__NumberValueRangeProcessor", "Xapian::NumberValueRangeProcessor *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__PositionIterator = {"_p_Xapian__PositionIterator", "Xapian::PositionIterator *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__PostingIterator = {"_p_Xapian__PostingIterator", "Xapian::PostingIterator *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__PostingSource = {"_p_Xapian__PostingSource", "Xapian::PostingSource *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__Query = {"_p_Xapian__Query", "Xapian::Query *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__QueryParser = {"_p_Xapian__QueryParser", "Xapian::QueryParser *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__QueryParserError = {"_p_Xapian__QueryParserError", "Xapian::QueryParserError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__RSet = {"_p_Xapian__RSet", "Xapian::RSet *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__RangeError = {"_p_Xapian__RangeError", "Xapian::RangeError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__Registry = {"_p_Xapian__Registry", "Xapian::Registry *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__RuntimeError = {"_p_Xapian__RuntimeError", "Xapian::RuntimeError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__SerialisationError = {"_p_Xapian__SerialisationError", "Xapian::SerialisationError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__SimpleStopper = {"_p_Xapian__SimpleStopper", "Xapian::SimpleStopper *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__Sorter = {"_p_Xapian__Sorter", "Xapian::Sorter *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__Stem = {"_p_Xapian__Stem", "Xapian::Stem *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__StemImplementation = {"_p_Xapian__StemImplementation", "Xapian::StemImplementation *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__Stopper = {"_p_Xapian__Stopper", "Xapian::Stopper *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__StringValueRangeProcessor = {"_p_Xapian__StringValueRangeProcessor", "Xapian::StringValueRangeProcessor *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__TermGenerator = {"_p_Xapian__TermGenerator", "Xapian::TermGenerator *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__TermIterator = {"_p_Xapian__TermIterator", "Xapian::TermIterator *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__TradWeight = {"_p_Xapian__TradWeight", "Xapian::TradWeight *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__UnimplementedError = {"_p_Xapian__UnimplementedError", "Xapian::UnimplementedError *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__ValueCountMatchSpy = {"_p_Xapian__ValueCountMatchSpy", "Xapian::ValueCountMatchSpy *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__ValueIterator = {"_p_Xapian__ValueIterator", "Xapian::ValueIterator *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__ValueMapPostingSource = {"_p_Xapian__ValueMapPostingSource", "Xapian::ValueMapPostingSource *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__ValuePostingSource = {"_p_Xapian__ValuePostingSource", "Xapian::ValuePostingSource *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__ValueRangeProcessor = {"_p_Xapian__ValueRangeProcessor", "Xapian::ValueRangeProcessor *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__ValueSetMatchDecider = {"_p_Xapian__ValueSetMatchDecider", "Xapian::ValueSetMatchDecider *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__ValueWeightPostingSource = {"_p_Xapian__ValueWeightPostingSource", "Xapian::ValueWeightPostingSource *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__Weight = {"_p_Xapian__Weight", "Xapian::Weight *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Xapian__WritableDatabase = {"_p_Xapian__WritableDatabase", "Xapian::WritableDatabase *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_compaction_level = {"_p_compaction_level", "compaction_level *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_docid_order = {"_p_docid_order", "docid_order *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_double = {"_p_double", "Xapian::doclength *|double *|Xapian::weight *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_feature_flag = {"_p_feature_flag", "feature_flag *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_first_type = {"_p_first_type", "first_type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_int = {"_p_int", "int *|Xapian::doccount_diff *|Xapian::termcount_diff *|Xapian::termpos_diff *|Xapian::valueno_diff *|Xapian::percent *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_op = {"_p_op", "op *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_second_type = {"_p_second_type", "second_type *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_std__invalid_argument = {"_p_std__invalid_argument", "std::invalid_argument *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_std__string = {"_p_std__string", "std::string *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_stem_strategy = {"_p_stem_strategy", "stem_strategy *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_swig__SwigPyIterator = {"_p_swig__SwigPyIterator", "swig::SwigPyIterator *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_unsigned_int = {"_p_unsigned_int", "Xapian::timeout *|unsigned int *|Xapian::doccount *|Xapian::termcount *|Xapian::valueno *|Xapian::docid *|Xapian::termpos *", 0, 0, (void*)0, 0};
+static swig_type_info *swig_type_initial[] = {
+  &_swigt__p_Xapian__AssertionError,
+  &_swigt__p_Xapian__BM25Weight,
+  &_swigt__p_Xapian__BoolWeight,
+  &_swigt__p_Xapian__Compactor,
+  &_swigt__p_Xapian__Database,
+  &_swigt__p_Xapian__DatabaseCorruptError,
+  &_swigt__p_Xapian__DatabaseCreateError,
+  &_swigt__p_Xapian__DatabaseError,
+  &_swigt__p_Xapian__DatabaseLockError,
+  &_swigt__p_Xapian__DatabaseModifiedError,
+  &_swigt__p_Xapian__DatabaseOpeningError,
+  &_swigt__p_Xapian__DatabaseVersionError,
+  &_swigt__p_Xapian__DateValueRangeProcessor,
+  &_swigt__p_Xapian__DecreasingValueWeightPostingSource,
+  &_swigt__p_Xapian__DocNotFoundError,
+  &_swigt__p_Xapian__Document,
+  &_swigt__p_Xapian__ESet,
+  &_swigt__p_Xapian__ESetIterator,
+  &_swigt__p_Xapian__Enquire,
+  &_swigt__p_Xapian__Error,
+  &_swigt__p_Xapian__ExpandDecider,
+  &_swigt__p_Xapian__FeatureUnavailableError,
+  &_swigt__p_Xapian__FixedWeightPostingSource,
+  &_swigt__p_Xapian__InternalError,
+  &_swigt__p_Xapian__InvalidArgumentError,
+  &_swigt__p_Xapian__InvalidOperationError,
+  &_swigt__p_Xapian__KeyMaker,
+  &_swigt__p_Xapian__LogicError,
+  &_swigt__p_Xapian__MSet,
+  &_swigt__p_Xapian__MSetIterator,
+  &_swigt__p_Xapian__MatchDecider,
+  &_swigt__p_Xapian__MatchSpy,
+  &_swigt__p_Xapian__MultiValueKeyMaker,
+  &_swigt__p_Xapian__MultiValueSorter,
+  &_swigt__p_Xapian__NetworkError,
+  &_swigt__p_Xapian__NetworkTimeoutError,
+  &_swigt__p_Xapian__NumberValueRangeProcessor,
+  &_swigt__p_Xapian__PositionIterator,
+  &_swigt__p_Xapian__PostingIterator,
+  &_swigt__p_Xapian__PostingSource,
+  &_swigt__p_Xapian__Query,
+  &_swigt__p_Xapian__QueryParser,
+  &_swigt__p_Xapian__QueryParserError,
+  &_swigt__p_Xapian__RSet,
+  &_swigt__p_Xapian__RangeError,
+  &_swigt__p_Xapian__Registry,
+  &_swigt__p_Xapian__RuntimeError,
+  &_swigt__p_Xapian__SerialisationError,
+  &_swigt__p_Xapian__SimpleStopper,
+  &_swigt__p_Xapian__Sorter,
+  &_swigt__p_Xapian__Stem,
+  &_swigt__p_Xapian__StemImplementation,
+  &_swigt__p_Xapian__Stopper,
+  &_swigt__p_Xapian__StringValueRangeProcessor,
+  &_swigt__p_Xapian__TermGenerator,
+  &_swigt__p_Xapian__TermIterator,
+  &_swigt__p_Xapian__TradWeight,
+  &_swigt__p_Xapian__UnimplementedError,
+  &_swigt__p_Xapian__ValueCountMatchSpy,
+  &_swigt__p_Xapian__ValueIterator,
+  &_swigt__p_Xapian__ValueMapPostingSource,
+  &_swigt__p_Xapian__ValuePostingSource,
+  &_swigt__p_Xapian__ValueRangeProcessor,
+  &_swigt__p_Xapian__ValueSetMatchDecider,
+  &_swigt__p_Xapian__ValueWeightPostingSource,
+  &_swigt__p_Xapian__Weight,
+  &_swigt__p_Xapian__WritableDatabase,
+  &_swigt__p_char,
+  &_swigt__p_compaction_level,
+  &_swigt__p_docid_order,
+  &_swigt__p_double,
+  &_swigt__p_feature_flag,
+  &_swigt__p_first_type,
+  &_swigt__p_int,
+  &_swigt__p_op,
+  &_swigt__p_second_type,
+  &_swigt__p_std__invalid_argument,
+  &_swigt__p_std__string,
+  &_swigt__p_stem_strategy,
+  &_swigt__p_swig__SwigPyIterator,
+  &_swigt__p_unsigned_int,
+};
+static swig_cast_info _swigc__p_Xapian__AssertionError[] = { {&_swigt__p_Xapian__AssertionError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__BM25Weight[] = { {&_swigt__p_Xapian__BM25Weight, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__BoolWeight[] = { {&_swigt__p_Xapian__BoolWeight, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__Compactor[] = { {&_swigt__p_Xapian__Compactor, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__Database[] = { {&_swigt__p_Xapian__Database, 0, 0, 0}, {&_swigt__p_Xapian__WritableDatabase, _p_Xapian__WritableDatabaseTo_p_Xapian__Database, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__DatabaseCorruptError[] = { {&_swigt__p_Xapian__DatabaseCorruptError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__DatabaseCreateError[] = { {&_swigt__p_Xapian__DatabaseCreateError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__DatabaseError[] = { {&_swigt__p_Xapian__DatabaseVersionError, _p_Xapian__DatabaseVersionErrorTo_p_Xapian__DatabaseError, 0, 0}, {&_swigt__p_Xapian__DatabaseLockError, _p_Xapian__DatabaseLockErrorTo_p_Xapian__DatabaseError, 0, 0}, {&_swigt__p_Xapian__DatabaseModifiedError, _p_Xapian__DatabaseModifiedErrorTo_p_Xapian__DatabaseError, 0, 0}, {&_swigt__p_Xapian__DatabaseOpeningError, _p_Xapian__DatabaseOpeningErrorTo_p_Xapian__DatabaseError, 0, 0}, {&_swigt__p_Xapian__DatabaseError, 0, 0, 0}, {&_swigt__p_Xapian__DatabaseCreateError, _p_Xapian__DatabaseCreateErrorTo_p_Xapian__DatabaseError, 0, 0}, {&_swigt__p_Xapian__DatabaseCorruptError, _p_Xapian__DatabaseCorruptErrorTo_p_Xapian__DatabaseError, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__DatabaseLockError[] = { {&_swigt__p_Xapian__DatabaseLockError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__DatabaseModifiedError[] = { {&_swigt__p_Xapian__DatabaseModifiedError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__DatabaseOpeningError[] = { {&_swigt__p_Xapian__DatabaseVersionError, _p_Xapian__DatabaseVersionErrorTo_p_Xapian__DatabaseOpeningError, 0, 0}, {&_swigt__p_Xapian__DatabaseOpeningError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__DatabaseVersionError[] = { {&_swigt__p_Xapian__DatabaseVersionError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__DateValueRangeProcessor[] = { {&_swigt__p_Xapian__DateValueRangeProcessor, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__DecreasingValueWeightPostingSource[] = { {&_swigt__p_Xapian__DecreasingValueWeightPostingSource, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__DocNotFoundError[] = { {&_swigt__p_Xapian__DocNotFoundError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__Document[] = { {&_swigt__p_Xapian__Document, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__ESet[] = { {&_swigt__p_Xapian__ESet, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__ESetIterator[] = { {&_swigt__p_Xapian__ESetIterator, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__Enquire[] = { {&_swigt__p_Xapian__Enquire, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__Error[] = { {&_swigt__p_Xapian__DocNotFoundError, _p_Xapian__DocNotFoundErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__DatabaseLockError, _p_Xapian__DatabaseLockErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__LogicError, _p_Xapian__LogicErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__NetworkTimeoutError, _p_Xapian__NetworkTimeoutErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__DatabaseCreateError, _p_Xapian__DatabaseCreateErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__FeatureUnavailableError, _p_Xapian__FeatureUnavailableErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__InternalError, _p_Xapian__InternalErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__DatabaseModifiedError, _p_Xapian__DatabaseModifiedErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__UnimplementedError, _p_Xapian__UnimplementedErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__RangeError, _p_Xapian__RangeErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__RuntimeError, _p_Xapian__RuntimeErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__DatabaseError, _p_Xapian__DatabaseErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__DatabaseOpeningError, _p_Xapian__DatabaseOpeningErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__InvalidOperationError, _p_Xapian__InvalidOperationErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__AssertionError, _p_Xapian__AssertionErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__DatabaseVersionError, _p_Xapian__DatabaseVersionErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__SerialisationError, _p_Xapian__SerialisationErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__Error, 0, 0, 0}, {&_swigt__p_Xapian__NetworkError, _p_Xapian__NetworkErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__InvalidArgumentError, _p_Xapian__InvalidArgumentErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__DatabaseCorruptError, _p_Xapian__DatabaseCorruptErrorTo_p_Xapian__Error, 0, 0}, {&_swigt__p_Xapian__QueryParserError, _p_Xapian__QueryParserErrorTo_p_Xapian__Error, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__ExpandDecider[] = { {&_swigt__p_Xapian__ExpandDecider, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__FeatureUnavailableError[] = { {&_swigt__p_Xapian__FeatureUnavailableError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__FixedWeightPostingSource[] = { {&_swigt__p_Xapian__FixedWeightPostingSource, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__InternalError[] = { {&_swigt__p_Xapian__InternalError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__InvalidArgumentError[] = { {&_swigt__p_Xapian__InvalidArgumentError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__InvalidOperationError[] = { {&_swigt__p_Xapian__InvalidOperationError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__KeyMaker[] = { {&_swigt__p_Xapian__Sorter, _p_Xapian__SorterTo_p_Xapian__KeyMaker, 0, 0}, {&_swigt__p_Xapian__MultiValueSorter, _p_Xapian__MultiValueSorterTo_p_Xapian__KeyMaker, 0, 0}, {&_swigt__p_Xapian__KeyMaker, 0, 0, 0}, {&_swigt__p_Xapian__MultiValueKeyMaker, _p_Xapian__MultiValueKeyMakerTo_p_Xapian__KeyMaker, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__LogicError[] = { {&_swigt__p_Xapian__AssertionError, _p_Xapian__AssertionErrorTo_p_Xapian__LogicError, 0, 0}, {&_swigt__p_Xapian__InvalidOperationError, _p_Xapian__InvalidOperationErrorTo_p_Xapian__LogicError, 0, 0}, {&_swigt__p_Xapian__UnimplementedError, _p_Xapian__UnimplementedErrorTo_p_Xapian__LogicError, 0, 0}, {&_swigt__p_Xapian__LogicError, 0, 0, 0}, {&_swigt__p_Xapian__InvalidArgumentError, _p_Xapian__InvalidArgumentErrorTo_p_Xapian__LogicError, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__MSet[] = { {&_swigt__p_Xapian__MSet, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__MSetIterator[] = { {&_swigt__p_Xapian__MSetIterator, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__MatchDecider[] = { {&_swigt__p_Xapian__MatchDecider, 0, 0, 0}, {&_swigt__p_Xapian__ValueSetMatchDecider, _p_Xapian__ValueSetMatchDeciderTo_p_Xapian__MatchDecider, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__MatchSpy[] = { {&_swigt__p_Xapian__MatchSpy, 0, 0, 0}, {&_swigt__p_Xapian__ValueCountMatchSpy, _p_Xapian__ValueCountMatchSpyTo_p_Xapian__MatchSpy, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__MultiValueKeyMaker[] = { {&_swigt__p_Xapian__MultiValueKeyMaker, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__MultiValueSorter[] = { {&_swigt__p_Xapian__MultiValueSorter, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__NetworkError[] = { {&_swigt__p_Xapian__NetworkError, 0, 0, 0}, {&_swigt__p_Xapian__NetworkTimeoutError, _p_Xapian__NetworkTimeoutErrorTo_p_Xapian__NetworkError, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__NetworkTimeoutError[] = { {&_swigt__p_Xapian__NetworkTimeoutError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__NumberValueRangeProcessor[] = { {&_swigt__p_Xapian__NumberValueRangeProcessor, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__PositionIterator[] = { {&_swigt__p_Xapian__PositionIterator, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__PostingIterator[] = { {&_swigt__p_Xapian__PostingIterator, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__PostingSource[] = { {&_swigt__p_Xapian__PostingSource, 0, 0, 0}, {&_swigt__p_Xapian__ValuePostingSource, _p_Xapian__ValuePostingSourceTo_p_Xapian__PostingSource, 0, 0}, {&_swigt__p_Xapian__ValueWeightPostingSource, _p_Xapian__ValueWeightPostingSourceTo_p_Xapian__PostingSource, 0, 0}, {&_swigt__p_Xapian__DecreasingValueWeightPostingSource, _p_Xapian__DecreasingValueWeightPostingSourceTo_p_Xapian__PostingSource, 0, 0}, {&_swigt__p_Xapian__ValueMapPostingSource, _p_Xapian__ValueMapPostingSourceTo_p_Xapian__PostingSource, 0, 0}, {&_swigt__p_Xapian__FixedWeightPostingSource, _p_Xapian__FixedWeightPostingSourceTo_p_Xapian__PostingSource, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__Query[] = { {&_swigt__p_Xapian__Query, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__QueryParser[] = { {&_swigt__p_Xapian__QueryParser, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__QueryParserError[] = { {&_swigt__p_Xapian__QueryParserError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__RSet[] = { {&_swigt__p_Xapian__RSet, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__RangeError[] = { {&_swigt__p_Xapian__RangeError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__Registry[] = { {&_swigt__p_Xapian__Registry, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__RuntimeError[] = { {&_swigt__p_Xapian__DocNotFoundError, _p_Xapian__DocNotFoundErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__DatabaseLockError, _p_Xapian__DatabaseLockErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__NetworkTimeoutError, _p_Xapian__NetworkTimeoutErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__FeatureUnavailableError, _p_Xapian__FeatureUnavailableErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__DatabaseCreateError, _p_Xapian__DatabaseCreateErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__InternalError, _p_Xapian__InternalErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__DatabaseModifiedError, _p_Xapian__DatabaseModifiedErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__DatabaseError, _p_Xapian__DatabaseErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__RangeError, _p_Xapian__RangeErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__RuntimeError, 0, 0, 0}, {&_swigt__p_Xapian__DatabaseOpeningError, _p_Xapian__DatabaseOpeningErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__SerialisationError, _p_Xapian__SerialisationErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__DatabaseVersionError, _p_Xapian__DatabaseVersionErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__NetworkError, _p_Xapian__NetworkErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__DatabaseCorruptError, _p_Xapian__DatabaseCorruptErrorTo_p_Xapian__RuntimeError, 0, 0}, {&_swigt__p_Xapian__QueryParserError, _p_Xapian__QueryParserErrorTo_p_Xapian__RuntimeError, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__SerialisationError[] = { {&_swigt__p_Xapian__SerialisationError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__SimpleStopper[] = { {&_swigt__p_Xapian__SimpleStopper, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__Sorter[] = { {&_swigt__p_Xapian__Sorter, 0, 0, 0}, {&_swigt__p_Xapian__MultiValueSorter, _p_Xapian__MultiValueSorterTo_p_Xapian__Sorter, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__Stem[] = { {&_swigt__p_Xapian__Stem, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__StemImplementation[] = { {&_swigt__p_Xapian__StemImplementation, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__Stopper[] = { {&_swigt__p_Xapian__Stopper, 0, 0, 0}, {&_swigt__p_Xapian__SimpleStopper, _p_Xapian__SimpleStopperTo_p_Xapian__Stopper, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__StringValueRangeProcessor[] = { {&_swigt__p_Xapian__StringValueRangeProcessor, 0, 0, 0}, {&_swigt__p_Xapian__DateValueRangeProcessor, _p_Xapian__DateValueRangeProcessorTo_p_Xapian__StringValueRangeProcessor, 0, 0}, {&_swigt__p_Xapian__NumberValueRangeProcessor, _p_Xapian__NumberValueRangeProcessorTo_p_Xapian__StringValueRangeProcessor, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__TermGenerator[] = { {&_swigt__p_Xapian__TermGenerator, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__TermIterator[] = { {&_swigt__p_Xapian__TermIterator, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__TradWeight[] = { {&_swigt__p_Xapian__TradWeight, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__UnimplementedError[] = { {&_swigt__p_Xapian__UnimplementedError, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__ValueCountMatchSpy[] = { {&_swigt__p_Xapian__ValueCountMatchSpy, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__ValueIterator[] = { {&_swigt__p_Xapian__ValueIterator, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__ValueMapPostingSource[] = { {&_swigt__p_Xapian__ValueMapPostingSource, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__ValuePostingSource[] = { {&_swigt__p_Xapian__ValuePostingSource, 0, 0, 0}, {&_swigt__p_Xapian__ValueWeightPostingSource, _p_Xapian__ValueWeightPostingSourceTo_p_Xapian__ValuePostingSource, 0, 0}, {&_swigt__p_Xapian__DecreasingValueWeightPostingSource, _p_Xapian__DecreasingValueWeightPostingSourceTo_p_Xapian__ValuePostingSource, 0, 0}, {&_swigt__p_Xapian__ValueMapPostingSource, _p_Xapian__ValueMapPostingSourceTo_p_Xapian__ValuePostingSource, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__ValueRangeProcessor[] = { {&_swigt__p_Xapian__ValueRangeProcessor, 0, 0, 0}, {&_swigt__p_Xapian__StringValueRangeProcessor, _p_Xapian__StringValueRangeProcessorTo_p_Xapian__ValueRangeProcessor, 0, 0}, {&_swigt__p_Xapian__DateValueRangeProcessor, _p_Xapian__DateValueRangeProcessorTo_p_Xapian__ValueRangeProcessor, 0, 0}, {&_swigt__p_Xapian__NumberValueRangeProcessor, _p_Xapian__NumberValueRangeProcessorTo_p_Xapian__ValueRangeProcessor, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__ValueSetMatchDecider[] = { {&_swigt__p_Xapian__ValueSetMatchDecider, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__ValueWeightPostingSource[] = { {&_swigt__p_Xapian__ValueWeightPostingSource, 0, 0, 0}, {&_swigt__p_Xapian__DecreasingValueWeightPostingSource, _p_Xapian__DecreasingValueWeightPostingSourceTo_p_Xapian__ValueWeightPostingSource, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__Weight[] = { {&_swigt__p_Xapian__BoolWeight, _p_Xapian__BoolWeightTo_p_Xapian__Weight, 0, 0}, {&_swigt__p_Xapian__TradWeight, _p_Xapian__TradWeightTo_p_Xapian__Weight, 0, 0}, {&_swigt__p_Xapian__Weight, 0, 0, 0}, {&_swigt__p_Xapian__BM25Weight, _p_Xapian__BM25WeightTo_p_Xapian__Weight, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Xapian__WritableDatabase[] = { {&_swigt__p_Xapian__WritableDatabase, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_compaction_level[] = { {&_swigt__p_compaction_level, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_docid_order[] = { {&_swigt__p_docid_order, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_double[] = { {&_swigt__p_double, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_feature_flag[] = { {&_swigt__p_feature_flag, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_first_type[] = { {&_swigt__p_first_type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_op[] = { {&_swigt__p_op, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_second_type[] = { {&_swigt__p_second_type, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_std__invalid_argument[] = { {&_swigt__p_std__invalid_argument, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_std__string[] = { {&_swigt__p_std__string, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_stem_strategy[] = { {&_swigt__p_stem_strategy, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_swig__SwigPyIterator[] = { {&_swigt__p_swig__SwigPyIterator, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_unsigned_int[] = { {&_swigt__p_unsigned_int, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info *swig_cast_initial[] = {
+  _swigc__p_Xapian__AssertionError,
+  _swigc__p_Xapian__BM25Weight,
+  _swigc__p_Xapian__BoolWeight,
+  _swigc__p_Xapian__Compactor,
+  _swigc__p_Xapian__Database,
+  _swigc__p_Xapian__DatabaseCorruptError,
+  _swigc__p_Xapian__DatabaseCreateError,
+  _swigc__p_Xapian__DatabaseError,
+  _swigc__p_Xapian__DatabaseLockError,
+  _swigc__p_Xapian__DatabaseModifiedError,
+  _swigc__p_Xapian__DatabaseOpeningError,
+  _swigc__p_Xapian__DatabaseVersionError,
+  _swigc__p_Xapian__DateValueRangeProcessor,
+  _swigc__p_Xapian__DecreasingValueWeightPostingSource,
+  _swigc__p_Xapian__DocNotFoundError,
+  _swigc__p_Xapian__Document,
+  _swigc__p_Xapian__ESet,
+  _swigc__p_Xapian__ESetIterator,
+  _swigc__p_Xapian__Enquire,
+  _swigc__p_Xapian__Error,
+  _swigc__p_Xapian__ExpandDecider,
+  _swigc__p_Xapian__FeatureUnavailableError,
+  _swigc__p_Xapian__FixedWeightPostingSource,
+  _swigc__p_Xapian__InternalError,
+  _swigc__p_Xapian__InvalidArgumentError,
+  _swigc__p_Xapian__InvalidOperationError,
+  _swigc__p_Xapian__KeyMaker,
+  _swigc__p_Xapian__LogicError,
+  _swigc__p_Xapian__MSet,
+  _swigc__p_Xapian__MSetIterator,
+  _swigc__p_Xapian__MatchDecider,
+  _swigc__p_Xapian__MatchSpy,
+  _swigc__p_Xapian__MultiValueKeyMaker,
+  _swigc__p_Xapian__MultiValueSorter,
+  _swigc__p_Xapian__NetworkError,
+  _swigc__p_Xapian__NetworkTimeoutError,
+  _swigc__p_Xapian__NumberValueRangeProcessor,
+  _swigc__p_Xapian__PositionIterator,
+  _swigc__p_Xapian__PostingIterator,
+  _swigc__p_Xapian__PostingSource,
+  _swigc__p_Xapian__Query,
+  _swigc__p_Xapian__QueryParser,
+  _swigc__p_Xapian__QueryParserError,
+  _swigc__p_Xapian__RSet,
+  _swigc__p_Xapian__RangeError,
+  _swigc__p_Xapian__Registry,
+  _swigc__p_Xapian__RuntimeError,
+  _swigc__p_Xapian__SerialisationError,
+  _swigc__p_Xapian__SimpleStopper,
+  _swigc__p_Xapian__Sorter,
+  _swigc__p_Xapian__Stem,
+  _swigc__p_Xapian__StemImplementation,
+  _swigc__p_Xapian__Stopper,
+  _swigc__p_Xapian__StringValueRangeProcessor,
+  _swigc__p_Xapian__TermGenerator,
+  _swigc__p_Xapian__TermIterator,
+  _swigc__p_Xapian__TradWeight,
+  _swigc__p_Xapian__UnimplementedError,
+  _swigc__p_Xapian__ValueCountMatchSpy,
+  _swigc__p_Xapian__ValueIterator,
+  _swigc__p_Xapian__ValueMapPostingSource,
+  _swigc__p_Xapian__ValuePostingSource,
+  _swigc__p_Xapian__ValueRangeProcessor,
+  _swigc__p_Xapian__ValueSetMatchDecider,
+  _swigc__p_Xapian__ValueWeightPostingSource,
+  _swigc__p_Xapian__Weight,
+  _swigc__p_Xapian__WritableDatabase,
+  _swigc__p_char,
+  _swigc__p_compaction_level,
+  _swigc__p_docid_order,
+  _swigc__p_double,
+  _swigc__p_feature_flag,
+  _swigc__p_first_type,
+  _swigc__p_int,
+  _swigc__p_op,
+  _swigc__p_second_type,
+  _swigc__p_std__invalid_argument,
+  _swigc__p_std__string,
+  _swigc__p_stem_strategy,
+  _swigc__p_swig__SwigPyIterator,
+  _swigc__p_unsigned_int,
+};
+static swig_const_info swig_const_table[] = {
+{0, 0, 0, 0.0, 0, 0}};
+}
+extern "C" {
+static __attribute__ ((__unused__)) void
+SWIG_InitializeModule(void *clientdata) {
+  size_t i;
+  swig_module_info *module_head, *iter;
+  int found, init;
+  clientdata = clientdata;
+  if (swig_module.next==0) {
+    swig_module.type_initial = swig_type_initial;
+    swig_module.cast_initial = swig_cast_initial;
+    swig_module.next = &swig_module;
+    init = 1;
+  } else {
+    init = 0;
+  }
+  module_head = SWIG_Python_GetModule();
+  if (!module_head) {
+    SWIG_Python_SetModule(&swig_module);
+    module_head = &swig_module;
+  } else {
+    found=0;
+    iter=module_head;
+    do {
+      if (iter==&swig_module) {
+        found=1;
+        break;
+      }
+      iter=iter->next;
+    } while (iter!= module_head);
+    if (found) return;
+    swig_module.next = module_head->next;
+    module_head->next = &swig_module;
+  }
+  if (init == 0) return;
+  for (i = 0; i < swig_module.size; ++i) {
+    swig_type_info *type = 0;
+    swig_type_info *ret;
+    swig_cast_info *cast;
+    if (swig_module.next != &swig_module) {
+      type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
+    }
+    if (type) {
+      if (swig_module.type_initial[i]->clientdata) {
+        type->clientdata = swig_module.type_initial[i]->clientdata;
+      }
+    } else {
+      type = swig_module.type_initial[i];
+    }
+    cast = swig_module.cast_initial[i];
+    while (cast->type) {
+      ret = 0;
+      if (swig_module.next != &swig_module) {
+        ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
+      }
+      if (ret) {
+        if (type == swig_module.type_initial[i]) {
+          cast->type = ret;
+          ret = 0;
+        } else {
+          swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
+          if (!ocast) ret = 0;
+        }
+      }
+      if (!ret) {
+        if (type->cast) {
+          type->cast->prev = cast;
+          cast->next = type->cast;
+        }
+        type->cast = cast;
+      }
+      cast++;
+    }
+    swig_module.types[i] = type;
+  }
+  swig_module.types[i] = 0;
+}
+static __attribute__ ((__unused__)) void
+SWIG_PropagateClientData(void) {
+  size_t i;
+  swig_cast_info *equiv;
+  static int init_run = 0;
+  if (init_run) return;
+  init_run = 1;
+  for (i = 0; i < swig_module.size; i++) {
+    if (swig_module.types[i]->clientdata) {
+      equiv = swig_module.types[i]->cast;
+      while (equiv) {
+        if (!equiv->converter) {
+          if (equiv->type && !equiv->type->clientdata)
+          SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
+        }
+        equiv = equiv->next;
+      }
+    }
+  }
+}
+}
+extern "C" {
+  typedef struct swig_globalvar {
+    char *name;
+    PyObject *(*get_attr)(void);
+    int (*set_attr)(PyObject *);
+    struct swig_globalvar *next;
+  } swig_globalvar;
+  typedef struct swig_varlinkobject {
+    Py_ssize_t ob_refcnt; struct _typeobject *ob_type;
+    swig_globalvar *vars;
+  } swig_varlinkobject;
+  static __attribute__ ((__unused__)) PyObject *
+  swig_varlink_repr(swig_varlinkobject *) {
+    return PyString_FromString("<Swig global variables>");
+  }
+  static __attribute__ ((__unused__)) PyObject *
+  swig_varlink_str(swig_varlinkobject *v) {
+    PyObject *str = PyString_FromString("(");
+    swig_globalvar *var;
+    for (var = v->vars; var; var=var->next) {
+      PyString_ConcatAndDel(&str,PyString_FromString(var->name));
+      if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", "));
+    }
+    PyString_ConcatAndDel(&str,PyString_FromString(")"));
+    return str;
+  }
+  static __attribute__ ((__unused__)) int
+  swig_varlink_print(swig_varlinkobject *v, FILE *fp, int ) {
+    char *tmp;
+    PyObject *str = swig_varlink_str(v);
+    fprintf(fp,"Swig global variables ");
+    fprintf(fp,"%s\n", tmp = SWIG_Python_str_AsChar(str));
+    ;
+    if ( --((PyObject*)(str))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(str)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(str))));
+    return 0;
+  }
+  static __attribute__ ((__unused__)) void
+  swig_varlink_dealloc(swig_varlinkobject *v) {
+    swig_globalvar *var = v->vars;
+    while (var) {
+      swig_globalvar *n = var->next;
+      free(var->name);
+      free(var);
+      var = n;
+    }
+  }
+  static __attribute__ ((__unused__)) PyObject *
+  swig_varlink_getattr(swig_varlinkobject *v, char *n) {
+    PyObject *res = __null;
+    swig_globalvar *var = v->vars;
+    while (var) {
+      if (strcmp(var->name,n) == 0) {
+        res = (*var->get_attr)();
+        break;
+      }
+      var = var->next;
+    }
+    if (res == __null && !PyErr_Occurred()) {
+      PyErr_SetString(PyExc_NameError,"Unknown C global variable");
+    }
+    return res;
+  }
+  static __attribute__ ((__unused__)) int
+  swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) {
+    int res = 1;
+    swig_globalvar *var = v->vars;
+    while (var) {
+      if (strcmp(var->name,n) == 0) {
+        res = (*var->set_attr)(p);
+        break;
+      }
+      var = var->next;
+    }
+    if (res == 1 && !PyErr_Occurred()) {
+      PyErr_SetString(PyExc_NameError,"Unknown C global variable");
+    }
+    return res;
+  }
+  static __attribute__ ((__unused__)) PyTypeObject*
+  swig_varlink_type(void) {
+    static char varlink__doc__[] = "Swig var link object";
+    static PyTypeObject varlink_type;
+    static int type_init = 0;
+    if (!type_init) {
+      const PyTypeObject tmp
+      = {
+        1, __null,
+        0,
+        (char *)"swigvarlink",
+        sizeof(swig_varlinkobject),
+        0,
+        (destructor) swig_varlink_dealloc,
+        (printfunc) swig_varlink_print,
+        (getattrfunc) swig_varlink_getattr,
+        (setattrfunc) swig_varlink_setattr,
+        0,
+        (reprfunc) swig_varlink_repr,
+        0,
+        0,
+        0,
+        0,
+        0,
+        (reprfunc) swig_varlink_str,
+        0,
+        0,
+        0,
+        0,
+        varlink__doc__,
+        0,
+        0,
+        0,
+        0,
+        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+        0,
+      };
+      varlink_type = tmp;
+      varlink_type.ob_type = &PyType_Type;
+      type_init = 1;
+    }
+    return &varlink_type;
+  }
+  static __attribute__ ((__unused__)) PyObject *
+  SWIG_Python_newvarlink(void) {
+    swig_varlinkobject *result = ( (swig_varlinkobject *) PyObject_Init( (PyObject *) PyObject_Malloc( ( (swig_varlink_type())->tp_basicsize ) ), (swig_varlink_type())) );
+    if (result) {
+      result->vars = 0;
+    }
+    return ((PyObject*) result);
+  }
+  static __attribute__ ((__unused__)) void
+  SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) {
+    swig_varlinkobject *v = (swig_varlinkobject *) p;
+    swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar));
+    if (gv) {
+      size_t size = strlen(name)+1;
+      gv->name = (char *)malloc(size);
+      if (gv->name) {
+        strncpy(gv->name,name,size);
+        gv->get_attr = get_attr;
+        gv->set_attr = set_attr;
+        gv->next = v->vars;
+      }
+    }
+    v->vars = gv;
+  }
+  static __attribute__ ((__unused__)) PyObject *
+  SWIG_globals(void) {
+    static PyObject *_SWIG_globals = 0;
+    if (!_SWIG_globals) _SWIG_globals = SWIG_Python_newvarlink();
+    return _SWIG_globals;
+  }
+  static __attribute__ ((__unused__)) void
+  SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) {
+    PyObject *obj = 0;
+    size_t i;
+    for (i = 0; constants[i].type; ++i) {
+      switch(constants[i].type) {
+      case 4:
+        obj = SWIG_Python_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype, 0);
+        break;
+      case 5:
+        obj = SWIG_Python_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype));
+        break;
+      default:
+        obj = 0;
+        break;
+      }
+      if (obj) {
+        PyDict_SetItemString(d, constants[i].name, obj);
+        if ( --((PyObject*)(obj))->ob_refcnt != 0) ; else ( (*(((PyObject*)((PyObject *)(obj)))->ob_type)->tp_dealloc)((PyObject *)((PyObject *)(obj))));
+      }
+    }
+  }
+  static __attribute__ ((__unused__)) void
+  SWIG_Python_FixMethods(PyMethodDef *methods,
+    swig_const_info *const_table,
+    swig_type_info **types,
+    swig_type_info **types_initial) {
+    size_t i;
+    for (i = 0; methods[i].ml_name; ++i) {
+      const char *c = methods[i].ml_doc;
+      if (c && (c = strstr(c, "swig_ptr: "))) {
+        int j;
+        swig_const_info *ci = 0;
+        const char *name = c + 10;
+        for (j = 0; const_table[j].type; ++j) {
+          if (strncmp(const_table[j].name, name,
+              strlen(const_table[j].name)) == 0) {
+            ci = &(const_table[j]);
+            break;
+          }
+        }
+        if (ci) {
+          size_t shift = (ci->ptype) - types;
+          swig_type_info *ty = types_initial[shift];
+          size_t ldoc = (c - methods[i].ml_doc);
+          size_t lptr = strlen(ty->name)+2*sizeof(void*)+2;
+          char *ndoc = (char*)malloc(ldoc + lptr + 10);
+          if (ndoc) {
+            char *buff = ndoc;
+            void *ptr = (ci->type == 4) ? ci->pvalue : 0;
+            if (ptr) {
+              strncpy(buff, methods[i].ml_doc, ldoc);
+              buff += ldoc;
+              strncpy(buff, "swig_ptr: ", 10);
+              buff += 10;
+              SWIG_PackVoidPtr(buff, ptr, ty->name, lptr);
+              methods[i].ml_doc = ndoc;
+            }
+          }
+        }
+      }
+    }
+  }
+}
+extern "C"
+__attribute__ ((visibility("default")))
+void
+init_xapian(void) {
+  PyObject *m, *d;
+  SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial);
+  m = Py_InitModule4_64((char *) "_xapian", SwigMethods, (char *)__null, (PyObject *)__null, 1013);
+  d = PyModule_GetDict(m);
+  SWIG_InitializeModule(0);
+  SWIG_Python_InstallConstants(d, swig_const_table);
+  SWIG_Python_SetConstant(d, "BAD_VALUENO",SWIG_From_unsigned_SS_int(static_cast< unsigned int >(Xapian::BAD_VALUENO)));
+  SWIG_Python_SetConstant(d, "MSET_DID",SWIG_From_int(static_cast< int >(0)));
+  SWIG_Python_SetConstant(d, "MSET_WT",SWIG_From_int(static_cast< int >(1)));
+  SWIG_Python_SetConstant(d, "MSET_RANK",SWIG_From_int(static_cast< int >(2)));
+  SWIG_Python_SetConstant(d, "MSET_PERCENT",SWIG_From_int(static_cast< int >(3)));
+  SWIG_Python_SetConstant(d, "MSET_DOCUMENT",SWIG_From_int(static_cast< int >(4)));
+  SWIG_Python_SetConstant(d, "ESET_TNAME",SWIG_From_int(static_cast< int >(0)));
+  SWIG_Python_SetConstant(d, "ESET_WT",SWIG_From_int(static_cast< int >(1)));
+  SWIG_Python_SetConstant(d, "Enquire_ASCENDING",SWIG_From_int(static_cast< int >(Xapian::Enquire::ASCENDING)));
+  SWIG_Python_SetConstant(d, "Enquire_DESCENDING",SWIG_From_int(static_cast< int >(Xapian::Enquire::DESCENDING)));
+  SWIG_Python_SetConstant(d, "Enquire_DONT_CARE",SWIG_From_int(static_cast< int >(Xapian::Enquire::DONT_CARE)));
+  SWIG_Python_SetConstant(d, "Enquire_INCLUDE_QUERY_TERMS",SWIG_From_int(static_cast< int >(Xapian::Enquire::INCLUDE_QUERY_TERMS)));
+  SWIG_Python_SetConstant(d, "Enquire_USE_EXACT_TERMFREQ",SWIG_From_int(static_cast< int >(Xapian::Enquire::USE_EXACT_TERMFREQ)));
+  SWIG_Python_SetConstant(d, "DB_CREATE_OR_OPEN",SWIG_From_int(static_cast< int >(Xapian::DB_CREATE_OR_OPEN)));
+  SWIG_Python_SetConstant(d, "DB_CREATE",SWIG_From_int(static_cast< int >(Xapian::DB_CREATE)));
+  SWIG_Python_SetConstant(d, "DB_CREATE_OR_OVERWRITE",SWIG_From_int(static_cast< int >(Xapian::DB_CREATE_OR_OVERWRITE)));
+  SWIG_Python_SetConstant(d, "DB_OPEN",SWIG_From_int(static_cast< int >(Xapian::DB_OPEN)));
+  SWIG_Python_SetConstant(d, "Query_OP_AND",SWIG_From_int(static_cast< int >(Xapian::Query::OP_AND)));
+  SWIG_Python_SetConstant(d, "Query_OP_OR",SWIG_From_int(static_cast< int >(Xapian::Query::OP_OR)));
+  SWIG_Python_SetConstant(d, "Query_OP_AND_NOT",SWIG_From_int(static_cast< int >(Xapian::Query::OP_AND_NOT)));
+  SWIG_Python_SetConstant(d, "Query_OP_XOR",SWIG_From_int(static_cast< int >(Xapian::Query::OP_XOR)));
+  SWIG_Python_SetConstant(d, "Query_OP_AND_MAYBE",SWIG_From_int(static_cast< int >(Xapian::Query::OP_AND_MAYBE)));
+  SWIG_Python_SetConstant(d, "Query_OP_FILTER",SWIG_From_int(static_cast< int >(Xapian::Query::OP_FILTER)));
+  SWIG_Python_SetConstant(d, "Query_OP_NEAR",SWIG_From_int(static_cast< int >(Xapian::Query::OP_NEAR)));
+  SWIG_Python_SetConstant(d, "Query_OP_PHRASE",SWIG_From_int(static_cast< int >(Xapian::Query::OP_PHRASE)));
+  SWIG_Python_SetConstant(d, "Query_OP_VALUE_RANGE",SWIG_From_int(static_cast< int >(Xapian::Query::OP_VALUE_RANGE)));
+  SWIG_Python_SetConstant(d, "Query_OP_SCALE_WEIGHT",SWIG_From_int(static_cast< int >(Xapian::Query::OP_SCALE_WEIGHT)));
+  SWIG_Python_SetConstant(d, "Query_OP_ELITE_SET",SWIG_From_int(static_cast< int >(Xapian::Query::OP_ELITE_SET)));
+  SWIG_Python_SetConstant(d, "Query_OP_VALUE_GE",SWIG_From_int(static_cast< int >(Xapian::Query::OP_VALUE_GE)));
+  SWIG_Python_SetConstant(d, "Query_OP_VALUE_LE",SWIG_From_int(static_cast< int >(Xapian::Query::OP_VALUE_LE)));
+  SWIG_Python_SetConstant(d, "Query_OP_SYNONYM",SWIG_From_int(static_cast< int >(Xapian::Query::OP_SYNONYM)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_BOOLEAN",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_BOOLEAN)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_PHRASE",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_PHRASE)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_LOVEHATE",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_LOVEHATE)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_BOOLEAN_ANY_CASE",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_BOOLEAN_ANY_CASE)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_WILDCARD",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_WILDCARD)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_PURE_NOT",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_PURE_NOT)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_PARTIAL",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_PARTIAL)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_SPELLING_CORRECTION",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_SPELLING_CORRECTION)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_SYNONYM",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_SYNONYM)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_AUTO_SYNONYMS",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_AUTO_SYNONYMS)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_AUTO_MULTIWORD_SYNONYMS",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_AUTO_MULTIWORD_SYNONYMS)));
+  SWIG_Python_SetConstant(d, "QueryParser_FLAG_DEFAULT",SWIG_From_int(static_cast< int >(Xapian::QueryParser::FLAG_DEFAULT)));
+  SWIG_Python_SetConstant(d, "QueryParser_STEM_NONE",SWIG_From_int(static_cast< int >(Xapian::QueryParser::STEM_NONE)));
+  SWIG_Python_SetConstant(d, "QueryParser_STEM_SOME",SWIG_From_int(static_cast< int >(Xapian::QueryParser::STEM_SOME)));
+  SWIG_Python_SetConstant(d, "QueryParser_STEM_ALL",SWIG_From_int(static_cast< int >(Xapian::QueryParser::STEM_ALL)));
+  SWIG_Python_SetConstant(d, "TermGenerator_FLAG_SPELLING",SWIG_From_int(static_cast< int >(Xapian::TermGenerator::FLAG_SPELLING)));
+  SWIG_Python_SetConstant(d, "Compactor_STANDARD",SWIG_From_int(static_cast< int >(Xapian::Compactor::STANDARD)));
+  SWIG_Python_SetConstant(d, "Compactor_FULL",SWIG_From_int(static_cast< int >(Xapian::Compactor::FULL)));
+  SWIG_Python_SetConstant(d, "Compactor_FULLER",SWIG_From_int(static_cast< int >(Xapian::Compactor::FULLER)));
+  PyEval_InitThreads();
+  return;
+}